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

当前回答

这个问题有点晦涩。我会尽力解释的。”首先,您应该了解如何使用moment-timezone。根据这里的答案TypeError: moment()。Tz不是一个函数,你必须从moment-timezone导入moment,而不是默认的moment(当然你必须先NPM安装moment-timezone !)为了清楚起见,

const moment=require('moment-timezone')//import from moment-timezone

现在,为了使用时区功能,请使用moment.tz("date_string/moment()","time_zone")(更多详细信息请访问https://momentjs.com/timezone/)。该函数将返回一个具有特定时区的moment对象。为了清楚起见,

var newYork= moment.tz("2014-06-01 12:00", "America/New_York");/*this code will consider NewYork as the timezone.*/

现在,当您尝试将newYork (moment对象)转换为moment的toDate() (ISO 8601格式转换)时,您将得到英国格林尼治时间。有关更多详细信息,请参阅关于UTC的文章https://www.nhc.noaa.gov/aboututc.shtml。然而,如果你只是想要这种格式的本地时间(根据这个例子,纽约时间),只需添加方法.utc(true),参数为true,到你的moment对象。为了清楚起见,

newYork.toDate()//will give you the Greenwich ,UK, time.

newYork.utc(true).toDate()//will give you the local time. according to the moment.tz method arg we specified above, it is 12:00.you can ofcourse change this by using moment()

简而言之,时刻。tz会考虑您指定的时区,并将您的本地时间与格林尼治时间进行比较,从而得到一个结果。我希望这对你有用。

其他回答

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

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

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

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

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

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

.toDate并不适合我,所以,下面是我所做的:

futureStartAtDate = new Date(moment().locale("en").add(1, 'd').format("MMM DD, YYYY HH:MM"))

希望这能有所帮助

尝试(无格式步骤)

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已于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。