我有一个以MS格式收到JSON日期的日期。它看起来像这样:
/Date(1365004652303)/
我可以通过这样做将它转换为PHP DateTime对象:
$timestamp = round(((int) $originalMSdate) / 1000);
$convertedDate = new DateTime();
$convertedDate->setTimestamp($timestamp);
但最终,我需要它是ISO 8601格式的字符串。我尝试将其转换为ISO日期对象&然后将其转换为带有strval()的字符串,但strval()不会对日期对象起作用。
我也试过
$dateString = date_format($convertedDate, 'YY-MM-DD H:i:s');
但我需要它还包括时区信息,如:2015-10-01T21:22:57.057Z 我在date_format中看不到字符。
我怎样才能做到这一点?
编辑:我应该澄清我没有打印结果字符串。我需要将它传递给接受字符串数据类型的数据库中的字段。答案 0 :(得分:1)
请尝试以下代码
<?php
// input
$time = microtime(true);
// Determining the microsecond fraction
$microSeconds = sprintf("%06d", ($time - floor($time)) * 1000000);
// Creating DT object
$tz = new DateTimeZone("Etc/UTC");
$dt = new DateTime(date('Y-m-d H:i:s.'. $microSeconds, $time), $tz);
$iso8601Date = sprintf(
"%s%03d%s",
$dt->format("Y-m-d\TH:i:s."),
floor($dt->format("u")/1000),
$dt->format("O")
);
// Formatting according to ISO 8601-extended
var_dump(
$iso8601Date
);
答案 1 :(得分:0)
这有效:
$timestamp = round(((int) $originalMSdate) / 1000);
$dateString = date('c', $timestamp);
格式并非完全相同。它采用以下格式:
2016-04-25T14:27:00-05:00而不是 2016-04-25T14:27:00.057Z
但它足够接近我可以做一些操作来获得我需要的东西。
答案 2 :(得分:0)
这个对我有用。有关更多信息,请refer本文。
$date = date('Y-m-d H:m:s');
echo date('c', strtotime($date)); // 2020-04-08T16:04:56+05:30
echo date(DateTime::ISO8601, strtotime($date)); // 2020-04-08T16:04:56+0530
echo date(DateTime::ATOM, strtotime($date)); // 2020-04-08T16:04:56+05:30