使用moment.utc()错误地将日期转换为“天”格式的utc格式-Moment Javascript

时间:2019-02-06 06:17:31

标签: javascript momentjs

我正在使用矩型库将日期转换为utc格式。这是我的日期字符串:

var dateString = "2019-01-31T11:33:16.952+0000";

new Date("2019-01-31T11:33:16.952+0000") // o/p: Thu Jan 31 2019 03:33:16 GMT-0800 (Pacific Standard Time) 由于此日期距离今天的日期还不到一周,因此我尝试显示“ n天前”而不是实际日期的文本。但是出于某种原因,我这样做时得到的将来日期显示为“ 6天前”:

moment.utc("2019-01-31T11:33:16.952+0000").local().fromNow() // shouldnt this display "5 days ago"??

不知道为什么时刻不能正确地转换日期,这里有什么主意吗?

1 个答案:

答案 0 :(得分:0)

我猜(考虑使用local()会转换为您的本地时区,因此会扣除时间,因为您可能在-ve TimeZone中)this answer是您期望的解决方案:

  

理想情况下,您希望将UTC时间戳从服务器传递到   客户端。这并不意味着您必须切换整个服务器   转换为UTC,这只是意味着您将从   通过网络将其数据库发送到服务器上的UTC之前,先将其发送。   当然,如果您将时间实际存储在UTC中会更好,但是   您说您无权进行此类更改   现在。但是,让我们以无法更改的假设为前提   服务器上的所有内容。

     

我们还将假设您的服务器固定为UTC-07:00偏移量。   在现实生活中,这仅适用于像亚利桑那州这样的地方   不要遵循夏令时。因此,如果您在洛杉矶,   是太平洋时间,那么您的某些数据基于UTC-07:00,但是   其中一些基于UTC-08:00。如果您需要做更多的工作   想用JavaScript做到这一点。

     

我们还假设输入已经是ISO8601中的字符串   格式。 (如果不是,请告诉我,我将调整此代码。)

     

var s =“ 2013-09-11 18:00:00”; //来自action.timeStamp

     

var actionTime = moment(s +“ -07:00”,“ YYYY-MM-DD HH:mm:ssZ”);

     

var timeAgo = actionTime.fromNow();您的其他代码没有的原因   工作是因为在第一行中,您受到时区的影响   浏览器。第二行中的区域设置器仅更改   用于格式化的区域,而不更改实际时间。

     

此外,当您将一些时间转储到控制台进行调试时,请确保   您将其格式化以进行输出。否则,您只是在看它   内部属性值,可能直接有意义也可能没有意义。