如何移除tempusdominus-bootstrap-4日期选择器的时区影响?
解决DateTime选择器时区偏移问题
你的问题核心在于Date.toISOString()方法会将本地时间转换为UTC时间输出,而你所在的时区是GMT+0200(中欧夏令时),所以本地时间会被减去2小时变成UTC时间,这就导致输出的时间比你实际选择的少2小时。下面给你两种可行的解决办法:
方法一:手动构建本地时间的ISO格式字符串
直接获取日期对象的本地时间部分,手动拼接成你需要的YYYY-MM-DDTHH:mm:ss格式,绕开UTC转换:
// 封装一个生成本地ISO格式字符串的工具函数 function getLocalISOString(date) { const year = date.getFullYear(); // 月份是从0开始的,所以要+1,并且补零到2位 const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); const seconds = String(date.getSeconds()).padStart(2, '0'); return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`; } // 替换你原来的代码 let date = new Date(); console.log(date); // Fri May 11 2018 08:34:43 GMT+0200 (Central European Summer Time) date.setDate(date.getDate() - 5); let eventsFrom = getLocalISOString(date); console.log(eventsFrom); // 输出 2018-05-06T08:34:43,和本地时间一致 let dateToday = new Date(); let eventsTo = getLocalISOString(dateToday);
方法二:配置DateTime选择器使用本地时区
如果你用的tempusdominus-bootstrap-4 DateTime选择器本身支持时区配置,可以直接在初始化时指定使用本地时区,这样获取的时间就是本地时间,不需要额外处理:
// 初始化DateTime选择器时添加timeZone配置 $('#your-datetimepicker-id').datetimepicker({ timeZone: 'local', // 关键:设置为本地时区 // 其他你的配置项,比如默认日期范围等 });
这样配置后,选择器返回的时间会直接使用你的本地时区,不会出现UTC偏移的问题。
提示:如果你的API接口要求必须传UTC时间,那你需要反过来处理——把本地时间转换为UTC时间,但根据你的描述,你需要的是和选择时间一致的输出,所以上面两种方法应该都能解决你的问题。
内容的提问来源于stack exchange,提问作者Arter
相关产品推荐
相关产品推荐

