【问题标题】:cant extract date '/Date(1617667200000+0000)/'无法提取日期'/日期(1617667200000+0000)/'
【发布时间】:2021-07-11 00:34:59
【问题描述】:

我正在使用 cakephp4 和 Xero API。我找不到代码来转换从 Xero API 返回为 '/Date(1617667200000+0000)/' 的日期。它是一个带有前 10 位数字的时间戳,例如 $rr=gmdate("Y-m-d", 1617667200); 可以工作,但我无法对这样的字符串进行硬编码或仅找到前 10 位数字。我相信这是一个 StringUtil 。我也尝试使用 JSON 日期示例,但没有得到任何地方,包括 Xero 文档。

 $rr=StringUtil::convertStringToDate($date);//no
 $rr=gmdate("Y-m-d", $date);  //no

Converting json results to a date

【问题讨论】:

  • 在我看来它是以毫秒为单位生成的,因此时间戳1617667200000 应除以 1000 或仅删除最后 3 个零以在几秒内得到它(在 PHP 中使用)。检查 Xero API 的文档以了解它们使用的格式。
  • 不,我试过这个,因为它不是时间戳,因为数字太多

标签: php xero


【解决方案1】:

正则表达式可以轻松提取:

$text = '/Date(1617667200000+0000)/';
preg_match('#^/Date\((\d{10})#', $text, $matches);  // Use # as delimiter.
                                                    // From start match /Date(
                                                    // match and capture next 10 digits

$dt = new DateTime('@'.$matches[1]);                // Create PHP DateTime object from unix timestamp

echo $dt->format('Y-m-d H:i:s');    // 2021-04-06 00:00:00

https://3v4l.org/5jT5B

编辑 - 更简单的版本,如果数据格式一致则不需要正则表达式

$text = '/Date(1617667200000+0000)/';
$timeStamp = substr($text, 6,10);
$dt = new DateTime('@'.$timeStamp);                // Create PHP DateTime object from unix timestamp

echo $dt->format('Y-m-d H:i:s');    // 2021-04-06 00:00:00

【讨论】:

  • 很好的解决方案!但是在 cakephp 中,此代码不起作用,因为 datetime 对象不存在,必须有解决方法book.cakephp.org/3/en/core-libraries/time.html
  • 这行得通,所以没什么大不了的,debug(date('Y-m-d',$matches[1]));很好的解决方案
  • DateTime 存在于 PHP 5.2 以后的每个版本中。请参阅php.net/manual/en/class.datetime.php 如果您使用的版本没有它,您应该紧急升级。
猜你喜欢
  • 1970-01-01
  • 2020-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-27
  • 2016-02-03
  • 1970-01-01
  • 2023-03-24
相关资源
最近更新 更多