使用moment .js,我无法将正确的moment对象转换为带时区的date对象。我记不出准确的日期。

例子:

var oldDate = new Date(),
    momentObj = moment(oldDate).tz("MST7MDT"),
    newDate = momentObj.toDate();
console.log("start date " + oldDate)
console.log("Format from moment with offset " + momentObj.format())
console.log("Format from moment without offset " + momentObj.utc().format())
console.log("(Date object) Time with offset " + newDate)
console.log("(Date object) Time without offset "+ moment.utc(newDate).toDate())

当前回答

转换任何日期,例如utc:

moment( moment().utc().format( "YYYY-MM-DD HH:mm:ss" )).toDate()

其他回答

只要使用所需区域的数据初始化了moment-timezone,代码就可以正常工作。

您正确地将时刻转换为时区,这反映在momentObj.format()输出的第二行中。

切换到UTC不仅会删除偏移量,还会更改回UTC时区。如果要这样做,则根本不需要原来的.tz()调用。你可以只执行moment.utc()。

也许您只是试图更改输出格式字符串?如果是这样,只需指定你想要格式化方法的参数:

momentObj.format("YYYY-MM-DD HH:mm:ss")

关于代码的最后几行-当你使用toDate()返回到Date对象时,你放弃了moment.js的行为,回到了JavaScript的行为。JavaScript Date对象将始终以运行它的计算机的本地时区打印。moment.js对此无能为力。

还有一些小事情:

While the moment constructor can take a Date, it is usually best to not use one. For "now", don't use moment(new Date()). Instead, just use moment(). Both will work but it's unnecessarily redundant. If you are parsing from a string, pass that string directly into moment. Don't try to parse it to a Date first. You will find moment's parser to be much more reliable. Time Zones like MST7MDT are there for backwards compatibility reasons. They stem from POSIX style time zones, and only a few of them are in the TZDB data. Unless absolutely necessary, you should use a key such as America/Denver.

将moment对象转换为date对象:

从http://momentjs.com/docs/ # /显示/ as-javascript-date /

moment().toDate();

收益率:

Tue Nov 04 2014 14:04:01 GMT-0600 (CST)

尝试(无格式步骤)

new Date(moment())

瓦尔=瞬间。tz(“2019-04-15 12”,“美国/纽约”); 控制台(新日期(d); 控制台(新日期(当前); <剧本剧本src = " https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js " > < / > <剧本剧本src = " https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data.min.js " > < / >

我需要在日期字符串中包含时区信息。我最初用的是瞬间。tz (dateStr美国/ New_York) .toString ();但后来我开始在把弦送回时刻时出错。

我尽力了。tz (dateStr美国/ New_York) .toDate ();但是后来我丢失了我需要的时区信息。

返回带有时区的可用日期字符串的唯一解决方案是moment。tz (dateStr美国/ New_York) .format ();

Moment已于2018年6月更新了js库。

var newYork    = moment.tz("2014-06-01 12:00", "America/New_York");
var losAngeles = newYork.clone().tz("America/Los_Angeles");
var london     = newYork.clone().tz("Europe/London");

newYork.format();    // 2014-06-01T12:00:00-04:00
losAngeles.format(); // 2014-06-01T09:00:00-07:00
london.format();     // 2014-06-01T17:00:00+01:00

如果你有使用Angular5+的自由,那么最好使用datePipe特性而不是timezone函数。我必须使用moment.js,因为我的项目仅限于Angular2。