Javascript 使用JS和浏览器支持转换过去的日期时间 toLocaleString()已被弃用,但似乎缺少替代品

Javascript 使用JS和浏览器支持转换过去的日期时间 toLocaleString()已被弃用,但似乎缺少替代品,javascript,datetime,timezone,Javascript,Datetime,Timezone,我有一个网站,在那里我以以下格式存储成员发布日期:YYYY-MM-DD HH:MM:SS 问题是这些日期都存储在UTC时区中,我想使用JS将这些日期转换为用户操作系统时区。我知道我可以要求用户输入他们的时区,但我想尝试一些新的东西,它需要尽可能少的用户交互。该网站的目标是打造一个使用起来极其简单和直接的论坛 我几乎让它以我想要的方式工作,但目前它似乎只支持Chrome。这还不够好,因为我计划有很多用户 由于时区偏移量不同,因此仅检索当前时间偏移量是不够的,这里的许多主题似乎都建议这样做。我想准确

我有一个网站,在那里我以以下格式存储成员发布日期:YYYY-MM-DD HH:MM:SS

问题是这些日期都存储在UTC时区中,我想使用JS将这些日期转换为用户操作系统时区。我知道我可以要求用户输入他们的时区,但我想尝试一些新的东西,它需要尽可能少的用户交互。该网站的目标是打造一个使用起来极其简单和直接的论坛

我几乎让它以我想要的方式工作,但目前它似乎只支持Chrome。这还不够好,因为我计划有很多用户

由于时区偏移量不同,因此仅检索当前时间偏移量是不够的,这里的许多主题似乎都建议这样做。我想准确显示注册日期等信息

这是我目前的解决方案(据我所知,时区测试仅支持chrome),它也在整个测试版网站上实施。


下面是源代码

var d = new Date();
var tzName = d.toLocaleString('en', {timeZoneName:'short'}).split('').pop();

var cusid_ele = document.getElementsByClassName('timestamp');
for (var i = 0; i < cusid_ele.length; ++i) {
  var timestamp = cusid_ele[i];  
  timestamp.innerHTML += " "+tzName;
  t = new Date(timestamp.innerHTML);
  usertime = t.toLocaleString()
  timestamp.innerHTML = usertime;
}
var d=新日期();
var tzName=d.tolocalString('en',{timeZoneName:'short'}).split(''.pop();
var cusid_ele=document.getElementsByClassName('timestamp');
对于(变量i=0;i
我已经使用这个网站多年没有问过,但这次我似乎找不到一个足够类似我的主题

我使用的方法可能有疑问,它只是替换指定类名中的对象。我计划为其他格式输出编写其他类

<p>Register date: <span class="timestamp">2016-01-31 20:12:55</span></p>
注册日期:2016-01-31 20:12:55


如果你能解决这个问题,我将非常感激。我不是专业人士,也从来没有上过任何课程,但我已经成功地自己制作了Insan.net。帮助一个谦逊的学生走出困境;)

如果您所做的只是从UTC转换到浏览器的本地时区,那么您不需要实际尝试确定这是什么时区。只需确保您的输入明确标识为UTC,
Date
对象的默认行为是在浏览器的本地时区中显示值

var input = "2016-01-31 20:12:55";
var d = new Date(input + " UTC");
var s = d.toString();
结果字符串将因实现和时区而异,例如(几个示例):

这将适用于所有浏览器。唯一的问题是您无法控制输出字符串的格式。这就是
toLocaleString
可以提供帮助的地方,尽管正如您所指出的,它不一定在所有浏览器中都实现。然而,您似乎认为它已被弃用,而事实并非如此。它实际上是一个较新规范(ECMA-402)的一部分,只是还没有在任何地方广泛实现

不过你还有其他选择。您可以自己构建输出字符串,如下所示:

var z = function(x) {return x < 10 ? '0' + x : x};
var s = d.getFullYear() + '-' + z(d.getMonth() + 1) + '-' + z(d.getDate()) + ' '
      + z(d.getHours()) + ':' + z(d.getMinutes()) + ':' + z(d.getSeconds());

如果您所做的只是从UTC转换到浏览器的本地时区,那么您不需要实际尝试确定这是什么时区。只需确保您的输入明确标识为UTC,
Date
对象的默认行为是在浏览器的本地时区中显示值

var input = "2016-01-31 20:12:55";
var d = new Date(input + " UTC");
var s = d.toString();
结果字符串将因实现和时区而异,例如(几个示例):

这将适用于所有浏览器。唯一的问题是您无法控制输出字符串的格式。这就是
toLocaleString
可以提供帮助的地方,尽管正如您所指出的,它不一定在所有浏览器中都实现。然而,您似乎认为它已被弃用,而事实并非如此。它实际上是一个较新规范(ECMA-402)的一部分,只是还没有在任何地方广泛实现

不过你还有其他选择。您可以自己构建输出字符串,如下所示:

var z = function(x) {return x < 10 ? '0' + x : x};
var s = d.getFullYear() + '-' + z(d.getMonth() + 1) + '-' + z(d.getDate()) + ' '
      + z(d.getHours()) + ':' + z(d.getMinutes()) + ':' + z(d.getSeconds());

您试图实现的目标不是很清楚,但是像javascript库这样的库可能有助于解决时区问题。您试图实现的目标不是很清楚,但是像javascript库这样的库可能有助于解决时区问题。