当前位置: 首页 > 面试题库 >

如何使用JSON对JavaScript日期进行字符串化并保留时区

应和悦
2023-03-14
问题内容

我有一个由用户创建的日期对象,时区由浏览器填充,如下所示:

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);

为了完整起见,我的域 确实 需要本地时间和偏移量。


问题答案:

假设您有某种包含的对象Date

var o = { d : new Date() };

您可以覆盖原型的toJSON功能Date。在这里,我使用moment.js
moment从日期创建一个对象,然后使用format不带参数的moment的函数,该函数发出包含偏移量的ISO8601扩展格式。

Date.prototype.toJSON = function(){ return moment(this).format(); }

现在,当您序列化对象时,它将使用您要求的日期格式:

var json = JSON.stringify(o);  //  '{"d":"2015-06-28T13:51:13-07:00"}'

当然,这将影响 所有 Date对象。如果只想更改特定日期对象的行为,则可以覆盖该特定对象的toJSON功能,如下所示:

o.d.toJSON = function(){ return moment(this).format(); }


 类似资料:
  • 我有一个由用户创建的日期对象,其中时区由浏览器填充,如下所示: 不过,当我把它串起来时,时区就消失了 在保留浏览器时区的同时获取ISO8601字符串的最佳方法是使用矩。js和使用<代码>矩。format()。内部字符串化(在本例中为AngularJS) 为了完整性,我的域确实需要本地时间和偏移量。

  • 问题内容: 我必须形成一个JSON字符串,其中一个值具有换行符。必须对此进行转义,然后使用AJAX调用发布。任何人都可以提出一种使用JavaScript对字符串进行转义的方法。我没有使用jQuery。 问题答案: 使用您的JSON及其它。然后使用方法和替换所有出现的用。 编辑: 据我所知,还没有知名的JS库可用于转义字符串中的所有特殊字符。但是,您可以链接方法并替换所有特殊字符,如下所示: 但这很

  • 问题内容: 有这个字符串。我想将其转换为日期对象。 我需要使用: 要么 ? 问题答案: var d = new Date(2011,10,30); 由于月份从js中的0开始索引。

  • 因此,我正在研究如何用javascript中的字符串进行日期比较,我发现大量堆栈溢出的帖子说你不能这样做。 参考: 如何在JavaScript中比较两个字符串日期? 用JavaScript比较两个日期 然而,下面的代码本与您所期望的完全一样,只使用字符串,当其中一个是YYYY-MM-DD而另一个是yyyy/mm/dd时,它甚至可以工作。有谁能解释一下为什么这样做,为什么stack overflow