MomentJS / Дата объекта UTC по умолчанию - PullRequest
1 голос
/ 02 июля 2019

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

Мое приложение не должно принимать во внимание любые часовые пояса, однако этот хаос между моим бэкэнд-интерфейсом API и внешним интерфейсом, когда я отправляю объекты стандартных моментов в бэкэнд c #, по умолчанию конвертирует его в UTC, и я всегда получаю даты -1 день.

Могу ли я установить для объекта даты MomentJS или javascript значение по умолчанию всегда UTC И игнорировать часы / минуты / секунды?

Когда я делаю: moment(), он заполняется сегодняшним значением на основе часового пояса и на основе текущего часа.

Я хочу, чтобы moment() всегда имел значение UTC, а время всегда было 00:00:00 во всем моем приложении.

Возможно ли достичь этого также с помощью new Date()?

Прямо сейчас я всегда использовал .toUTCString() после new Date(), но у меня есть тонна переменных даты в моем решении, и не очень хорошо, чтобы убедиться, что у всех есть .toUTCString() после него все время, если другой Dev пропустит это, это вызовет проблему. Я пытаюсь найти способ стандартизировать это на уровне проекта.

Моя основная проблема связана с методами сравнения currentJS .isBefore(), .isSame(), .isAfter(). Поскольку все мои даты содержат разные часы и разные часовые пояса, когда происходит сравнение, они будут учитывать их, а не вести себя так, как я хочу.

Ответы [ 2 ]

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

вы можете попытаться использовать момент в UTC режиме таким образом:

let m = moment().utc()

затем, чтобы сбросить время до полуночи того дня, вы можетевызовите этот метод:

m.startOf('day')

, вы также можете связать все это вместе:

let m = moment.utc().startOf('day')

, и если вы распечатаете его, это будетчто-то вроде:

console.log(m.format())
// 2019-07-02T00:00:00Z

Вы также можете сделать это с нативной Дата , но вам придется написать кучу кода, который у моментного уже есть ...

Я надеюсь, что это ответ на ваши вопросы!

для справки смотрите здесь: https://momentjs.com/docs/#/parsing/utc/

и здесь: https://momentjs.com/docs/#/manipulating/start-of/

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

Вы можете использовать момент-часовой пояс с moment.

А затем установите часовой пояс по умолчанию UTC с кодом ниже:

import * as moment from 'moment-timezone';
...
moment.tz.setDefault('Etc/UTC');

Возможным вариантом в Angular может быть создание одноэлементного экземпляра LocaleService для управления параметрами, связанными с локализацией.

import { Injectable } from '@angular/core';
import * as moment from 'moment-timezone';

@Injectable({
  providedIn: 'root'
})
export class LocaleService {

  constructor() {
    this.setDefaultTimezone();
  }

  setDefaultTimezone() {
    moment.tz.setDefault('Etc/UTC');
  }

  // other stuff related to localization
  ...setCurrentTimezone()
  ...setLocale()
}

И затем нам нужно предоставить эту услугу через AppModule, а также не забыть внедрить ее в глобальный компонент, например AppComponent, для создания экземпляра.

...