2014-10-18 191 views
2

我不得不转换UTC当地时间要求基于用户时区如何将UTC时间转换为本地时间的javascript

我有两个参数:UTC时间和用户的时区作为一个字符串

即 0,1,2,3 ... 12(时区) 0,-1,-2,-3 ...- 12(时区)

var utc = "2014-10-18T06:14:41.512Z" 
tz = 5.5(Indian Standard Time) 

预期结果周六2014年10月18日11点44分:28 GMT + 0530

我已经试过时刻JS

moment("2014-10-18T06:14:41.512Z").zone('+05:30').format('YYYY-MM-DD HH:mm') 

,结果是正确的。

但是,当我的时区切换到其他它没有显示预期的结果 试图

moment("2014-10-18T06:14:41.512Z").zone('+12:00').format('YYYY-MM-DD HH:mm') 

结果“2014年10月18日18:14”预期2014年10月18日19: 18

12是新西兰时区。请帮我解决这个问题。谢谢

回答

2

入住这

var date = new Date('2014-10-19 17:00:34 UTC'); 
date.toString(); 


var timezone = "America/New_York"; 
var utcDate = "2014-10-19T10:31:59.0537721Z"; 

var localDate = moment.utc(utcDate).tz(timezone).format() 

还要检查

http://www.digitoffee.com/programming/get-local-time-utc-using-moment-js/94/

+0

谢谢你,但我在服务器端执行此操作。我有用户在我的手时区,有没有办法在服务器端转换它使用moment.js – Dibish 2014-10-18 06:41:29

+0

@Dibish更新检查是否适合你 – 2014-10-18 07:52:19

+0

谢谢,但我不知道区,即“美国/ New_York”。我只有区域号码5.5,例如+05:30 – Dibish 2014-10-18 08:35:22

1

时区是偏移。偏移量仅为时区的部分。许多时区在两个不同的偏移量之间交替,以计入daylight saving time。时区必须考虑到这一点,包括夏时制开始和结束的具体日期和时间,以及时区可能存在的任何变化历史记录。

你给的新西兰案例就是一个很好的例子。你说“12是新西兰时区”,因此预计从New Zealand is in DST for that date,从UTC 6:14到新西兰当地时间的转换将是19:14。 - 13小时后。

但12并不完全代表新西兰。距UTC仅12小时的距离。还有很多其他时区以不同的方式使用相同的偏移量。例如,元帅岛使用UTC + 12全年,而不是夏令时。

您应该确实阅读the timezone tag wiki - 特别是标题为“时区!=偏移”的部分。

您应该用tz database代表完整IANA标识符代替时区,而不是偏移量。例如,美国东部时间是"America/New_York",印度时间是"Asia/Kolkata",新西兰时间是"Pacific/Auckland"。你可以在the list on Wikipedia找到更多。

您可以使用moment-timezone在JavaScript中使用它们。

moment("2014-10-18T06:14:41.512Z").tz('Pacific/Auckland').format('YYYY-MM-DD HH:mm') 

// Output: "2014-10-18 19:14" 

我还涵盖了非常详细这些主题在我Date and Time Fundamentals课程Pluralsight.com。

+0

所有优点。时区比偏移更多。布里斯班和悉尼的经度相同,但悉尼有DST,布里斯班没有。所以我们全年保持+10,他们在+10和+11之间摆动。 – 2015-12-29 18:24:25

2

要坚持国际标准,您需要格式化您的UTC日期包括time delimiter Tzone designator Z

ž对于ž主任UTC又名ž乌鲁时间偏移的时区标志。 您可以阅读更多关于International Date Standard ISO8601格式的详细信息here

一旦你符合国际标准的跨浏览器友好的方法很简单:

new Date('2014-10-19T17:00:34Z'); 
// Sun Oct 19 2014 12:00:34 GMT-0500 (Central Daylight Time) 
相关问题