PHP日期 - 获取给定周的开始和结束日期,格式为W-m-Y

3
我有一个日期数组,格式为W-m-Y
例如,从34-08-2016开始,我想得到20-08-2016 - 26-08-2016这样的东西。请求格式中的这些天不是实际存在的。
有什么好的解决方法吗?
5个回答

3

试一下

function getStartAndEndDate($week, $year) {
  $dto = new DateTime();
  $dto->setISODate($year, $week);
  $ret['week_start'] = $dto->format('Y-m-d');
  $dto->modify('+6 days');
  $ret['week_end'] = $dto->format('Y-m-d');
  return $ret;
}

$week_array = getStartAndEndDate(34,2016);

echo "start date ".date('d-m-Y',strtotime($week_array['week_start'])).'<br>';
echo "End date ".date('d-m-Y',strtotime($week_array['week_end']));

感谢您使用 DateTime,这是一种更加简洁的方法来完成此操作。 - Machavity
感谢您的帮助。这是最干净和我认为最好的解决方案。已批准 ;) - kkochanski

1

试试这个,

function getWeekDates($year, $week)
{
    $from = date("Y-m-d", strtotime("{$year}-W{$week}-1")); //Returns the date of monday in week
    $to = date("Y-m-d", strtotime("{$year}-W{$week}-7"));   //Returns the date of sunday in week     
    return  $from ." - ". $to;        
    //return "Week {$week} in {$year} is from {$from} to {$to}.";
}
$year = 2016;   
$week = '34';
echo getWeekDates($year, $week);

演示


谢谢您的帮助,但请尝试传递这些变量:$year = 2017; $week = 1;。在这种情况下,您的解决方案将失败。 - kkochanski
@kkochanski:如果你用单引号传递数据,它会正常工作:https://eval.in/664319 - Dave

1

试试这个,希望能有所帮助..,你也可以进行优化。

$date = "34-08-2016";
list($week_no, $month, $year) = explode("-", $date);
$date_obj = new DateTime();
$date_obj->setISODate($year,$week_no);
$day = $date_obj->format('w');
$week_start = date('m-d-Y', strtotime('-'.$day.' days', strtotime($date_obj->format('Y-m-d'))));
$week_end = date('m-d-Y', strtotime('+'.(6-$day).' days', strtotime($date_obj->format('Y-m-d'))));

0

试试这个

<?php
$date = '38-10-2016';
$date = explode('-',$date);

echo date("Y-m-d", strtotime( "$date[2]W$date[0]".'monday this week' ) ), "\n";   

echo date("Y-m-d", strtotime( "$date[2]W$date[0]".'sunday this week' ) ), "\n";

这将收集您提供的日期的周数,并查找该周的星期一和星期日。


0
你可以试试这个。
function date_of_week($date)
{
    echo date("d-m-Y",$date)."\n";

    $day_of_week = date('N', $date); # 0->sunday, 1-> monday etc...
    echo "\tday of week:$day_of_week\n";
    #I assume you begin the week on monday.
    $start_week_date = $date - ($day_of_week-1)*3600*24;
    $end_week_date = $start_week_date + 6*3600*24;

    return date('d-m-Y', $start_week_date)." - ".date('d-m-Y', $end_week_date);

}


for($i=16;$i<24;$i++)
{
    echo date_of_week(mktime(0,0,0,10,$i,2016))."\n\n";
}

请输出最后一行 $end_week_date,我得到的结果是 06-10-2018 - 12-10-2018 - Blinkydamo
与@Blinkydamo相同 - kkochanski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接