我试图像这样发送api一个asp.net UTC时间戳:
d = new Date()
test = moment(d).utc().valueOf()
test2 = moment(d).utc().format("ZZ")
utc_asp = "/Date("+test+test2+")/"
console.log utc_asp
>> /Date(1372670700799+0000)/
但服务器获取的时间与本地时间相同?
或者这个:
console.log moment(d)
console.log moment(d).utc()
D {_i: Mon Jul 01 2013 11:26:10 GMT+0200 (SAST), _f: undefined, _l: undefined, _isUTC: false, _d: Mon Jul 01 2013 11:26:10 GMT+0200 (SAST)…}
index.js:39
D {_i: Mon Jul 01 2013 11:26:10 GMT+0200 (SAST), _f: undefined, _l: undefined, _isUTC: true, _d: Mon Jul 01 2013 11:26:10 GMT+0200 (SAST)…}
这样做:
console.log moment(now).utc().hour()
>> 9 - This is correct! Its 11 - 2, but how come the above
我做错了吗?
答案 0 :(得分:2)
要创建当前日期的时刻,只需使用moment()
,不带任何参数。
var m = moment(); // returns a moment representing "now"
如果您希望使用MS专有/Date()/
格式对其进行格式化,则可以使用:
m.format("/[Date](XSSS)/")
这将为您提供适合传递给.Net的/Date(1372728650261)/
等值,并最终为您提供DateTime
.Kind
Utc
为m.format("/[Date](XSSSZZ)/")
的对象。< / p>
如果您想要带偏移的扩展格式,可以使用:
/Date(1372728650261-0700)/
它会返回一个DataContractJsonSerializer
之类的值。这符合.Net中DataContractJsonSerializer
类的要求。请参阅these docs中标题为“DateTime Wire Format”的部分。
但是,我强烈建议您不要使用后一种格式。它只能被JavaScriptSerializer
识别,并且文档明确声明您提供的任何偏移都将被忽略 - 而是使用服务器自己的偏移量。这是相当愚蠢的,但这就是它的作用。如果您使用的是2013-07-01T18:38:29-07:00
类,则偏移也会被忽略,但它的行为与DCJS不同(保持UTC而不是本地)。
就此而言,我建议完全放弃这种奇怪的格式。请改用ISO8601标准(例如,moment().format() // it's the default, no need to specify anything.
)。这可以通过momentjs轻松完成,并且是默认格式。
DateTimeOffset
在服务器端,使用JSON.Net,默认情况下也使用此格式。如果您真的关心偏移量,请使用服务器上的DateTime
类型而不是{{1}}类型。
答案 1 :(得分:0)
我不确定,但请检查您的asp.net Datetime是否使用localtime,utc或未指定进行反序列化。