如何将Moment.js的date转换为用户当地时区?

我使用Moment.js和Moment-Timezone框架,并有一个明确在UTC时区的Moment.jsdate对象。 我怎样才能将其转换为浏览器的当前时区?

var testDateUtc = moment.tz("2015-01-30 10:00:00", "UTC"); var localDate = ???

所以如果我能找出用户本地时区就好了; 或者我想将date对象转换为另一个只使用“本地时区”的数据对象,而不pipe实际是什么。

你不需要使用这个时刻。 主要的moment.js库具有与UTC和本地时区一起工作的全部function。

 var testDateUtc = moment.utc("2015-01-30 10:00:00"); var localDate = moment(testDateUtc).local(); 

从那里你可以使用任何你可能期望的function:

 var s = localDate.format("YYYY-MM-DD HH:mm:ss"); var d = localDate.toDate(); // etc... 

请注意,通过将moment对象testDateUtc传回到moment()构造函数中,它将创build一个克隆 。 否则,当你调用.local() ,它也会改变testDateUtc值,而不是只改变localDate值。 时刻是可变的

另外请注意,如果您的原始input包含时区偏移(如+00:00Z ,则可以直接使用moment直接parsing它。 您不需要使用.utc.local 。 例如:

 var localDate = moment("2015-01-30T10:00:00Z"); 
 var dateFormat = 'YYYY-DD-MM HH:mm:ss'; var testDateUtc = moment.utc('2015-01-30 10:00:00'); var localDate = testDateUtc.local(); console.log(localDate.format(dateFormat)); // 2015-30-01 02:00:00 
  1. 定义你的date格式。
  2. 创build一个时刻对象,并在对象上设置UTC标志为true。
  3. 创build一个从原始时刻对象转换的本地时刻对象。
  4. 从本地化的时刻对象返回格式化的string。

请参阅: http : //momentjs.com/docs/#/manipulating/local/

使用utcOffset函数。

 var testDateUtc = moment.utc("2015-01-30 10:00:00"); var localDate = moment(testDateUtc).utcOffset(10 * 60); //set timezone offset in minutes console.log(localDate.format()); //2015-01-30T20:00:00+10:00