我想在周一@太平洋标准时间午夜结束倒计时。我以为我一周前工作了,但显然没有。
我正在使用date.js
var monday = Date.today().next().monday();
var UTCmonday = new Date(monday.getTime() + monday.getTimezoneOffset() * 60000);
var PSTmonday = new Date(UTCmonday.setHours(UTCmonday.getHours() + 9));
$('#defaultCountdown').countdown({until: UTCmonday});
我认为问题在于确定UTC时间?我对吗?我该如何解决这个问题?
答案 0 :(得分:1)
假设您有太平洋标准时间,那么您需要记住PST === UTC-8
因此,你的第三行将是
var PSTmonday = new Date(UTCmonday.setHours(UTCmonday.getHours() - 8));
问题在于,如果UTC早于早上8点,则会失败,因为您无法将负数传递到setHours
。
由于您使用的是Datejs,为什么不使用其全部功能来更改时区?
http://code.google.com/p/datejs/wiki/APIDocumentation#setTimezone
答案 1 :(得分:0)
在PST中严格控制时间没有多大意义,因为在太平洋时区没有观察到PST的近半年。在冬季观察到PST(UTC-8),在夏季观察到PDT(UTC-7)。您不能将太平洋时间仅仅表示为固定偏移量,除非它恰好是您自己的本地时区,否则您无法在没有时区数据库的情况下轻松确定它们之间的转换。请参阅the timezone tag wiki。
此外,date.js has been abandoned。我不推荐任何继续使用它的解决方案。对Dancrumb建议的setTimezone
方法的支持是针对特定文化的,并且它仍然没有考虑夏令时。
相反,我建议您尝试moment.js。您可以使用moment-timezone插件来处理America/Los_Angeles
区域 - 这是美国太平洋时间的一个很好的范例。确保您的moment-timezone-data.js
文件至少包含此区域。然后,您可以执行以下操作:
var m = moment().tz('America/Los_Angeles').day(7).startOf('day');
var s = m.toISOString(); // if you need a string output representing UTC
var dt = m.toDate(); // if you need an actual JavaScript Date object
让我们稍微打破一下:
moment()
为您提供当前时间tz('America/Los_Angeles')
调整您感兴趣的时区的时间。day(7)
将时间提前到 next 星期一。startOf('day')
将时间缩短到午夜。