使用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())

当前回答

let dateVar = moment('any date value');
let newDateVar = dateVar.utc().format();

很干净!!!!

其他回答

尝试(无格式步骤)

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 " > < / >

只要使用所需区域的数据初始化了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.

new Date(moment()) -在excel中导出数据列时可能会出错

use

moment.toDate() -不会给出错误或使导出的文件损坏

由于momentjs无法控制javascript日期对象,我找到了一个解决这个问题的方法。

const currentTime = new Date(); const convertTime = moment(currentTime).tz(timezone)。格式(“YYYY-MM-DD HH: mm: ss”); const convertTimeObject = new Date(convertTime);

这将给你一个javascript日期对象与转换后的时间

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

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

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