微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

时区独立格式化 date-fns

如何解决时区独立格式化 date-fns

目前我正在使用 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 使格式化的值与时区无关?

解决方法

尝试这样的事情:

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()));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。