如何解决时区独立格式化 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 举报,一经查实,本站将立刻删除。