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

Posted

技术标签:

【中文标题】JavaScript:将 UTC 日期时间转换为传递时区的日期时间【英文标题】:JavaScript : Convert the UTC datetime to passing timezone's datetime 【发布时间】:2016-06-17 10:49:14 【问题描述】:

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

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

经过时区:EST

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

预期输出2:04 AM EST

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

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

【问题讨论】:

您应该展示您尝试过的内容,这不是免费的编码服务。如果这是家庭作业或作业,你应该这样说。您的字符串不符合任何标准,您需要手动解析它(2行代码)。调整到特定时区只需将时间修改适当的量。这里有很多关于如何做到这一点的问题和答案。搜索,尝试一些东西,如果不起作用,请重新发布。 【参考方案1】:

您可以创建如下函数来将 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

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

【讨论】:

我收到无效日期作为响应 我已经修复了 IE,Chrome 似乎对日期格式更宽松 有没有办法,当您将偏移量传递为 -5 时,可以动态地将时区字符串填充为 EST? 输出中的 4.00 AM EST 我已经修改了函数,让它接受一个城市(例如纽约)。这将允许您打印时区。【参考方案2】:

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

Moment.js

【讨论】:

这不是答案,应该是评论。 OP 还声明不能使用库。 好吧,对不起,我想别的事

以上是关于JavaScript:将 UTC 日期时间转换为传递时区的日期时间的主要内容,如果未能解决你的问题,请参考以下文章

如何将JavaScript日期转换为UTC?

无法在JavaScript中将String BST日期格式转换为UTC

javascript 不能正确地将 angular ui datepicker 日期转换为 UTC

将我的 javascript 日期时间从 PST 转换为 UTC

通过 Ajax 将 Javascript 日期转换为 C#

Javascript - 将 ISO8601 UTC 时间转换为客户端的本地时间 [重复]