我正在开发一个项目,用户可以输入日期和时间,我从中计算一些东西,我想将它存储到数据库中。
由于MySql
只能从1000-01-01
存储日期时间,因此将其存储在时间戳中似乎是个好主意。
现在,我想检查一下,我可以创建一个DateTime
对象,获取时间戳,并尝试将其转换回日期。
$UtcTime = \DateTime::createFromFormat("Y-m-d H:i:s", '0-01-01 00:00:00', new \DateTimeZone('UTC'));
var_dump($UtcTime);
var_dump($UtcTime->format('U'));
var_dump(\DateTime::createFromFormat('U', $UtcTime->format('U'), new \DateTimeZone('UTC')));
输出是这样的:
object(DateTime)[8]
public 'date' => string '0000-01-01 00:00:00.000000' (length=26)
public 'timezone_type' => int 3
public 'timezone' => string 'UTC' (length=3)
string '-62167219200' (length=12)
boolean false
我尝试使用createFromFormat('-U'...
但没有帮助。 sombody可以告诉我,当我想把它转换回来时我会想念什么?
更新
好的,现在我已经检查了另一个主题,并尝试了这个:
$dt = new \DateTime();
$dt->setTimestamp($UtcTime->format('U')); //<--- Pass a UNIX TimeStamp
var_dump($dt->format('Y-m-d H:i:s'));
得到:1905-06-06 19:35:44
什么不是0000-01-01 00:00:00
UPDATE2
我试着玩这个,我现在检查它的日期更近。
1782-01-01 00:00:00
成为1918-02-08 07:28:16
,其中包含TS -5932656000
。
所以我查看了手册:
在PHP 5.1.0之前,并非所有平台都支持负时间戳,因此您的日期范围可能不会早于Unix时代。这意味着,例如1970年1月1日之前的日期不适用于Windows,某些Linux发行版和其他一些操作系统。
我正在使用localhost工作:
当我将它上传到我们的linux盒子时,我已经获得了正确的日期时间。
答案 0 :(得分:-1)
我相信这就是你所追求的目标。
$date1 = new DateTime();
$timestamp = $date1->getTimestamp();
sleep(2);
$date2 = new DateTime();
$date3 = new DateTime();
$date2->setTimestamp($timestamp);
var_dump($date1 == $date2); // true
var_dump($date1 == $date3); // false