2014-02-05 34 views
1

可以肯定,有lotquestionsDateobjectstimezones但很多都是关于当前时间转换到另一个时区,其他人对他们想做什么不是很清楚。获取在任意一天的任意时区时间的本地时间表示 - 考虑到夏令时

我想在任意一天的任意时区显示日,小时,分钟等。例如,我想的函数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年7月1日12:00:00 UTC),将满足下面的比较:

    f(1357041600, "America/Los Angeles") == "2013/07/01 05:00:00" 
    
  • 将ALWA ys的行为就是这样,即使浏览器中的时区是,比如说"Europe/London""America/São Paulo"

  • 将始终以这种方式行事,即使浏览器中的时间是2014/02/05 19:32或2002/08/04 07:12;和

  • ,作为最终的限制,不会(因为我几乎做我自己:))要求从服务器端什么

它甚至有可能?

+0

是可能的。要么找到一个已经这样做的图书馆,很有可能有类似[moments.js](http://momentjs.com/)的内容,或者如果你自己做,请抓住[tz数据库](http://en.wikipedia。 org/wiki/Tz_database)(又名Olson数据库)将数据转换为javascript对象,并将其用作查找函数。 – Xotic750

+0

可能重复的[如何初始化javascript日期到一个特定的时区](http://stackoverflow.com/questions/15141762/how-to-initialize-javascript-date-to-a-particular-timezone) –

+0

请特别看我的在那个dup文章中回答解决这个确切问题的库列表。 –

回答

1

给出时间戳1357041600(其为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) + '/' ... 

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

也有像timezone.js这样的库可以用来确定偏移量,但是我没有使用它们,所以没有暗示背书。

相关问题