只是date时间
$beginOfDay = DateTime::createFromFormat('Ymd H:i:s', (new DateTime())->setTimestamp($timestamp)->format('Ymd 00:00:00'))->getTimestamp(); $endOfDay = DateTime::createFromFormat('Ymd H:i:s', (new DateTime())->setTimestamp($timestamp)->format('Ymd 23:59:59'))->getTimestamp();
首先创build一个DateTime对象,并将时间戳设置为所需的时间戳。 然后,对象被格式化为一个string,将小时/分钟/秒设置为一天的开始或结束。 最后,从这个string创build一个新的DateTime对象,并检索时间戳。
可读
$dateTimeObject = new DateTime(); $dateTimeObject->setTimestamp($timestamp); $beginOfDayString = $dateTimeObject->format('Ymd 00:00:00'); $beginOfDayObject = DateTime::createFromFormat('Ymd H:i:s', $beginOfDayString); $beginOfDay = $beginOfDayObject->getTimestamp();
我们可以使用这个更长的版本以另一种方式得到一天结束:
$endOfDayObject = clone $beginOfDayOject(); // Cloning because add() and sub() modify the object $endOfDayObject->add(new DateInterval('P1D'))->sub(new DateInterval('PT1S')); $endOfDay = $endOfDayOject->getTimestamp();
时区
时区也可以通过将时间戳指示符添加到O等格式并在创buildDateTime对象后指定时间戳来设置:
$beginOfDay = DateTime::createFromFormat('Ymd H:i:s O', (new DateTime())->setTimezone(new DateTimeZone('America/Los_Angeles'))->setTimestamp($timestamp)->format('Ymd 00:00:00 O'))->getTimestamp();
DateTime的灵活性
我们还可以通过更改指定的第二个格式来获取其他信息,例如月份的开始/结束或者小时的开始/结束。 月份: 'Ym-01 00:00:00'和'Ymt 23:59:59' 。 对于小时: 'Ymd H:00:00'和'Ymd H:59:59'
使用不同的格式与add()/ sub()和DateInterval对象结合,我们可以得到任何时期的开始或结束,虽然需要谨慎处理正确的闰年。
相关链接
从PHP文档:
约会时间
date与格式的信息
DateTimeZone
DateInterval