json对象包含php DateTime,如何转换为漂亮的日期字符串

时间:2016-01-30 12:33:22

标签: javascript json datetime

所以我有一个json对象,它基本上返回了一个datetime对象,现在问题是,在用户(客户端)本地时区中将这种格式化为单个字符串人类可读格式的最有效方法是什么... 在javascript中

let el = document.querySelector("body")
el.style.color = "#fff"
el.getAttribute("style")
el.removeAttribute("style")

2 个答案:

答案 0 :(得分:2)

如果时间戳是ECMAScript时间值(即自1970-01-01T00:00:00Z以来的毫秒数),那么您可以将该值直接赋予Date对象:

var d = new Date(1454125056); // 1970-01-17T19:55:25.056Z

然而它更可能是秒,所以乘以1,000:

new Date(1454125056*1000).toISOString(); // 2016-01-30T03:37:36.000Z

将为该时刻创建日期。除非在创建时间值时使用偏移量,否则应该忽略偏移量,在这种情况下,如果它遵循西方的负面和东面的正面的ISO惯例,则应该添加偏移量。如果它遵循ECMAScript约定,则相反。

我会假设ISO,因为它似乎是秒,你可以将它应用到UTC秒:

var offset = -18000;
d.setUTCSeconds(d.getUTCSeconds() + offset);
console.log(d.toISOString()); // 2016-01-29T22:37:36.000Z

此后使用普通日期方法将根据主机系统的时区设置返回值。

var timeValue = 1454125056;
var offset = -18000;
var d = new Date(timeValue*1000);

document.write(d.toISOString() + '<br>' + d);

d.setUTCSeconds(d.getUTCSeconds() + offset);
document.write('<br>' + d.toISOString() + '<br>' + d);

这里有很多关于如何从Date对象格式化日期字符串的问题。

请注意,javascript只需要考虑当前有效的夏令时规则,就像它们一直存在一样,所以请注意历史日期。

答案 1 :(得分:1)

假设这个json对象加载在$ created变量中。我认为你的意思是php。

PHP中的

$obj  = json_decode($created, true);
$timezone_name = $obj['timezone']['name'];
$timezone_location_country_code = $obj['timezone']['location']['country_code'];
$timezone_location_latitude = $obj['timezone']['location']['latitude'];
$timezone_location_longitude = $obj['timezone']['location']['longitude'];
$timezone_location_comments = $obj['timezone']['location']['comments'];
$offset = $obj['offset'];
$timestamp = date('m/d/Y', abs($obj['timestamp']));

在Javascript中:

getDate: function(timestamp){
// Multiply by 1000 because JS works in milliseconds instead of the UNIX seconds
var date = new Date(timestamp * 1000);

var year = date.getUTCFullYear();
var month = date.getUTCMonth() + 1; // getMonth() is zero-indexed, so we’ll increment to get the correct month number
var day = date.getUTCDate();
var hours = date.getUTCHours();
var minutes = date.getUTCMinutes();
var seconds = date.getUTCSeconds();

month = (month < 10) ? ‘0’ + month : month;
day = (day < 10) ? ‘0’ + day : day;
hours = (hours < 10) ? ‘0’ + hours : hours;
minutes = (minutes < 10) ? ‘0’ + minutes : minutes;
seconds = (seconds < 10) ? ‘0’ + seconds: seconds;

return year + ‘-‘ + month + ‘-‘ + day + ‘ ‘ + hours + ‘:’ + minutes;
}