gpt4 book ai didi

javascript - 使用 JS 在浏览器支持下转换过去的日期时间

转载 作者:行者123 更新时间:2023-11-28 06:26:10 25 4
gpt4 key购买 nike

toLocaleString() 已弃用,但似乎缺乏替代

<小时/>

我有一个网站,以这种格式存储成员(member)发布日期:YYYY-MM-DD HH:MM:SS

问题是这些日期都以 UTC 时区存储,我想使用 JS 将这些日期转换为用户操作系统时区。我知道我可以要求用户输入他们的时区,但我想尝试一些新的东西,需要尽可能少的用户交互。该网站的目标是创建一个非常简单易用的论坛。

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

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

这是我当前的解决方案(据我所知,时区测试仅支持 chrome)它也在整个测试版网站上实现。
https://ingsan.net/timezone/

源代码如下

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;
}

我已经使用这个网站很多年了,但这次我似乎无法找到与我的主题足够相似的主题。

我使用的方法可能有问题,只是替换指定类名中的对象。我计划为其他格式输出做其他类(class)。

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

如果您能解决这个问题,我将非常感激。我不是专业人士,也从未上过任何类(class),但我自己成功创建了 ingsan.net。帮助一个谦虚的学生摆脱困境;)

最佳答案

如果您所做的只是从 UTC 转换为浏览器的本地时区,则无需实际尝试弄清楚那是什么时区。只需确保您的输入明确标识为 UTC,并且 Date 对象的默认行为是显示浏览器本地时区的值。

var input = "2016-01-31 20:12:55";
var d = new Date(input + " UTC");
var s = d.toString();

生成的字符串将因实现和时区而异,例如(一些示例):

"Sun Jan 31 2016 12:12:55 GMT-0800 (Pacific Standard Time)"
"Sun Jan 31 2016 15:12:55 GMT-0500 (Eastern Standard Time)"
"Mon Feb 01 2016 01:42:55 GMT+0530 (India Standard Time)"
"Mon Feb 01 2016 09:12:55 GMT+1300 (New Zealand Daylight Time)"

这适用于所有浏览器。唯一的问题是您无法控制输出字符串的格式。这就是 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());

当然,您可以弄清楚如何调整为 12 小时格式、使用不同的分隔符、不同的日期字段排序(YMD、DMY 和 MDY)等。

或者,您可以只使用一个库,例如 moment.js已经为此做好了准备。

var input = "2016-01-31 20:12:55";
var m = moment.utc(input).local(); // parse as UTC, then switch to local mode
var s = m.format(); // use any of the format parameters you wish

关于javascript - 使用 JS 在浏览器支持下转换过去的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35118724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com