javascript - 在任意一天的任意时区获取日期的本地时间表示 - 考虑夏令时

标签 javascript date timezone dst

当然,有一个 lotquestions关于Date objectstimezones但他们中的许多人都是关于将当前时间转换为另一个时区,而其他人则不太清楚他们想做什么。

我想在任意一天的任意时区显示日期、小时、分钟等。例如,我想要一个函数 f(t, s) :

  • 给定时间戳 1357041600(即 2013/1/1 12:00:00 UTC)和字符串 "America/Los Angeles",将满足以下比较:

    f(1357041600, "America/Los Angeles") == "2013/01/01 04:00:00"
    
  • 给定时间戳 1372680000 (2013/07/01 12:00:00 UTC),将满足以下比较:

    f(1357041600, "America/Los Angeles") == "2013/07/01 05:00:00"
    
  • 即使浏览器中的时区是“Europe/London”“America/São Paulo”,也会始终如此。

  • 即使浏览器中的时间是 2014/02/05 19:32 或 2002/08/04 07:12,也会始终如此;和

  • 作为最后的限制,不会从服务器端请求任何东西(因为我几乎是自己做的:))

有可能吗?

最佳答案

given the timestamp 1357041600 (which is 2013/1/1 12:00:00 UTC)

这似乎是自 UNIX 纪元 (1970-01-01T00:00:00Z) 以来的秒数。 Javascript 使用相同的纪元,但以毫秒为单位,因此可以创建合适的日期对象:

var d = new Date(timestamp * 1000);

这将创建一个具有合适时间值的 Date 对象。然后您需要使用 IANA time zone database 之类的东西来确定时区偏移量.可以使用 UTC 方法将其应用于 Date 对象。例如。将偏移量解析为分钟,然后使用:

d.setUTCMinutes(d.getUTCMinutes() + offset)

然后可以使用 UTC 方法获取调整后的日期和时间值,以创建您需要的任何格式的字符串:

var dateString = d.getUTCFullYear() + '/' + pad(d.getUTCMonth() + 1) + '/' ...

其中 pad 是一个将前导零添加到单个数字值的函数。使用 UTC 方法可避免本地时区偏移和夏令时差异的任何影响。

还有像timezone.js这样的库可用于确定偏移量,但我没有使用它们,因此不暗示任何背书。

关于javascript - 在任意一天的任意时区获取日期的本地时间表示 - 考虑夏令时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21590465/

相关文章:

javascript - 使用JS更改段落文本

xcode swift 单元格detailTextLabel.text?。颜色取自日期

python 和 django 时区不匹配

java - JodaTime:获取与 utc 相比具有偏移 xyz 的 DateTimeZone

python - 使用 strptime() 解析日期/时间字符串时如何保留时区?

javascript - 根据数据库值更改记录的颜色,extjs4.2

javascript - 本地磁盘上的图像未加载到 Tomcat 项目配置中

javascript - 如何检测访问者是否仍在网站上(轮询除外)?

swift - 日期格式 ( "yyyy-MM-dd HH:mm:ss VV") 返回 nil

javascript - 将momentjs中的年份格式更改为佛教纪元