将DateTime转换为Unix并返回

时间:2016-02-04 10:39:59

标签: php datetime

我正在开发一个项目,用户可以输入日期和时间,我从中计算一些东西,我想将它存储到数据库中。

由于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工作:

  • Windows 10 Enterprise N 64bit
  • Apache 2.4.4 64bit
  • PHP 5.6.5 64位

当我将它上传到我们的linux盒子时,我已经获得了正确的日期时间。

1 个答案:

答案 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