首页 文章

Moment.js转换为日期对象

提问于
浏览
479

使用Moment.js我无法将正确的时刻对象转换为带时区的日期对象 . 我无法得到正确的日期 .

Example:

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

6 回答

  • 18

    由于momentjs无法控制javascript日期对象,因此我找到了解决方法 .

    const currentTime = new Date();    
    const convertTime = moment(currentTime).tz(timezone).format("YYYY-MM-DD HH:mm:ss");
    const convertTimeObject = new Date(convertTime);
    

    这将为您提供转换时间的javascript日期对象

  • 2

    使用此选项将矩形对象转换为日期对象:

    http://momentjs.com/docs/#/displaying/as-javascript-date/

    moment().toDate();
    

    产量:

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

    只要您使用the data for the zones you want初始化moment-timezone,您的代码就会按预期工作 .

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

    切换到UTC并不会这样做,你根本不需要原来的 .tz() 呼叫 . 你可以做 moment.utc() .

    也许你只是想改变输出格式字符串?如果是这样,只需指定 format 方法所需的参数:

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

    关于代码的最后一行 - 当你使用 toDate() 返回 Date 对象时,你放弃了moment.js的行为并回到了JavaScript的行为 . 一个JavaScript Date 对象将始终打印在计算机的本地时区中___209619_什么都没有.js可以做到这一点 .

    其他几件小事:

    • 虽然矩构造函数可以采用 Date ,但通常最好不要使用 Date . 对于"now",请勿使用 moment(new Date()) . 相反,只需使用 moment() . 两者都可以工作,但它首先尝试将其解析为 Date . 你会发现瞬间的解析器更可靠 .

    • 时区如 MST7MDT 是出于向后兼容的原因 . 它们来自POSIX风格的时区,其中只有少数属于TZDB数据 . 除非绝对必要,否则应使用 America/Denver 等密钥 .

  • 4

    .toDate 并没有真正为我工作,所以,这就是我所做的:

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

    希望这可以帮助

  • 40

    我需要在日期字符串中包含时区信息 . 我最初使用的是 moment.tz(dateStr, 'America/New_York').toString(); ,但后来我开始收到关于将该字符串反馈回来的错误 .

    我尝试了 moment.tz(dateStr, 'America/New_York').toDate(); ,但后来我丢失了我需要的时区信息 .

    返回可用日期字符串 with timezone 的唯一解决方案是 moment.tz(dateStr, 'America/New_York').format();

  • 2

    片刻已于06/2018更新了js lib .

    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功能,而不是时区功能 . 我必须使用moment.js,因为我的项目仅限于Angular2 .

相关问题