php - 如何在 PHP 中正确添加日期和时间(字符串)?
问题描述
在 PHP 中添加日期和时间字符串的“最干净”的方法是什么?
尽管已经阅读了DateTime::add
期望 a DateInterval
,但我尝试了
$date = new \DateTime('17.03.2016');
$time = new \DateTime('20:20');
$result = $date->add($time);
这不好,没有回报$result
。
为了制作DateInterval
from '20:20'
,我只找到了非常复杂的解决方案......
也许我应该使用时间戳?
$date = strtotime($datestring);
$timeObj = new \DateTime($timestring);
// quirk to only get time in seconds from string date
$time = $timeObj->format('H') * 3600 + $timeObj->format('i') * 60 + $timeObj->format('s');
$datetime = $date+$time;
$result = new \DateTime;
$result->setTimestamp($datetime);
就我而言,这将返回所需的结果,并带有正确的时区偏移量。但是你怎么看,这是健壮的吗?有没有更好的办法?
解决方案
如果您想将 20 小时 20 分钟添加到 a DateTime
:
$date = new \DateTime('17.03.2016');
$date->add($new \DateInterval('PT20H20M'));
你不需要得到 的结果add()
,调用add()
一个DateTime
对象会改变它。的返回值add()
是DateTime
对象本身,因此您可以链接方法。
请参阅DateInterval::__construct以了解如何设置间隔。
推荐阅读
- tomcat - 使用自定义上下文时tomcat不解包战争
- r - rbinding data.table 列表的列表
- javascript - 为什么 navigator.share() 不能在 fetch API 中工作?
- go - 如何检测 ptrace 是否已经在 golang linux 中调用
- python - 如何使用 VoIP 进行呼叫并使用 Python 播放音频文件?
- python - 如何在 for 循环中添加 readline 的输出
- php - ReCAPTCHA v3 分数问题
- command-line - 如何划分命令行参数?
- c - 在 C 中实现快速排序的分段错误
- reactjs - 为什么 React Component 渲染两次