php year 当前年,php – YEARWEEKS两个日期之间

我希望在两个给定日期之间使用MySQL / PHP进行一系列的一周.

到目前为止,我曾经这么做过,因为日期不可能在不同的年份.

// $yw_min = yearweek of the min date

// $yw_max = yearweek of the max date

$yearweeks = array();

for ($i = $yw_min; $i <= $yw_max; $i++) {

$yearweeks[$i] = "W " . substr($i, 4, 6);

}

/*

yearweeks : Array (

[201501] => W 01

[201502] => W 02

[201503] => W 03

[201504] => W 04

[201505] => W 05

)

*/

这些不再适用,因为我的约会时间可能不同.

拥有一个包含未来10年所有日期的数据库是不可取的.

为了增加一周的年份> 52也是不可想象的,因为我不知道这一年是否包含51,52或53周.

编辑:这里是故事的全部背景

我必须建立一周基于数据的图表.最初,我只把年份和季度作为“约会”.

我出现了一个功能,给我一周(年度):

function getYearweeks($year, $quarter) {

$min = ($quarter - 1) * 3 +1;

$max = $quarter * 3 + 1;

$dmin = $year . "-" . (($min < 10)?"0" . $min:$min) . "-01";

$dmax = (($max > 12)?($year + 1) . "-01-01":$year . "-" . (($max < 10)?"0" . $max:$max) . "-01");

$q = "SELECT YEARWEEK('" . $dmin . "',1) AS yw_min,

YEARWEEK(DATE_SUB('" . $dmax . "', INTERVAL 1 DAY),1) AS yw_max";

$r = mysql_query($q) or die (mysql_error()."
".$q."
");

$d = mysql_fetch_assoc($r);

$yw_min = $d['yw_min'];

$yw_max = $d['yw_max'];

$yearweeks = array();

for ($i = $yw_min; $i <= $yw_max; $i++) {

$yearweeks[$i] = "W " . substr($i, 4, 6);

}

return $yearweeks;

}

问题是,现在,客户想要“滑动”;我在我的函数上添加了一个参数“interval”,它是一个星期来添加(或子)到原始日期(年度季度):

function getYearweeks($year, $quarter, $interval=0) {

$min = ($quarter - 1) * 3 +1;

$max = $quarter * 3 + 1;

$dmin = $year . "-" . (($min < 10)?"0" . $min:$min) . "-01";

$dmax = (($max > 12)?($year + 1) . "-01-01":$year . "-" . (($max < 10)?"0" . $max:$max) . "-01");

$q = "SELECT YEARWEEK(DATE_ADD('" . $dmin . "', INTERVAL " . $interval . " WEEK),1) AS yw_min,

YEARWEEK(DATE_SUB(DATE_ADD('" . $dmax . "', INTERVAL " . $interval . " WEEK), INTERVAL 1 DAY),1) AS yw_max";

$r = mysql_query($q) or die (mysql_error()."
".$q."
");

$d = mysql_fetch_assoc($r);

$yw_min = $d['yw_min'];

$yw_max = $d['yw_max'];

// mess up when we are between two different years

$yearweeks = array();

for ($i = $yw_min; $i <= $yw_max; $i++) {

$yearweeks[$i] = "W " . substr($i, 4, 6);

}

return $yearweeks;

}

解决方法:

你可以使用DatePeriod类在PHP中完成它.在DateTime中为两个日期(分别为开始和结束)创建一个对象,DateInterval也为DatePeriod.

例:

$dates = array();

$begin = new DateTime('2014-09-01'); // beginning then from

$end = new DateTime('2015-02-02'); // end

$interval = new DateInterval('P1D');

$daterange = new DatePeriod($begin, $interval ,$end);

foreach($daterange as $date) {

$dates[$date->format('o W')] = 'Week ' . $date->format('W'); // iso date

}

echo '

';

print_r($dates);

应输出:

Array

(

[2014 36] => Week 36

[2014 37] => Week 37

[2014 38] => Week 38

[2014 39] => Week 39

[2014 40] => Week 40

[2014 41] => Week 41

[2014 42] => Week 42

[2014 43] => Week 43

[2014 44] => Week 44

[2014 45] => Week 45

[2014 46] => Week 46

[2014 47] => Week 47

[2014 48] => Week 48

[2014 49] => Week 49

[2014 50] => Week 50

[2014 51] => Week 51

[2014 52] => Week 52

[2014 01] => Week 01

[2015 01] => Week 01

[2015 02] => Week 02

[2015 03] => Week 03

[2015 04] => Week 04

[2015 05] => Week 05

[2015 06] => Week 06

)

有关更多信息,请访问手册中的DatePeriod课程.

标签:php,mysql,datetime

来源: https://codeday.me/bug/20190830/1768746.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值