
本文探讨在UTC服务器环境中,如何使用date-fns和date-fns-tz库准确获取指定本地时区一天的开始和结束Unix时间戳。通过分析常见错误,文章详细阐述了先将UTC时间转换为本地时区表示,再利用zonedTimeToUtc函数将本地时区的日初日末时间点精确转换回UTC时间戳的关键方法,确保数据范围的正确性。
在现代web应用开发中,服务器通常配置为utc(协调世界时)以避免时区问题,但用户界面往往需要根据用户的本地时区显示数据。当需要获取某一特定本地日期(例如,“亚洲/雅加达”时区)的开始和结束时间戳时,直接使用date-fns库中的startofday和endofday函数可能会导致意外的结果。这是因为这些函数在处理date对象时,其内部操作可能不会完全按照我们期望的“本地时区”上下文来解释,尤其是在最终转换回unix时间戳时。
挑战:为何直接转换不奏效?
假设我们有一个UTC时间戳,代表某一时刻,我们希望找到它所在本地时区一天的开始和结束。以下是一个尝试,它将UTC时间转换为本地时区Date对象,然后应用startOfDay和endOfDay:
const { startOfDay, endOfDay, getTime, subDays } = require("date-fns");const { utcToZonedTime } = require("date-fns-tz");const timezone = "Asia/Jakarta"; // 目标本地时区// 假设我们有一个参考的Unix时间戳,例如昨天const selectedUnixTime = subDays(new Date(), 1).getTime();// 将UTC时间戳转换为表示本地时区时间的Date对象const localDate = utcToZonedTime(selectedUnixTime, timezone);// 尝试获取本地日期的开始和结束const localStartDateAttempt = getTime(startOfDay(localDate));const localEndDateAttempt = getTime(endOfDay(localDate));// 假设正确的本地开始和结束时间戳(UTC表示)// 例如,对于2023-05-30在Asia/Jakarta时区,其开始是2023-05-30 00:00:00 (Jakarta time)// 对应UTC时间是 2023-05-29 17:00:00 UTC (1685379600000)// 结束是 2023-05-30 23:59:59.999 (Jakarta time)// 对应UTC时间是 2023-05-30 16:59:59.999 UTC (1685465999999)const correctLocalStartDate = 1685379600000;const correctLocalEndDate = 1685465999999;console.log( { isItCorrect: localStartDateAttempt === correctLocalStartDate, correctDate: new Date(correctLocalStartDate), systemDate: new Date(localStartDateAttempt), }, "尝试获取的开始日期");console.log( { isItCorrect: localEndDateAttempt === correctLocalEndDate, correctDate: new Date(correctLocalEndDate), systemDate: new Date(localEndDateAttempt), }, "尝试获取的结束日期");
运行上述代码,我们可能会得到如下结果(具体日期取决于运行时间,但isItCorrect会是false):
{ isItCorrect: false, correctDate: 2023-05-29T17:00:00.000Z, // 雅加达时间2023-05-30 00:00:00 对应的UTC systemDate: 2023-05-30T07:00:00.000Z // 雅加达时间2023-05-30 14:0
以上就是JavaScript中在UTC服务器环境下获取本地时区日期的起始与结束时间戳的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1528053.html
微信扫一扫
支付宝扫一扫