Php 将DateTime转换为Unix并返回

Php 将DateTime转换为Unix并返回,php,datetime,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);

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

因为
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'…
),但没有帮助。有人能告诉我,当我想将其转换回时,我错过了什么

更新

好的,现在我检查了另一个主题,并尝试了以下内容:

$dt = new \DateTime();
$dt->setTimestamp($UtcTime->format('U')); //<--- Pass a UNIX TimeStamp
var_dump($dt->format('Y-m-d H:i:s'));
$dt=new\DateTime();
$dt->setTimestamp($UtcTime->format('U');//format('Y-m-dh:i:s');
然后得到:
1905-06-06 19:35:44
什么不是
0000-01-01 00:00:00

更新2

我试着玩这个,我用更接近现在的日期来检查它

1782-01-01 00:00:00
变为
1918-02-08 07:28:16
带TS
-5932656000

所以我检查了手册:

在PHP5.1.0之前,并非所有平台都支持负时间戳,因此您的日期范围可能被限制为不早于Unix纪元。这意味着,例如1970年1月1日之前的日期将不适用于Windows、某些Linux发行版和一些其他操作系统

我正在使用以下内容处理localhost:

  • Windows 10企业版64位
  • Apache 2.4.4 64位
  • PHP 5.6.5 64位

当我把它上传到我们的linux机器上时,我就得到了正确的日期时间。

我相信这就是你想要的

$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

您想使用1000年之前的日期吗?你可能会发现对这一点的本地支持非常糟糕或不可靠,因为当时的日期还没有完全确定。秒甚至是秒。这是一个占星术项目,如果我想了解一些关于Homerus的信息,该怎么办?本机的strotime有什么问题?可能是PHP版本或配置的重复。它对我有用。