Преобразование даты в хороший формат, который можно отправить в базу данных с помощью moment.js

У меня проблемы с преобразованием моего формата даты в хороший формат, который можно отправить в мою базу данных. По умолчанию у меня текущий день установлен в моем dateTimePicker в 08:00. Когда я хочу отправить его, формат выглядит следующим образом: "2020-12-01T07:00:00.812Z". Чего я пытаюсь добиться, так это "2020-12-01 08-00", так что не только формат плохой, но и за час до выбранного времени. Я пытался конвертировать с помощью moment.js, но ничего не происходит. Вот код, который я пробовал:

// form where I can pick the date //
ngOnInit() {
    this.data= this.formBuilder.group({
      id: [],
      dateFrom: [this.setTime(), Validators.required],
      dateTo: [this.getNextWeek(), Validators.required],
      status: [-1],
    });
  }

// function where I try to convert the date to a useable form //

dataModify(object) {
    let formattedObject = {
      id: "",
      dateFrom: object.dateFrom,
      dateTo: object.dateTo,
      status: object.status,
    };

    moment.utc(object.dateFrom).format('YYYY-MM-DD HH:mm');
    moment.utc(object.dateTo).format('YYYY-MM-DD HH:mm');

return formattedObject;
}

person Kerk    schedule 01.12.2020    source источник
comment
Отвечает ли это на ваш вопрос? Как отформатировать дату как ISO 8601 в moment.js?   -  person Liam    schedule 01.12.2020
comment
Стоит отметить, что 2020-12-01T07:00:00.812Z — это дата UTC, поэтому часовой пояс будет сдвинут в зависимости от того, в каком часовом поясе находится ваш браузер, поэтому CET будет на один час раньше UTC.   -  person Liam    schedule 01.12.2020


Ответы (2)


Вообще говоря, вы хотите сохранить свое время в базе данных как UTC, а затем преобразовать его там, где это необходимо (обычно на клиенте).

Я предполагаю из вашего вопроса, что вы находитесь в GMT+1. Вы можете выполнить преобразование вручную или добавить момент-часовой пояс:

https://www.npmjs.com/package/moment-timezone

Затем вы конвертируете так:

// Change 'Europe/Madrid' to whatever timezone  you need
moment(object.dateFrom).tz('Europe/Madrid').format('YYYY-MM-DD HH:mm'))

Приятно то, что если вам когда-нибудь придется обслуживать несколько часовых поясов, вы можете сохранить все время в UTC, а затем преобразовать при необходимости.

person Michael Beeson    schedule 01.12.2020
comment
2020-12-01T07:00:00.812Z — это всемирное координированное время. Вот что означает Z - person Liam; 01.12.2020
comment
как будто он вообще ничего не делает, тот же формат - person Kerk; 01.12.2020
comment
Я знаю, что это UTC. Я думаю, что вся проблема Керка заключается в том, чтобы преобразовать его в местное время в формате, который ему нравится. Что касается того, почему это не работает, вы импортируете «момент-часовой пояс», а не просто «момент»? В противном случае элементы часового пояса не будут работать - person Michael Beeson; 01.12.2020
comment
да, все импортируется, часовой пояс теперь в порядке, но формат остается прежним, и я не знаю, почему - person Kerk; 01.12.2020

Извините, но нет необходимости в моментах для форматирования даты. Вы можете использовать это.

formatDate = (date) => {
    const _date = new Date(date);
    const day = _date.getDate();
    const month = _date.getMonth() + 1;
    const year = _date.getFullYear();
    return `${year}-${month}-${day}`;
}

formatTime = (date) => {
    const _date = new Date(date);
    const hours = _date.getHours()
    const minutes = _date.getMinutes();
    const seconds = _date.getSeconds();
    return `${hours}:${minutes}:${seconds}`;
}

toDateTimestamp = (date) => {
    const dateStamp = this.formatDate(date);
    const timeStamp = this.formatTime(date);
    return `${dateStamp} ${timeStamp}`
}
person Srinath Kamath    schedule 01.12.2020