我正在使用Momentjs和Momentjs Timezone来处理日期/时区。
我正在尝试从特定时区的用户输入日期,并将其转换为自己时区的本地时间。看起来Moment的Timezone库不支持new Date().getTimezoneOffset()
格式来设置时区。
function calculateLocalTime(e) {
var currentTz = new Date().getTimezoneOffset(),
fromDate = moment.tz(this.value, 'GMT'),
toDate = fromDate.tz(currentTz);
$('to-time').val(toDate.format(dateFormat));
}
我也尝试从普通Date
对象中提取三个字母的时区,但似乎也不支持。
function calculateLocalTime(e) {
var currentTz = new Date().toString().split(' ').pop().replace(/\(/gi, '').replace(/\)/gi, ''),
fromDate = moment.tz(this.value, 'GMT'),
toDate = fromDate.tz(currentTz);
$('to-time').val(toDate.format(dateFormat));
}
关于如何使用Moment进行此操作的任何想法?
答案 0 :(得分:1)
时刻时区用于处理IANA TZ Database中的标准标识符,例如America/Los_Angeles
。
Moment.js使用zone
函数支持固定偏移区域,独立于时刻 - 时区。
var m = moment();
// All of the following are equivalent
m.zone(480); // minutes east of UTC, just like Date.getTimezoneOffset()
m.zone(8); // hours east of UTC
m.zone("-08:00"); // hh:mm west of UTC (ISO 8601)
但是,由于您说您想要转换为用户的本地时区,因此无需明确操作它。只需使用local
功能。
以下是一个完整的示例,从明确的IANA时区转换为用户的本地时区:
// Start at noon, Christmas Day, on Christmas Island (in the Indian Ocean)
var m = moment.tz('2014-12-25 12:00:00', 'Indian/Christmas');
// Convert to whatever the user's local time zone may be
m.local();
// Format it as a localized string for display
var s = m.format('llll');
对我来说,在美国太平洋时区运行,我得到"Wed, Dec 24, 2014 9:00 PM"
。结果将根据代码的运行位置而有所不同。