我正在使用矩型库将日期转换为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"??
不知道为什么时刻不能正确地转换日期,这里有什么主意吗?
答案 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();您的其他代码没有的原因 工作是因为在第一行中,您受到时区的影响 浏览器。第二行中的区域设置器仅更改 用于格式化的区域,而不更改实际时间。
此外,当您将一些时间转储到控制台进行调试时,请确保 您将其格式化以进行输出。否则,您只是在看它 内部属性值,可能直接有意义也可能没有意义。