繁体   English   中英

如何在moment js中检测夏令时并转换为BST(当地时间)

[英]How to detect day light saving and convert to BST (local time) in moment js

我正在做一个项目,突然发现一个问题。 问题是,服务器发送的 Unix 时间戳是 GMT,但由于夏令时,日期填充为 GMT。 它可以从服务器端实现,但有一种非常简单的方法可以将其转换为本地时区(在我的情况下为 GMT 到 BST)

创建三个变量

  1. 获取完美本地时间
  2. 你的Unix时间戳
  3. 你的格式

下面是逻辑,你可以使用

 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); }

希望它可以帮助编程世界中的任何人:)

鉴于您的示例中唯一的输入是yourUnixTimestamp ,并且您正在乘以 1000,我将假设这是一个传统的 Unix 时间戳 - 自 UTC 1970-01-01 午夜以来以整秒表示的整数。

只需调用moment.unix来解析这种特殊类型的输入值。 生成的moment对象已经处于本地模式,因此您可以直接对其进行格式化。

moment.unix(yourUnixTimestamp).format(yourFormat)

如果您想知道 DST 是否在本地时区生效,您也可以直接询问。

moment.unix(yourUnixTimestamp).isDST()

但请注意,您无需知道这一点即可正确格式化时间。 Moment 已经在内部考虑到了这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM