【发布时间】:2021-11-05 08:41:38
【问题描述】:
我编写了一个基本函数,用于获取时间戳,用于记录每个访问者点击页面的时间。我实际上想以两种方式记录时间;本地时间(这样我可以看到基于用户时间的访问分布)以及 UTC 时间(这样我可以从全局、标准化的角度查看访问分布)
var currentTime = new Date();
var timestamp = splitTimestamp(currentTime);
function splitTimestamp(timestamp) {
var splitTimestamp = {};
splitTimestamp.local = new Date(timestamp.getFullYear(), timestamp.getMonth(), timestamp.getDate(), timestamp.getHours(), timestamp.getMinutes(), timestamp.getSeconds()).toISOString();
splitTimestamp.UTC = new Date(timestamp.getUTCFullYear(), timestamp.getUTCMonth(), timestamp.getUTCDate(), timestamp.getUTCHours(), timestamp.getUTCMinutes(), timestamp.getUTCSeconds()).toISOString();
return splitTimestamp;
}
我的想法是我可以根据需要通过timestamp.local 或timestamp.UTC 引用每个。
我曾假设通过new Date() 得出的本地时间只是浏览器的本地时间,即根据用户的本地系统/操作系统。然而,我看到了一些似乎与此相矛盾的记录。例如,我从纽约 (UTC+4) 的用户那里找到了一条时间尚未出现的记录(即,当我看到该记录时,它是美国东部标准时间上午 11 点/世界标准时间下午 3 点,但它显示为美国东部标准时间下午 2 点/世界标准时间下午 6 点日志)
现在 - 最初,我解释说用户可能只是在使用不一定与他们的实际位置一致的系统设置(即他们在纽约,但出于只有他们自己知道的原因,他们保留了他们的UTC时间的系统/操作系统)我对此无能为力,我对此感到满意。
但是...如果是这样的话,那么本地时间和UTC时间会是相同吗?而且......他们不是。所以......这不可能是发生了什么?
我在这里忽略了什么明显的东西吗?
【问题讨论】:
-
是的,用户的时钟已关闭。用户可能在纽约,但他们的本地区域设置设置为另一个区域。您可以将用户的区域保存在存储中并根据他们分配给自己的位置进行计算吗?
-
toISOString 是 总是 在 UTC 中。字符串末尾的 z 表示 UTC 时间。你到底想做什么?
-
时间戳通常总是 UTC...为什么不保存时间戳然后也保存 UTC 偏移量,这样您就可以从另一个计算一个..
-
我正在尝试填充两个日期变量。一个代表本地时区。一个代表 UTC 时区。我没有意识到 toISOString 本质上是 UTC - 但是,查看代码,它真的重要吗?我只是使用它,以便我以日志可以识别的格式(SharePoint)获得时间戳
-
@Iwrestledabearonce.—timestamps 不是“一般......总是UTC”。时间戳是任何字符序列,用于标识某个时刻并在 UTC 之前存在。
标签: javascript datetime utc