关于javascript:如何将Moment.js日期转换为用户当地时区?

How to convert Moment.js date to users local timezone?

我使用Moment.js和Moment-Timezone框架,并且有一个Moment.js日期对象,该对象明确地在UTC时区中。 如何将其转换为浏览器的当前时区?

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

如果我能找到用户的本地时区就好了; 或者我想将日期对象转换为另一个只使用"本地时区"的数据对象,无论实际是什么。


您不需要为此使用时刻时区。主要的moment.js库具有使用UTC和本地时区的全部功能。

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

从那里,您可以使用您可能期望的任何功能:

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

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

另请注意,如果原始输入包含时区偏移量(例如+00:00Z),则可以直接使用moment进行解析。您不需要使用.utc.local。例如:

1
var localDate = moment("2015-01-30T10:00:00Z");


1
2
3
4
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
  • 定义您的日期格式。
  • 创建一个时刻对象,并在对象上将UTC标志设置为true。
  • 创建从原始时刻转换的本地化时刻对象
    宾语。
  • 从本地化的时刻对象返回格式化的字符串。
  • 请参阅:http://momentjs.com/docs/#/manipulating/local/


    这是我做的:

    1
    2
    3
    4
    var timestamp = moment.unix({{ time }});
    var utcOffset = moment().utcOffset();
    var local_time = timestamp.add(utcOffset,"minutes");
    var dateString = local_time.fromNow();

    其中{{ time }}是utc时间戳。


    使用utcOffset函数。

    1
    2
    3
    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