将UTC日期时间转换为本地日期时间

IT技术 javascript jquery datetime timezone utc
2021-01-15 09:29:13

我从服务器得到一个这种格式的日期时间变量:6/29/2011 4:52:48 PM它是 UTC 时间。我想使用 JavaScript 将其转换为当前用户的浏览器时区。

如何使用 JavaScript 或 jQuery 做到这一点?

6个回答

在将字符串转换为 javascript 中的日期之前,将“UTC”附加到字符串中:

var date = new Date('6/29/2011 4:52:48 PM UTC');
date.toString() // "Wed Jun 29 2011 09:52:48 GMT-0700 (PDT)"
函数 localizeDateStr (date_to_convert_str) { var date_to_convert = new Date(date_to_convert_str); var local_date = new Date(); date_to_convert.setHours(date_to_convert.getHours()+local_date.getTimezoneOffset()); 返回 date_to_convert.toString(); }
2021-03-27 09:29:13
@digitalbath 适用于 Chrome,但不适用于 Firefox。
2021-03-28 09:29:13
这假设字符串的日期部分遵循美国标准,mm/dd/YYYY,这在欧洲和世界其他地方显然不是这种情况。
2021-04-01 09:29:13
@matt offSet 返回分钟,而不是小时,你需要除以 60
2021-04-04 09:29:13

在我看来,服务器在一般情况下应该总是以标准化的 ISO 8601 格式返回日期时间

更多信息在这里:

在这种情况下,服务器将返回'2011-06-29T16:52:48.000Z',这将直接提供给 JS 日期对象。

var utcDate = '2011-06-29T16:52:48.000Z';  // ISO-8601 formatted date returned from server
var localDate = new Date(utcDate);

localDate会在正确的本地时间这在我的情况下,将在两个小时后(DK时间)。

真的不必进行所有这些只会使事情复杂化的解析,只要您与服务器期望的格式一致即可。

出于某种原因,将 UTC 附加到我的时间戳不起作用。但是附加了一个“z”。
2021-03-10 09:29:13
如何获取iso格式日期?我正在以 UTC 格式获取日期,并在末尾附加 UTC
2021-03-24 09:29:13
@Chaster johnson,不错的收获。我正在使用 Python 的 datetime.isoformat() 将一些日期时间信息发送到我的 js 前端并添加“Z”所有内容。检查 isoformat 源,他们没有添加“Z”的选项。我手动将“Z”添加到 isoformat 输出的末尾。stackoverflow.com/questions/19654578/...
2021-03-25 09:29:13
@Colin 这取决于语言。在 C# 中,您可以格式化一个返回 ISO-8601 格式字符串DateTime对象,.toString("o")如上所示。msdn.microsoft.com/en-us/library/zdtaw1bw(v=vs.110).aspx在 javascript 中,它是new Date().toISOString(). developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
2021-03-26 09:29:13

这是一个通用的解决方案:

function convertUTCDateToLocalDate(date) {
    var newDate = new Date(date.getTime()+date.getTimezoneOffset()*60*1000);

    var offset = date.getTimezoneOffset() / 60;
    var hours = date.getHours();

    newDate.setHours(hours - offset);

    return newDate;   
}

用法:

var date = convertUTCDateToLocalDate(new Date(date_string_you_received));

根据客户端本地设置显示日期:

date.toLocaleString();
当时区转换跨越午夜时,这似乎也没有正确设置日期;可能是因为它只使用不影响日期的 setHours ?
2021-03-12 09:29:13
很确定这不可能适用于 30 分钟以外的任何时区?它似乎四舍五入到整小时。
2021-03-15 09:29:13
newDate.setMinutes(date.getMinutes() - date.getTimezoneOffset()) 就足够了。在正确的时间以及
2021-03-22 09:29:13
不适用于所有时区。getTimeZoneOffset 在几分钟内是有充分理由的!geographylists.com/list20d.html
2021-03-30 09:29:13
@siukurnin。所以要管理奇怪的时区,请使用 newDate.setTime(date.getTime()+date.getTimezoneOffset()*60*1000)
2021-04-05 09:29:13

对我来说,上述解决方案不起作用。

使用 IE 将 UTC 日期时间转换为本地是有点棘手的。对我来说,来自 Web API 的日期时间是'2018-02-15T05:37:26.007',我想根据本地时区进行转换,所以我在 JavaScript 中使用了以下代码。

var createdDateTime = new Date('2018-02-15T05:37:26.007' + 'Z');
@Kumaresan,是的,它是最好的解决方案,即使评分很低,也适用于 Firefox 和 Chromium
2021-03-16 09:29:13
在 PostgreSQL 中使用 java 存储 DateTime 的最佳方法是什么?为了克服这个问题。请告诉我..
2021-04-02 09:29:13

您应该获得客户端的 (UTC) 偏移量(以分钟为单位):

var offset = new Date().getTimezoneOffset();

然后对您从服务器获得的时间进行相应的加法或减法。

希望这可以帮助。

夏令时呢?
2021-04-03 09:29:13