【问题标题】:How do I convert date of format like /Date(1490914800000+0100)/ to mysql datetime format in php?如何在 php 中将 /Date(1490914800000+0100)/ 等格式的日期转换为 mysql 日期时间格式?
【发布时间】:2017-01-26 04:08:18
【问题描述】:

我试图通过提取数字部分然后使用日期函数对其进行解析来解决它。但它显示了一些我认为不正确的旧日期。

$datef = "1490914800000+0100";
$adada = date('Y-m-d H:i:s', $datef);
// Gives date 1987-10-13 18:31:28 which is an old date. Please suggest.

【问题讨论】:

  • 其实1987-10-13 18:31:28可以被MySQL处理。您打算如何将这些数据导入 MySQL?
  • @TimBiegeleisen,我的问题与未插入数据库的日期 1987-10-13 18:31:28 无关。这个日期是通过 API 来的,它是优惠券或交易的到期日。日期不能这么老。要么它的格式与我所做的不同,要么我还没有做过……如果您对 /Date(...)/ 有所了解,请关注。
  • 您使用的 API 不正确。请参阅here 了解正确的方法。此外,您将处理时区转换。

标签: php mysql datetime


【解决方案1】:

this SO question 很好地介绍了一种方法,即使用DateTime() 函数将自纪元以来的时间(以秒为单位)转换为日期,然后使用format() 显示此日期。但是您的数据有两个警告。首先,您似乎自纪元以来有毫秒,需要将其转换为秒。其次,您还有一个时区转换,以小时为单位,标记到末尾。我将您的 $datef 字符串分成两部分,纪元和时区,然后得出自纪元以来的秒数。

list($epoch, $timezone) = explode('+', $datef);

$epoch = ($epoch / 1000) + (substr($timezone, 0, 2)*60*60) +
         (substr($timezone, 2, 2)*60);
$dt = new DateTime("@$epoch");
echo $dt->format('Y-m-d H:i:s');

输出:

2017-03-31 00:00:00

演示在这里:

PHP Sandbox

【讨论】:

  • $timezone / 100
  • 印度以外的很多人实际上timeanddate.com/time/time-zones-interesting.html
  • 非常感谢蒂姆先生。但正如我也阅读了您建议的链接一样。解决方案类似于 $datef = "1490914800000+0100"; echo date("Y-m-d H:i:s", substr($datef, 0, 10)); 给出的结果略有不同。这是什么?
  • @Indication 是您没有考虑时区。
  • 我现在明白了这一切。感谢您抽出宝贵的时间来回答这个问题。
【解决方案2】:

时间似乎以毫秒为单位。 您可以将时区偏移添加到秒。 1 小时 = 3600 秒。

$milliSeconds = intval("1490914800000");
$seconds = $milliSeconds/1000;
$date = date("Y-m-d H:i:s", $seconds);

【讨论】:

    猜你喜欢
    • 2014-02-25
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 2011-03-05
    • 2011-10-11
    • 1970-01-01
    • 2015-04-21
    • 2011-08-13
    相关资源
    最近更新 更多