【问题标题】:How to change the timezone of the date object如何更改日期对象的时区
【发布时间】:2019-11-18 05:28:09
【问题描述】:

我正在使用时刻来设置/更改我的日期对象的时区,而不是任何其他日期/时间值

这就是我目前正在做的事情:

const moment = require("moment-timezone");
const dateNew = moment.tz(accountDate, "US/Pacific");

这是 accountDate 值:Mon Jul 08 2019 06:05:22 GMT-0400 (Eastern Daylight Time)

我想改成:Mon Jul 08 2019 06:05:22 GMT-0700 (Pacific Daylight Time)

dateNew 仍处于美国东部时间时区。

the output of `console.log(dateNew)` is :


Moment {_isAMomentObject: true, _i: Mon Jul 08 2019 06:05:22 GMT-0400 (Eastern Daylight Time), _isUTC: true, _pf: {…}, _locale: Locale, …}
_d: Sun Jul 07 2019 23:05:22 GMT-0400 (Eastern Daylight Time) {}
_i: Mon Jul 08 2019 06:05:22 GMT-0400 (Eastern Daylight Time) {}
_isAMomentObject: true
_isUTC: true
_isValid: true
_locale: Locale {_calendar: {…}, _longDateFormat: {…}, _invalidDate: "Invalid date", ordinal: ƒ, _dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, …}
_offset: -420
_pf: {empty: false, unusedTokens: Array(0), unusedInput: Array(0), overflow: -2, charsLeftOver: 0, …}
_z: Zone {name: "US/Pacific", abbrs: Array(186), untils: Array(186), offsets: Array(186), population: 15000000}
__proto__: Object

console.log(new Date(dateNew)) 给出以下输出。

Mon Jul 08 2019 06:05:22 GMT-0400 (Eastern Daylight Time)

请帮助。谢谢

【问题讨论】:

    标签: javascript reactjs frontend momentjs


    【解决方案1】:

    您确实在更改时区,一切正常,只需添加格式(),我还没有足够的声誉对此发表评论,哈哈,但是您为什么要使用 Date(),只是坚持一下( )

     const dateNew = moment.tz(accountDate, "US/Pacific").format();
     console.log(dateNew)
    

    【讨论】:

    • 问题是我会完全停止使用 new Date(),日期是正确的,但是你不能使用 Date() 轻松地使用时区,这就是为什么我建议你只使用 moment ()。这可能会更好地解释它:stackoverflow.com/questions/28126529/… 和一张备忘单,可以随心所欲地显示日期:devhints.io/moment
    • 它也在用时刻转换整个日期对象。你能分享一个关于你建议的代码sn-p吗?谢谢
    • 当然,这可以让您的代码获得您想要的确切输出: const accountDate = 'Mon Jul 08 2019 06:05:22 GMT-0400 (Eastern Daylight Time)' const dateNew = moment(accountDate).tz('US/Pacific') console.log(dateNew.format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ')) 输出:2019 年 7 月 8 日星期一 03:05:22 GMT -0700
    • [GMT] 方括号之间只是将您选择的字符串添加到输出中
    【解决方案2】:

    因为你包含了 reactjs 标签。我会以 react.js 的方式给你答案。你可以安装名为 moment-timezone 的 npm 包来解决这个问题。也请查看他们的docs。这是 React 中的完整示例

    import React, { Component } from "react";
    import ReactDOM from "react-dom";
    import moment from "moment-timezone";
    import "./styles.css";
    
    class App extends Component {
      render() {
        const _date = "Mon Jul 08 2019 06:05:22 GMT-0400 (Eastern Daylight Time)";
        const result = moment.tz(_date, "US/Pacific");
        return (
          <div>
            <p>Origin Date : {_date}</p>
            <p>
              Converted Date : {result.format()} {result.tz()}
            </p>
          </div>
        );
      }
    }
    
    const rootElement = document.getElementById("root");
    ReactDOM.render(<App />, rootElement);
    

    上面的代码会是这样的结果

    【讨论】:

    • 我不想只更改时区的日期对象。我希望转换后的日期为:2019 年 7 月 8 日星期一 06:05:22 GMT-0700(太平洋夏令时间)
    【解决方案3】:

    我将其作为另一个答案发布,因此我可以将其添加为代码@Tanu

    const accountDate = 'Mon Jul 08 2019 06:05:22 GMT-0400 (Eastern Daylight Time)' 
    const dateNew = moment(accountDate).tz('US/Pacific') 
    console.log(dateNew.format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ zz')) 
    
    
    //OUTPUT: Mon Jul 08 2019 03:05:22 GMT-0700 PDT
    

    此外,您可以像这样添加更改缩写并添加带有其他方括号的括号:

    var abbrs = {
        EST : 'Eastern Standard Time',
        EDT : 'Eastern Daylight Time',
        CST : 'Central Standard Time',
        CDT : 'Central Daylight Time',
        MST : 'Mountain Standard Time',
        MDT : 'Mountain Daylight Time',
        PST : 'Pacific Standard Time',
        PDT : 'Pacific Daylight Time',
    };
    
    moment.fn.zoneName = function () {
        var abbr = this.zoneAbbr();
        return abbrs[abbr] || abbr;
    }
    

    所以现在的输出会是:

    console.log(dateNew.format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ [(]zz[)]')) 
    
    Mon Jul 08 2019 03:05:22 GMT-0700 (Pacific Daylight Time)
    

    【讨论】:

    • 嘿 Sdpotts93 我不想转换日期。我希望输出为 Mon Jul 08 2019 06:05:22 GMT-0700 PDT。谢谢 根据我发布的问题:这是 accountDate 值:2019 年 7 月 8 日星期一 06:05:22 GMT-0400(东部夏令时间)我想将其更改为:2019 年 7 月 8 日星期一 06:05:22 GMT-0700(太平洋夏令时间)
    猜你喜欢
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 2020-04-02
    • 2014-09-22
    相关资源
    最近更新 更多