【问题标题】:Converting a date to a good format that can be sent to database using moment.js使用 moment.js 将日期转换为可以发送到数据库的良好格式
【发布时间】:2021-03-13 07:39:39
【问题描述】:

我无法将我的日期格式转换为可以发送到我的数据库的良好格式。默认情况下,我在上午 08:00 在我的dateTimePicker 中设置了当前日期。当我想发送它时,它的格式是这样的"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;
}

【问题讨论】:

  • 这能回答你的问题吗? How do I format a date as ISO 8601 in moment.js?
  • 值得注意的是,2020-12-01T07:00:00.812Z 是 UTC 日期,因此时区将根据您的浏览器所在的时区而变化,因此 CET 将比 UTC 提前一小时

标签: angular momentjs


【解决方案1】:

一般来说,您希望将数据库中的时间保存为 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 中,然后在必要时进行转换

【讨论】:

  • 2020-12-01T07:00:00.812Z 是 UTC。这就是Z 的意思
  • 就像什么都不做一样,格式一样
  • 我知道它是 UTC。我认为 Kerk 的整个问题是以他喜欢的格式将其转换为当地时间。至于为什么它不起作用,你是在导入“时刻-时区”而不仅仅是“时刻”吗?否则时区元素将不起作用
  • 是的,一切都已导入,时区现在很好,但格式仍然相同,我不知道为什么
【解决方案2】:

抱歉,不需要 momentjs 来格式化日期。 你可以用这个。

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}`
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 2019-02-09
    相关资源
    最近更新 更多