React Native中不使用moment-timezone获取带时区偏移的UTC当日结束时间
问题
我们有一款面向全球用户的React Native应用,希望展示UTC格式的当日结束时间,但尚未找到实现方法。假设本地时区为+03:00,当UTC进入新一天时,本地时间应为03:00,如何获取对应的UTC值?我尝试了以下代码:
moment().utc().endOf('day').format() // -> 2023-02-16T23:59:59Z moment().utc(true).endOf('day').format() // -> 2023-02-16T23:59:59Z moment().endOf('day').utc().format() // -> 2023-02-16T20:59:59Z moment().endOf('day').utc(true).format() // -> 2023-02-16T23:59:59Z moment.utc().endOf('day').format() // -> 2023-02-16T23:59:59Z // 我需要得到的结果是2023-02-17T02:59:59Z
我需要得到的结果是2023-02-17T02:59:59Z,请问不使用moment-timezone时,如何为日期添加该时区偏移?
解决方案
根据你给出的目标结果,本质是要UTC当日结束时间(23:59:59Z)加上3小时偏移,不用moment-timezone的话,用以下两种方式都能实现:
方法1:Moment.js基础实现
直接基于UTC时间计算,添加时区偏移:
const targetTime = moment.utc().endOf('day').add(3, 'hours').format(); console.log(targetTime); // 输出2023-02-17T02:59:59Z
方法2:原生JavaScript实现
无需依赖第三方库,直接操作UTC时间:
// 获取当前UTC日期的年、月、日 const now = new Date(); const utcYear = now.getUTCFullYear(); const utcMonth = now.getUTCMonth(); const utcDay = now.getUTCDate(); // 创建UTC当日23:59:59的日期对象 const utcEndOfDay = new Date(Date.UTC(utcYear, utcMonth, utcDay, 23, 59, 59)); // 添加3小时偏移 utcEndOfDay.setUTCHours(utcEndOfDay.getUTCHours() + 3); // 格式化为所需的UTC字符串(去掉毫秒部分) const targetTime = utcEndOfDay.toISOString().replace(/\.\d{3}Z$/, 'Z'); console.log(targetTime); // 输出2023-02-17T02:59:59Z
如果你的实际需求是本地时区自定义当日(UTC 00:00对应本地03:00,该时段结束于本地次日02:59)的UTC结束时间,那对应的结果应该是2023-02-16T23:59:59Z,此时直接使用moment.utc().endOf('day').format()即可获取。
内容的提问来源于stack exchange,提问作者AuroPick
相关产品推荐
相关产品推荐

