小程序
小游戏
企业微信
微信支付
扫描小程序码分享
我自己,加上 ChatGPT 一起,试了很多方法,都无法获取到 UTC+0 时间的 Unix 时间戳。
微信小程序是不是做了什么底层的修改啊?
唯一的接近的方法是「获取时区偏移的毫秒数」,然后相加或相减,但是在一些采用夏令时制度的地区,又会误差一小时。
我的时间戳用于签名的,这就导致其他一些地区的用户,生成的签名不正确,无法使用小程序。
1 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
修复了,用了笨办法。
const now = new Date(); // 获取设备本地时间 const timezoneOffsetInHours = now.getTimezoneOffset() / -60; // 获取时区偏移的小时数 const utcTimezone = (timezoneOffsetInHours > 0 ? '+' : '') + timezoneOffsetInHours.toString(); // 获取 UTC 时区 // 是否为夏令时 function isDST() { const january = new Date(new Date().getFullYear(), 0, 1); const july = new Date(new Date().getFullYear(), 6, 1); return january.getTimezoneOffset() !== july.getTimezoneOffset(); } let timeDiff = now.getTimezoneOffset() * 60 * 1000; // 获取时区偏移的毫秒数 if (isDST()) { timeDiff += 60 * 60 * 1000; // 增加一个小时 } const utcPositiveOffset = Math.floor(Date.now() + timeDiff); // 东区 const utcNegativeOffset = Math.floor(Date.now() - timeDiff); // 西区 let utcTimestamp = timezoneOffsetInHours > 0 ? utcPositiveOffset : utcNegativeOffset; // 获取 UTC+0 的 Unix 时间戳(毫秒级) if (timezoneOffsetInHours == 0) { utcTimestamp = Math.floor(Date.now() - 28800000); // 如果当前设备是 UTC+0 时区,微信写死了输出为东八区时间了 } console.log('utcTimestamp', utcTimestamp);
我现在有一个疑问。当用户本身就是 UTC+0 时区时,微信获取到的是 +8 时区的时间,这个是 bug 还是产品逻辑?后面不会改吧?
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
修复了,用了笨办法。
const now = new Date(); // 获取设备本地时间 const timezoneOffsetInHours = now.getTimezoneOffset() / -60; // 获取时区偏移的小时数 const utcTimezone = (timezoneOffsetInHours > 0 ? '+' : '') + timezoneOffsetInHours.toString(); // 获取 UTC 时区 // 是否为夏令时 function isDST() { const january = new Date(new Date().getFullYear(), 0, 1); const july = new Date(new Date().getFullYear(), 6, 1); return january.getTimezoneOffset() !== july.getTimezoneOffset(); } let timeDiff = now.getTimezoneOffset() * 60 * 1000; // 获取时区偏移的毫秒数 if (isDST()) { timeDiff += 60 * 60 * 1000; // 增加一个小时 } const utcPositiveOffset = Math.floor(Date.now() + timeDiff); // 东区 const utcNegativeOffset = Math.floor(Date.now() - timeDiff); // 西区 let utcTimestamp = timezoneOffsetInHours > 0 ? utcPositiveOffset : utcNegativeOffset; // 获取 UTC+0 的 Unix 时间戳(毫秒级) if (timezoneOffsetInHours == 0) { utcTimestamp = Math.floor(Date.now() - 28800000); // 如果当前设备是 UTC+0 时区,微信写死了输出为东八区时间了 } console.log('utcTimestamp', utcTimestamp);
我现在有一个疑问。当用户本身就是 UTC+0 时区时,微信获取到的是 +8 时区的时间,这个是 bug 还是产品逻辑?后面不会改吧?