JavaScript:将UTC日期时间转换为传递时区的日期时间

时间:2016-03-03 21:37:47

标签: javascript date datetime datetime-format datetimeoffset

我正在寻找一个javascript函数将UTC日期时间转换为传递时区的日期时间格式。我必须根据用户的位置传递时区。我不被允许使用任何日期库。

我的UTC日期时间字符串:"2016-04-10 09:00:00.0"

传递时区:EST

预期输出1:"April 10,2016"

预期输出2:04 AM EST

您能否就Js功能提供一些见解以实现我的要求?

P.S:我不能使用任何第三方日期库来完成这项工作。

2 个答案:

答案 0 :(得分:0)

您可以创建如下功能,将UTC时间转换为给定的时区偏移量:

//function to calculate local time
function calcTime(datestring, city, offset) {

  d = new Date(datestring);

  utc = d.getTime() + (d.getTimezoneOffset() * 60000);

  nd = new Date(utc + (3600000 * offset));

  var options = {}
    // an application may want to use UTC and make that visible
  options.timeZone = 'America/' + city;
  options.timeZoneName = 'short';

  return nd.toLocaleString('en', options)


}


document.write('Local time on server: 2016-04-10T09:00:00' + '<br>')
document.write('Local time in EST/EDT:' + calcTime('2016-04-10T09:00:00', 'New_York', '-5.0'));

如果您只需支持美国的不同时区,您可以创建一个与时区偏移相匹配的查找表到正确的城市

Eastern ........... America/New_York
Central ........... America/Chicago
Mountain .......... America/Denver
Mountain no DST ... America/Phoenix
Pacific ........... America/Los_Angeles
Alaska ............ America/Anchorage
Hawaii ............ America/Adak
Hawaii no DST ..... Pacific/Honolulu

正如您所看到的,逻辑很快变得复杂,因此最好尽可能使用外部库。

答案 1 :(得分:0)

我使用这个时间管理,尝试也许你正在寻找这个

Moment.js