如何检测日光节约并在时刻js转换为BST(当地时间)

时间:2016-04-27 15:52:24

标签: javascript angularjs momentjs angular-moment

我正在开展一个项目并突然发现了一个问题。问题是,服务器正在发送Unix时间戳,这是格林威治标准时间,但由于夏令时的日期 人口稠密的GMT。它可以从服务器端实现,但有一种非常简单的方法可以将它转换为本地时区(在我的情况下是GMT到BST)

创建三个变量

  1. getPerfectLocalTime
  2. yourUnixTimestamp
  3. yourFormat
  4. 以下是逻辑,你可以使用

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

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

1 个答案:

答案 0 :(得分:0)

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

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

moment.unix(yourUnixTimestamp).format(yourFormat)

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

moment.unix(yourUnixTimestamp).isDST()

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