Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP周号、开始日期和结束日期_Php_Date_Strtotime - Fatal编程技术网

PHP周号、开始日期和结束日期

PHP周号、开始日期和结束日期,php,date,strtotime,Php,Date,Strtotime,我正在编写一个程序代码来显示两个日期之间的周数。我还想显示周数之间的日期。我已经根据stack overflow中的示例代码编写了以下代码。(&&) 函数getStartAndEndDate($week,$year) { $time=strottime(“1月1日$year”,time()); $day=日期('w',$time); $time+=((7*周)+1-$day)*24*3600; $return[0]=日期($dMY',$time); $time+=6*24*3600; $retu

我正在编写一个程序代码来显示两个日期之间的周数。我还想显示周数之间的日期。我已经根据stack overflow中的示例代码编写了以下代码。(&&)

函数getStartAndEndDate($week,$year) { $time=strottime(“1月1日$year”,time()); $day=日期('w',$time); $time+=((7*周)+1-$day)*24*3600; $return[0]=日期($dMY',$time); $time+=6*24*3600; $return[1]=日期($dMY',$time); return$return; } $startTime=strotime('2013-04-01'); $endTime=strottime('2013-05-03'); $weeks=array(); 而($startTime<$endTime) { $weeks[]=日期('W',$startTime); $startTime+=strotime(“+1周”,0); } 回声计数(周)。“
”; $year=“2013”; foreach($key=>w的周数) { 回音“周数:”.$w.“--”; $return=getStartAndEndDate($w,$year); $r0=$return[0]; $r1=$return[1]; 回显“开始-”$r0。“-End-”$r1。“
”; } 但结果是错误的。输出显示:

五,

周数:14——2013年4月7日开始至2013年4月13日结束

周数:14——2013年4月7日开始至2013年4月13日结束

周数:15——2013年4月14日开始至2013年4月20日结束

周数:16——2013年4月21日开始至2013年4月27日结束

第17周——开始日期2013年4月28日至结束日期2013年5月4日


第14周从2013年3月31日至2013年4月6日。我想不出是什么问题。任何帮助都必须感谢

您是否尝试查看日期

$startTime = strtotime('2012-12-30');
$endTime = strtotime('2013-05-03');
实际的第14周是

Week Number:14--Start-08Apr2013-End-14Apr2013
不是

PHP从星期一-->星期天开始运行数周。所以,如果你取2012-12-30,也就是周日,它会计算出来

Week Number:01--Start-07Jan2013-End-13Jan2013
Week Number:02--Start-14Jan2013-End-20Jan2013
Week Number:03--Start-21Jan2013-End-27Jan2013
Week Number:04--Start-28Jan2013-End-03Feb2013
Week Number:05--Start-04Feb2013-End-10Feb2013
Week Number:06--Start-11Feb2013-End-17Feb2013
Week Number:07--Start-18Feb2013-End-24Feb2013
Week Number:08--Start-25Feb2013-End-03Mar2013
Week Number:09--Start-04Mar2013-End-10Mar2013
Week Number:10--Start-11Mar2013-End-17Mar2013
Week Number:11--Start-18Mar2013-End-24Mar2013
Week Number:12--Start-25Mar2013-End-31Mar2013
Week Number:13--Start-01Apr2013-End-07Apr2013
Week Number:14--Start-08Apr2013-End-14Apr2013
我已经弄明白了:

function week_start_date($wk_num, $yr, $first = 1, $format = 'F d, Y')
{
    $wk_ts  = strtotime('+' . $wk_num . ' weeks', strtotime($yr . '0101'));
    $mon_ts = strtotime('-' . date('w', $wk_ts) + $first . ' days', $wk_ts);
    return date($format, $mon_ts);
}


$year="2013";
$startDate="2012-12-30";
$endDate="2013-05-03";

$p = new DatePeriod(
        new DateTime($startDate),
        new DateInterval('P1W'),
        new DateTime($endDate)
);

foreach ($p as $k=>$w) {
    echo $k.":".$w->format('W')."<br/>";
    $w=$w->format('W');
    $sStartDate = week_start_date($w, $year);
    $sEndDate   = date('F d, Y', strtotime('+6 days', strtotime($sStartDate)));
    echo $sStartDate."&&".$sEndDate."<br/>";
}
function week\u start\u date($wk\u num,$yr,$first=1,$format='fd,Y')
{
$wk_ts=strotime('+'.$wk_num.'weeks',strotime('0101'));
$mon_ts=strotime('-'.date('w',$wk_ts)+$first.'days',$wk_ts);
返回日期($format$mon\ts);
}
$year=“2013”;
$startDate=“2012-12-30”;
$endDate=“2013-05-03”;
$p=新日期周期(
新日期时间($startDate),
新日期间隔('P1W'),
新日期时间($endDate)
);
foreach($p为$k=>$w){
echo$k.“:”$w->format('w')。“
”; $w=$w->格式('w'); $sStartDate=周\开始\日期($w,$year); $sEndDate=date('fd,Y',strottime('+6天',strottime('sStartDate)); echo$sStartDate.&&“$sEndDate.
”; }
我怀疑这是时区问题,但我无法用我尝试过的任何时区重现它。是的,可能是时区问题。但是我想知道我怎么能写代码!调用
date\u default\u timezone\u set('UTC')
会修复它吗?哦,好的,我会看看。但是我的代码在第14周显示了两个
Week Number:01--Start-07Jan2013-End-13Jan2013
Week Number:02--Start-14Jan2013-End-20Jan2013
Week Number:03--Start-21Jan2013-End-27Jan2013
Week Number:04--Start-28Jan2013-End-03Feb2013
Week Number:05--Start-04Feb2013-End-10Feb2013
Week Number:06--Start-11Feb2013-End-17Feb2013
Week Number:07--Start-18Feb2013-End-24Feb2013
Week Number:08--Start-25Feb2013-End-03Mar2013
Week Number:09--Start-04Mar2013-End-10Mar2013
Week Number:10--Start-11Mar2013-End-17Mar2013
Week Number:11--Start-18Mar2013-End-24Mar2013
Week Number:12--Start-25Mar2013-End-31Mar2013
Week Number:13--Start-01Apr2013-End-07Apr2013
Week Number:14--Start-08Apr2013-End-14Apr2013
function week_start_date($wk_num, $yr, $first = 1, $format = 'F d, Y')
{
    $wk_ts  = strtotime('+' . $wk_num . ' weeks', strtotime($yr . '0101'));
    $mon_ts = strtotime('-' . date('w', $wk_ts) + $first . ' days', $wk_ts);
    return date($format, $mon_ts);
}


$year="2013";
$startDate="2012-12-30";
$endDate="2013-05-03";

$p = new DatePeriod(
        new DateTime($startDate),
        new DateInterval('P1W'),
        new DateTime($endDate)
);

foreach ($p as $k=>$w) {
    echo $k.":".$w->format('W')."<br/>";
    $w=$w->format('W');
    $sStartDate = week_start_date($w, $year);
    $sEndDate   = date('F d, Y', strtotime('+6 days', strtotime($sStartDate)));
    echo $sStartDate."&&".$sEndDate."<br/>";
}