[英]How to detect day light saving and convert to BST (local time) in moment js
我正在做一个项目,突然发现一个问题。 问题是,服务器发送的 Unix 时间戳是 GMT,但由于夏令时,日期填充为 GMT。 它可以从服务器端实现,但有一种非常简单的方法可以将其转换为本地时区(在我的情况下为 GMT 到 BST)
创建三个变量
下面是逻辑,你可以使用
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.