我正在尝试根据用户选择设置发布日期,并在循环中给出间隔。但在用间隔代替之后,年份变为当年。
以下是我的代码示例:
$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
返回当前日期加上1天,即$newpostdate
时,将返回2014-03-15 17:02:23
。
为什么$newpostdate
返回当前日期加上下一天而不是2012-04-06 16:19:33
?
答案 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);