我的总部设在澳大利亚,而new Date()
则告诉我目前在澳大利亚的日期和时间
Fri Aug 26 2016 09:16:16 GMT+1000 (AUS Eastern Standard Time)
,如果我写new Date().toJSON()
我得到2016-08-25T23:20:08.242Z
,
我如何获得与yyyy-mm-ddThh:mn:ss
相同的格式,但保留当地的日期和时间,即它应该是26而不是25日。
修改:当我使用new Date(2016, 11, x)
以编程方式var x = 31
编写时,使用toJSON()
我无法保证因为时区而看到显示2016-12-31
,所以我想知道是否有不同的javascript函数会给我预期的结果。
答案 0 :(得分:1)
我会使用moment.js。
var date = moment("Fri Aug 26 2016 09:16:16 GMT+1000");
console.log(moment(date).format('YYYY-MM-DD T hh:mm:ss'));
答案 1 :(得分:0)
toJSON()
以ISO 8601格式返回时间戳。字符串末尾的Z
表示使用了UTC。 ECMAScript中的日期对象是内部UTC。 Date.prototype.toJSON的规范说它使用Date.prototype.toISOString,它声明"时区总是UTC"。
答案 2 :(得分:0)
日期没错,是UTC。没有时区信息,yyyy-mm-ddThh:mn:ss
没有意义,除非你明确地想要假设它在AEST时区。
如果您要将日期作为字符串传输回某种类似Date
的某种类型的对象(例如,您的网络服务器),那么您无需做任何事情。 2016-08-25T23:20:08.242Z
无论你用什么来解析它,都明确指出了同一个时间点。
如果您正在尝试格式化日期对象并将其显示在某处,则可以提取Date
对象的不同部分并构建所需的表示形式:
function format_date(d) {
var pretty_date = [d.getFullYear(), d.getMonth() + 1, d.getDate()].join('-');
var pretty_time = [d.getHours(), d.getMinutes(), d.getSeconds()].join(':');
return pretty_date + 'T' + pretty_time;
}
正如其他答案所指出的那样,如果您计划更多地使用日期,请考虑使用更容易的库。 JavaScript没有非常丰富的API,因此您必须编写更多代码。