我试图根据用户选择设置发布日期,并在循环中给它间隔。但是用间隔替换后,年份变为当前年份。
下面是我的代码示例:
$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);