我怎样才能让 strtotime 到一天的开始

How can i make strtotime go to the beginning of a day

我的代码中有一个问题,有时我需要在当前日期上加上 1 天、2 天甚至 3 天。

我正在使用

$today = strtotime('today');

然后根据假期、周末和其他参数,我可能需要像这样添加天数/工作日

$date = strtotime('+2 weekdays', $today);

$date = strtotime('+2 days', $today);

但是,这似乎在当前时间上增加了 24 小时,而我理想情况下需要的是一天的第一秒。不幸的是,我无法更改今天的时间戳,因为如果它是当天那么它的时间很关键,但是在添加天数时它需要是新一天的第一秒。

我个人对此问题的任何帮助或理解都将不胜感激。

您可以从结果时间戳值中减去$timestamp % (24*3600); 示例:

$timestamp = mt_rand(1500000000, 1600000000); 
$timestamp -= $timestamp % (24*3600);
echo date('Y-m-d H:i:s', $timestamp);

P.S。但最好使用 DateTime class。有方法 setTime():

$datetime = new DateTime();
$datetime->modify('+2 day');
$datetime->setTime(0, 0, 0, 0);
$timestamp = $datetime->getTimestamp();
echo date('Y-m-d H:i:s', $timestamp);
$date = new DateTime();
$date->add(new DateInterval('P"your needed days"D'));
echo $date->format('Y-m-d');
eg:'P2D'
OUTPUT:::2019-01-27

在这个'P'中指定日期中的时间段然后可以加上年(Y),月(M)和日(D)然后对于时间,需要指定时间(T)然后小时 (H)、分钟 (i 或 M) 和秒 (S)。 参考下面http://php.net/manual/en/dateinterval.format.php

您可以使用 date/time 格式的字符串作为 strtotime 的输入来指定您想要的时间。如果您将其作为第二个参数添加到 strtotime 中,则可以获得您想要的时间。

$date = strtotime('+2 weekdays', strtotime(date('Y-m-d 00:00:00', $today));

不过还有更简单的选择。您也可以只问 strtotime 午夜。

$date = strtotime('midnight +2 weekdays');

或特定时间。

$date = strtotime('01:23 +2 weekdays');

https://strtotime.co.uk/ 是测试 strtotime

功能的有用站点