Как изменить часовой пояс объекта даты - PullRequest
0 голосов
/ 08 июля 2019

Я использую момент для установки / изменения часового пояса моего объекта даты, а не любое другое значение даты / времени

Это то, что я сейчас делаю:

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 все еще находится в часовом поясе EDT.

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)

Пожалуйста, помогите.Спасибо

Ответы [ 3 ]

1 голос
/ 08 июля 2019

Вы действительно меняете часовой пояс, все работает нормально, просто добавьте формат (), у меня пока недостаточно репутации, чтобы комментировать это, смеется, но почему вы используете Date (), просто придерживайтесь момента ()

 const dateNew = moment.tz(accountDate, "US/Pacific").format();
 console.log(dateNew)
0 голосов
/ 09 июля 2019

Я публикую его как еще один ответ, чтобы добавить его в виде кода @ 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)
0 голосов
/ 08 июля 2019

Так как вы включили тег реагировать.Я дам вам ответ по реакции.js.Вы можете установить пакет npm с именем moment-timezone, чтобы решить эту проблему.Пожалуйста, посмотрите на их документы .Вот полный пример в 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);

Приведенный выше код будет выглядеть следующим образом

enter image description here

...