【问题标题】:timezone independent formatting date-fns时区独立格式日期-fns
【发布时间】:2021-01-22 05:25:24
【问题描述】:

目前我正在使用date-fns 服务器端在保存到数据库之前将元数据添加到某些记录:

function getDateFormat(serverMillisTimestamp) {
  const current_unix = Math.round(serverMillisTimestamp / 1000)
  return {
    year: format(fromUnixTime(current_unix), 'yyyy').toString(),
    monthOfYear: format(fromUnixTime(current_unix), 'MMMM')
      .toString()
      .toLowerCase(),
    isoWeekOfYear: format(fromUnixTime(current_unix), 'II').toString(),
    dayOfMonth: format(fromUnixTime(current_unix), 'dd').toString(),
    isoDayOfWeek: format(fromUnixTime(current_unix), 'iiii')
        .toString()
        .toLowerCase()
  }
}

但是在客户端,当我使用相同的代码生成 year、monthofYear、isoWeekOfYear、dayOfMonth 和 isoDayOfWeek 以便我可以从数据库中查询记录时,存在不匹配,因为格式使用区域设置时区来获取这些值。

我如何利用date-fns 使格式化的值与时区无关?

【问题讨论】:

  • 我认为您不能只忽略时区。您已经为您的服务器和前端应用程序、UTC 或其他东西使用了一些公共时区。然后在此处查看文档:date-fns.org/v2.16.1/docs/Time-Zones.
  • 这是有道理的。我将如何格式化为 UTC 时区

标签: javascript date-fns


【解决方案1】:

试试这样的:

import {format} from "date-fns";
import {utcToZonedTime} from "date-fns-tz";

function getDateFormat(serverMillisTimestamp) {
  const utcTime = utcToZonedTime(serverMillisTimestamp, "UTC");
  return {
    year: format(utcTime, "yyyy").toString(),
    monthOfYear: format(utcTime, "MMMM").toString().toLowerCase(),
    isoWeekOfYear: format(utcTime, "II").toString(),
    dayOfMonth: format(utcTime, "dd").toString(),
    isoDayOfWeek: format(utcTime, "iiii").toString().toLowerCase(),
  };
}

const date = new Date();
console.log(getDateFormat(date.getTime()));

【讨论】:

    猜你喜欢
    • 2018-06-18
    • 2021-10-14
    • 2021-04-16
    • 1970-01-01
    • 2021-01-23
    • 2021-11-14
    • 2020-02-21
    • 2021-07-17
    • 2018-04-26
    相关资源
    最近更新 更多