问题描述
目前我正在使用 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()));