我怎样才能获得下周的日期?

时间:2013-05-28 13:38:17

标签: php

问题

我使用以下代码来获取下周的日期和第二周的日期。它适用于前几个记录,但后来开始给予年份 1970

如果开始日期为 12/01/2013 ,则会显示我的结果:

下周: 2013年1月19日

第二周: 26/01/2013

但是在日期为 16/05/2013 的另一条记录中,它会显示以下内容

下周: 08/01/1970

第二周: 15/01/1970

请指导我可能出错的地方?

代码

    //Date of when game started
    $starts_on = '12/01/2013';    

    //Next week's date from start date
    $next_week = strtotime(date("d/m/Y", strtotime($starts_on)) . "+1 week");
    $next_week = date('d/m/Y', $next_week);

    //Second week's date from start date
    $second_week = strtotime(date("d/m/Y", strtotime($starts_on)) . "+2 week");
    $second_week = date('d/m/Y', $second_week);

    echo $starts_on.", ".$next_week.", ".$second_week;

3 个答案:

答案 0 :(得分:5)

您使用的是错误的格式日期。检查strtotime documentation

中的注释
  

通过查看各个组件之间的分隔符来消除m / d / y或d-m-y格式的日期:如果分隔符是斜杠(/),则假设为美国m / d / y;而如果分隔符是破折号( - )或点(。),则假定为欧洲d-m-y格式。

进一步检查文档:

  

不建议使用此函数进行数学运算。最好在PHP 5.3及更高版本中使用DateTime::add()DateTime::sub(),或在PHP 5.2中使用DateTime::modify()

答案 1 :(得分:4)

我建议你使用DateTime对象,最好是操作日期(使用DateInterval对象添加和减去另一个日期很容易)

<?php
  $date = new DateTime("2013-01-12");
  //add one week to date
  echo $date->add(new DateInterval('P1W'))->format('Y-m-d');
  //add one week to date
  echo $date->add(new DateInterval('P1W'))->format('Y-m-d');
?>

结果:

2013-01-19
2013-01-26

参考文献:

http://php.net/manual/es/class.datetime.php

http://php.net/manual/es/class.dateinterval.php

答案 2 :(得分:0)

请尝试此

$dt = new DateTime();
// create DateTime object with current time
$dt->setISODate($dt->format('o'), $dt->format('W')+1);
// set object to Monday on next week
$periods = new DatePeriod($dt, new DateInterval('P1D'), 6);
// get all 1day periods from Monday to +6 days

$days = iterator_to_array($periods);
// convert DatePeriod object to array
echo "<pre>"; 
print_r($days);