【发布时间】:2018-07-10 10:49:59
【问题描述】:
我想计算洛杉矶第二天 24:00 时的当前当地时间。目的是设置一个 cookie 直到下一个午夜。
我使用了时刻和时刻时区,但是,我无法证明单个函数的构建大小的开销是合理的。
这是我正在使用的,但我坚持将时间从洛杉矶午夜转换回当地时间,因为当我转换回来时,它是在当前时间之前。我认为倒车时convertToOtherTimezone 函数不会有问题,但我不太确定还有什么要探索的。
非常感谢任何帮助。
const convertToOtherTimezone = (date, from, to) => {
const utc = date.getTime() + (3600000 * from)
return new Date(utc + (3600000 * to))
}
console.log(
'native local time in LA',
new Date().toLocaleString('en-US', { timeZone: 'America/Los_Angeles' })
)
const LA_OFFSET = -7
// I'm using the AEST timezone -10
const LOCAL_OFFSET = new Date().getTimezoneOffset() / 60
const midnightInLA = (localOffset) => {
// get the current time in LA
const la = convertToOtherTimezone(new Date(), localOffset, LA_OFFSET)
console.log('current time in LA', la)
// set date to midnight in LA's timezone
la.setHours(24,0,0,0)
console.log('next midnight in LA', la)
// convert back to local time
return convertToOtherTimezone(la, LA_OFFSET, localOffset)
// Ulias Hunka gave the correct answer, but deleted his post.
// reverse the offsets
return convertToOtherTimezone(la, LA_OFFSET * -1, localOffset * -1)
}
console.log(
'la midnight in local time',
midnightInLA(LOCAL_OFFSET)
)
<script src="https://codepen.io/synthet1c/pen/KyQQmL.js"></script>
【问题讨论】:
-
moment 和 moment-timezone 压缩后一起小于 20 KB。您的头像为 58 KB。真的有那么大的开销吗?
-
使用时区插件我得到大约 200kb,删除时刻对最终构建产生了巨大的影响。
-
刚刚看到 with locales 选项 - 我明白你的意思
-
由于您只对洛杉矶和未来感兴趣,您可以为未来 50 年的标准时间和夏令时创建一个 UTC 偏移量文件,并将其与本地主机一起使用偏移量。
-
我即将发布答案,但您能否准确说明“第二天 24:00”的含义。示例 - 7 月 11 日上午 8:00 在伦敦,洛杉矶将从 10 日过渡到 11 日 - 这是您想要的时间吗?还是洛杉矶从 11 日过渡到 12 日的时候?
标签: javascript date time timezone