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


Year Changed To The Current Year After Date Being Substituted

我试图根据用户选择设置发布日期,并在循环中给它间隔。但是用间隔替换后,年份变为当前年份。

下面是我的代码示例:

$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;

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

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

…因为你所做的事情并不像你想象的那样。

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

然后用值"1 days"调用strtotime(好吧,你的字符串有一堆其他零值字段,但它们不改变结果),它返回当前时间+ 24小时作为一个数字(自1970年以来的秒数)。

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

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

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

认为这就是你要找的:

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