PHP strtotime 总是返回午夜时间

12

我遇到了一个奇怪的问题。当我使用strtotime函数时,它没有考虑原始日期的小时部分,总是返回午夜。我尝试过研究,但没有找到具体的解决方法。

我是否漏掉了什么重要的东西?

$original_date = "2015-08-07 02:00:00";
$next_date = date('Y-m-d H:i:s', strtotime("monday this Week +1 week", strtotime($original_date)));

它将$next_date返回为2015-08-14 00:00:00


1
我不确定如何进行更正,但是如果给strtotime一个特定的日期,比如星期一,它会将其设置为星期一的00:00:00,然后其他计算都会使用这个时间。 - AbraCadaver
4个回答

5
尝试这样做,将您想要检索的时间添加到下一个日期中。
$original_date = "2015-08-07 02:00:00";
echo $next_date = date('Y-m-d H:i:s', strtotime("monday this Week 02:00:00 +1 week", strtotime($original_date)));

实际上,当说这个星期一时,它只会采用日期并在内部添加00:00:00午夜,因此我们只是在strtotime中添加了时间。 - Amit Shah
这个可行!您建议始终添加小时作为安全保障吗? - Kitara
@Kitara 是的,当你想保留小时、分钟和秒时,你应该总是添加它。 - Amit Shah

3

本周一 +1 周 表示您正在寻找传入时间所在周的周一午夜。如果您想保留时间的小时部分,则可以将其附加到您的 date 格式中,因为它应该始终与 $original_date 中的相同。

date('Y-m-d ' . date('H:i:s', strtotime($original_date)), strtotime("monday this Week +1 week", strtotime($original_date)));

嗨,对我来说它没起作用,输出是2015年8月10日19:33:35。我修改为date('Y-m-d',strtotime("monday this Week +1 week",strtotime($original_date)))。' '.date('H:i:s',strtotime($original_date)),然后它就起作用了。 - Kitara
@Kitara,这也可以,我漏掉了strtotime调用。 - FuzzyTree

3

当你在strtotime中使用monday时,会将时间重置为00:00:00。如果想要得到预期的结果,你需要在date或者strtotime中显式地传递时间。请参考这个相同的问题获取类似的解决方法。

$next_date = date('Y-m-d H:i:s', strtotime("monday this Week +1 week " . date('H:i:s', strtotime($original_date)), strtotime($original_date)))

3
$date = strtotime('2018-08-14 02:00:00');
$next_date = date('Y-m-d H:i:s', strtotime("monday this Week 02:00:00 +1 week", $date)); // 2018-08-20 02:00:00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接