为什么在添加时区偏移时添加一小时?

时间:2015-08-06 09:54:31

标签: momentjs

我正在使用Moment and Moment Timezone。

我有一个unix时间戳,然后我想添加时区偏移量,但偏移量也会增加到时间 - 我不想要这个:

var testDateTimeUnix = 1438352400; 
// Fri, 31 Jul 2015 14:20:00 
var testDateTimeUnixFormatted = moment(testDateTimeUnix, 'X').utc().format() 
// "2015-07-31T14:20:00+00:00"
var testDateTimeWithTimezoneOffset = moment(testDateTimeUnixFormatted).utc().tz('Europe/Bucharest').format(); 
// “2015-07-31T17:20:00+03:00"

我想要的格式化日期是:

"2015-07-31T14:20:00+03:00"

任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:0)

我不确定你为什么要这样做...当显示17:20:00+03:00时,这意味着3小时的偏移量包含在时间中。这意味着我知道在时刻或时刻 - 时区中没有任何方法可以提供帮助,因为它们总会将偏移应用到当下。

有一种hacky方式,非常脏,我不会推荐它用于生产代码,因为它依赖于内部结构,可能会破坏库中的其他东西(你已被适当警告:))

var moment = require( 'moment-timezone' ),

// your timestamp
tx = 1438352400;
// expressed as a moment in UTC
txu = moment( tx, 'X').utc();
// now get the UTC offset for Bucharest (in minutes) 
txo = moment().tz('Europe/Bucharest').utcOffset();

// This is the dirty part and we hack the moment's internal structure. Bad.
// Set the offset to Bucharest's
txu._offset = txo; 

// and display
console.log( txu.format() );
// 2015-07-31T14:20:00+03:00

```

所以这是可行的,但我不知道最终值代表什么时间。 Moment抵消时间是有原因的。