Javascript 从Unix时间戳创建日期忽略时区
对于ODataREST服务,我使用Moment.js根据Unix时间戳创建日期,我希望忽略时区。 我的日期是“2013-12-24”,即1387839600秒 使用 结果是“2013-12-23T23:00:00.000Z”,因为我住在GMT+1。 通过使用Javascript 从Unix时间戳创建日期忽略时区,javascript,date,datetime,momentjs,Javascript,Date,Datetime,Momentjs,对于ODataREST服务,我使用Moment.js根据Unix时间戳创建日期,我希望忽略时区。 我的日期是“2013-12-24”,即1387839600秒 使用 结果是“2013-12-23T23:00:00.000Z”,因为我住在GMT+1。 通过使用 moment.utc("2013-12-24", "YYYY-MM-DD").toISOString() 我得到了“2013-12-24T00:00:00.000Z”,这正是我想要的。我可以简单地在结尾删除祖鲁时间的“Z” 但我的日期的真
moment.utc("2013-12-24", "YYYY-MM-DD").toISOString()
我得到了“2013-12-24T00:00:00.000Z”,这正是我想要的。我可以简单地在结尾删除祖鲁时间的“Z”
但我的日期的真实表示形式是Unix时间戳。所以如果我这样做了
moment.utc(1387839600, "X").toISOString()
我总是得到“2013-12-23T23:00:00.000Z”,但我希望它返回“2013-12-24T00:00:00.000Z”
我的错在哪里?
谢谢你的帮助 Unix时间戳(以秒或毫秒为单位)始终以UTC为单位。值
1387839600
实际上是2013-12-23 UTC晚上11:00。你用它来验证
如果希望时间为UTC午夜的2013-12-24,则时间戳应为1387843200
所以这一时刻是正确的。您应该关注RESTAPI,并确保它正确地发出UTC而不是本地时间值
另外,如果只需要日期部分,则不要使用.toISOString
。相反,请使用.format
,例如:
moment.utc(1387843200, 'X').format('YYYY-MM-DD')
你可以“编制”自己的格式。任何需要按原样复制(不插入)的字符串都应包含在括号内 因此,在您的情况下,这应该是可行的:
moment(1387839600, 'X').format('YYYY-MM-DD[T00:00:00.000]')
不要使用
toISOString()
。相反,请使用以下内容:
moment.utc(1387839600, "X").utcOffset(1).format('YYYY-MM-DD') + "[T" + moment.utc(1387839600, "X").utcOffset(1).format('HH:mm:ss.000]')
调整onChange功能后,如
onChange函数可以如下所示:
onChange:函数(值){
log({myDate:moment.utc(值'x').format('YYYY-MM-DDTHH:MM:ss.SSSZ'))});
},
似乎onChange值作为Unix ms时间戳(x)而不是Unix时间戳(x)出现,以防混淆
这应该使用矩.utc(矩(“1387839600”,“X”).format(“L”),“DD.MM.YYYY”).toISOString()打印一个字符串,如
2015-07-15T15:02:00.000+00:00
,但这似乎相当复杂!?或者只是moment(1387839600,'X')。格式('YYYY-MM-DDT00:00:00.000')
?谢谢@robertklep,我想接受你的评论作为我问题的答案,但很遗憾,我无法将你的评论提升为完整答案。。。
moment.utc(1387839600, "X").utcOffset(1).format('YYYY-MM-DD') + "[T" + moment.utc(1387839600, "X").utcOffset(1).format('HH:mm:ss.000]')