我有一个由用户创建的日期对象,时区由浏览器填写,如下所示:
var date = new Date(2011, 05, 07, 04, 0, 0);
> Tue Jun 07 2011 04:00:00 GMT+1000 (E. Australia Standard Time)
但是,当我对其进行字符串化时,时区再见了
JSON.stringify(date);
> "2011-06-06T18:00:00.000Z"
在保留浏览器时区的同时获得 ISO8601 字符串的最佳方法是使用 moment.js 和使用 moment.format()
,但是如果我通过使用的东西序列化整个命令当然那将不起作用 JSON.stringify
内部(在这种情况下,AngularJS)
var command = { time: date, contents: 'foo' };
$http.post('/Notes/Add', command);
为了完整起见,我的域 确实 需要本地时间和偏移量。
原文由 XwipeoutX 发布,翻译遵循 CC BY-SA 4.0 许可协议
假设您有某种包含
Date
的对象:您可以覆盖
Date
原型的toJSON
函数。在这里,我使用 moment.js 从日期创建一个moment
对象,然后使用不带参数的 moment 的format
函数,它发出包含偏移量的 ISO8601 扩展格式。现在,当您序列化该对象时,它将使用您要求的日期格式:
当然,这会影响 所有
Date
对象。如果只想更改特定日期对象的行为,则可以仅覆盖该特定对象的toJSON
函数,如下所示: