php - 在替换日期后年份更改为当前年份

时间:2014-03-14 16:32:31

标签: php date

我正在尝试根据用户选择设置发布日期,并在循环中给出间隔。但在用间隔代替之后,年份变为当年。

以下是我的代码示例:

$datestart = "2012-03-06";
$datenow = date("$datestart H:i:s", current_time( 'timestamp' ));

$newpostdate1 = $datenow + strtotime("0 years 0 months 1 days 0 hours 0 minutes 0 seconds");
$newpostdate = date("Y-m-d H:i:s", $newpostdate1);

echo $datenow . "   " . $newpostdate;

$datenow2012-03-06 16:19:33返回当前日期加上1天,即$newpostdate时,将返回2014-03-15 17:02:23

为什么$newpostdate返回当前日期加上下一天而不是2012-04-06 16:19:33

2 个答案:

答案 0 :(得分:3)

..因为你所做的事并没有做你认为的事情。

首先,将$datenow设置为字符串(不是日期对象),值为" 2012-03-06" +当前时间(假设current_time返回的内容)。

然后您使用值strtotime调用"1 days"(嗯,您的字符串包含许多其他零值字段,但它们不会更改结果),这会返回当前值时间+ 24小时数(自1970年以来的秒数)。

然后,您将该值与+一起添加到上面的字符串中。这会导致字符串被解释为数字,因此它将变为2012(并忽略字符串的其余部分)。因此,结果是一个时间戳,表示当前时间+一天+ 2,012秒 - 或者代码运行后的一天,33分钟和32秒。然后将其格式化为字符串。

您可以使用John Conde的解决方案来获得更有意义的结果。 (我认为你真正的问题是不同的,否则为什么不首先将字符串设置为' 2012-03-07'首先?)

答案 1 :(得分:2)

date()的第一个参数是您希望将时间戳作为第二个参数显示为的格式。所以基本上你错误地使用了date()

认为这就是你要找的东西:

$date = new DateTime($datestart);
$date->modify('+1 day');
echo $date->format(Y-m-d H:i:s);