只是日期时间
$beginOfDay = DateTime::createFromFormat('Y-m-d H:i:s', (new DateTime())->setTimestamp($timestamp)->format('Y-m-d 00:00:00'))->getTimestamp();
$endOfDay = DateTime::createFromFormat('Y-m-d H:i:s', (new DateTime())->setTimestamp($timestamp)->format('Y-m-d 23:59:59'))->getTimestamp();
首先创建一个 DateTime 对象,并将时间戳设置为所需的时间戳。然后将对象格式化为字符串,将小时/分钟/秒设置为一天的开始或结束。最后,从此字符串创建一个新的 DateTime 对象,并检索时间戳。
读
$dateTimeObject = new DateTime();
$dateTimeObject->setTimestamp($timestamp);
$beginOfDayString = $dateTimeObject->format('Y-m-d 00:00:00');
$beginOfDayObject = DateTime::createFromFormat('Y-m-d 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();
时区
也可以通过在创建 DateTime 对象后将时间戳指示器添加到格式中并指定时间戳来设置时区:O
$beginOfDay = DateTime::createFromFormat('Y-m-d H:i:s O', (new DateTime())->setTimezone(new DateTimeZone('America/Los_Angeles'))->setTimestamp($timestamp)->format('Y-m-d 00:00:00 O'))->getTimestamp();
日期时间的灵活性
我们还可以通过更改指定的第二种格式来获取其他信息,例如月份的开始/结束或小时的开始/结束。对于月份:和 .对于小时:和'Y-m-01 00:00:00'
'Y-m-t 23:59:59'
'Y-m-d H:00:00'
'Y-m-d H:59:59'
将各种格式与 add()/sub() 和 DateInterval 对象结合使用,我们可以获得任何周期的开始或结束,尽管需要注意正确处理闰年。
相关链接
来自 PHP 文档: