6

问题

我正在使用下面的代码来获取下周的日期和第二周的日期。它适用于前几条记录,但后来它开始给出 year 1970

如果开始日期是2013 年 1 月 12 日,它会向我显示coorect结果是:

下周:19/01/2013

第二周:26/01/2013

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

下周:08/01/1970

第二周:1970 年 1 月 15 日

请指导我哪里可能出错?

代码

    //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;
4

3 回答 3

5

您使用的日期格式错误。检查strtotime文档中的注释:

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

进一步检查文档:

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

于 2013-05-28T13:48:11.000 回答
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

于 2013-05-28T13:48:54.370 回答
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);
于 2016-12-13T08:31:22.883 回答