在PHP和MongoDB中将时间戳转换为日期

8

我花了3天时间尝试解决这个问题,但没有成功。我正在使用MongoDB PHP库,并且尝试使用PHP文档中的示例将时间戳转换为有效日期,但始终返回1970-01-17。

代码如下:

  $utcdatetime = new MongoDB\BSON\UTCDateTime(1453939200);

  $datetime = $utcdatetime->toDateTime();

  var_dump($datetime);
2个回答

14

文档中指出,构造函数需要传入一个表示以毫秒为单位的时间戳的整数参数,而您提供的是以秒为单位的时间戳,因此导致了无效的日期结果。

将值乘以1000以获取以毫秒为单位的时间戳,然后返回转换后的有效日期时间对象:

$timestamp = 1453939200 * 1000;
$utcdatetime = new MongoDB\BSON\UTCDateTime($timestamp);

$datetime = $utcdatetime->toDateTime();

var_dump($datetime);

嗨chridam,谢谢你的回答,但现在我得到的日期是1969年12月8日05:14:47。有什么想法吗? - Keven Chantre
2
听起来你正在运行一个32位版本的PHP,它无法处理像毫秒级时间戳那样大的数字。除了运行64位PHP或根本不使用这个Mongo对象之外,没有其他解决方法,因为显然你想要一个DateTime。$ foo = new DateTime(); $ foo-> setTimestamp(1453939200); var_dump($ foo); - Sammitch
我同意@Sammitch在这个问题上的看法。 - chridam
再次感谢大家。@Sammitch,phpinfo告诉我我正在使用64位版本的PHP。我可以将1453939200 * 1000的结果显示为浮点数。 我想使用mongo对象,因为我将把这些数据插入数据库中。使用DateTime,日期保存为日期数组,时区类型和时区,而不仅仅是mongo中的日期对象。问题可能在php-mongo的驱动程序和/或库中。 - Keven Chantre

0
对于任何寻找此内容的人: 您首先需要将值转换为时间戳,然后才能将其转换为有效的ISO日期。 例如:
  $utcdatetime = new MongoDB\BSON\UTCDateTime(strtotime($date));
  $date2 = new MongoDB\BSON\Timestamp(1, date($utcdatetime));

1
UTCDateTime以毫秒为基础的时间戳作为参数,strtotime返回以秒为基础的时间戳。http://php.net/manual/en/class.mongodb-bson-utcdatetime.php - Weboide

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接