修复了,用了笨办法。 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 还是产品逻辑?后面不会改吧?
如何获取 UTC+0 时间的 Unix 时间戳?我自己,加上 ChatGPT 一起,试了很多方法,都无法获取到 UTC+0 时间的 Unix 时间戳。 微信小程序是不是做了什么底层的修改啊? 唯一的接近的方法是「获取时区偏移的毫秒数」,然后相加或相减,但是在一些采用夏令时制度的地区,又会误差一小时。 我的时间戳用于签名的,这就导致其他一些地区的用户,生成的签名不正确,无法使用小程序。
2023-09-03补充一下,只在 iOS 上面会这样,在 Android 就是正常的
组件里 textarea 调高位置,导致键盘弹出又收起,如何解决呢?我有两个功能用了 textarea,键盘弹出时要修改元素高度,让 textarea 上移到键盘上方,不遮挡文本框。 现在遇到了问题,当选中文本框,键盘弹出就立马又消失了,问了 GPT,说是调高元素高度导致重新渲染,键盘又失去了焦点然后收起。AI 提供的方案都没能解决问题。大家有遇到这种情况,怎么解决的呢? 使用的是 mp-half-screen-dialog 组件 文本框在 slot="desc" 里面,使用 <view style="height:{{ modifyDialogHeight + 'rpx' }}"></view> 这种方式来加一个高度,让文本框显示在键盘上方。 modifyDialogHeight 来自 bindkeyboardheightchange="handleKeyboard"
2023-09-01