-1

我正在做一个项目,突然发现一个问题。问题是,服务器正在发送 GMT 的 Unix 时间戳,但由于夏令时,日期被填充为 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);
}

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

4

1 回答 1

0

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

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

moment.unix(yourUnixTimestamp).format(yourFormat)

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

moment.unix(yourUnixTimestamp).isDST()

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

于 2016-04-28T17:26:26.800 回答