【发布时间】:2016-04-27 15:52:23
【问题描述】:
我正在做一个项目,突然发现一个问题。问题是,服务器正在发送 GMT 的 Unix 时间戳,但由于夏令时日期 填充为 GMT。它可以从服务器端实现,但有一种非常简单的方法可以将其转换为本地时区(在我的情况下为 GMT 到 BST)
创建三个变量
- getPerfectLocalTime
- 你的Unix时间戳
- 你的格式
下面是逻辑,你可以使用
var GMTtime = moment(yourUnixTimestamp*1000).format('YYYY-MM-DD HH:mm:ss'); // It should be YYYY-MM-DD format
var convertToUtc = moment.utc(GMTtime).format('YYYY-MM-DD HH:mm:ss');
var localTimeToDate = moment.utc(convertToUtc).toDate();
var isDSTDateTime = moment(GMTtime, 'YYYY-MM-DD');
var month = isDSTTime.format('M');
var day = isDSTTime.format('D');
var year = isDSTTime.format('YYYY');
if(moment([year, month, day]).isDST()){
getPerfectLocalTime = moment(localTimeToDate).format(yourFormat);
}else {
getPerfectLocalTime = moment(yourUnixTimestamp*1000).format(yourFormat);
}
希望它能对编程世界的任何人有所帮助:)
【问题讨论】:
-
这里有问题吗?如果这是您的要求,我可以大大简化您的代码..
-
实际上,这里的计算是错误的。一般来说,当您发现自己在解析和格式化的过程中跳来跳去时,您可能做错了。
-
嗨,马特,感谢您的回复。这实际上不是一个问题。这只是一个帖子,可以帮助想要使用它的人。很抱歉,它对我来说很完美。太好了,如果你能告诉我哪里错了,我可以纠正它。谢谢
-
您的计算错误的主要原因是您没有考虑传递给时刻构造函数的数组中的月份为 0-11。您还假设您应该将本地时间用于 DST,将 UTC 用于标准时间,但这是完全错误的 - 它仅适用于伦敦,因为 BST 为 +1。它会在其他时区失败。此外,这对于想要的效果来说太过分了。
标签: javascript angularjs momentjs angular-moment