我只是写了一小段代码来在网页中显示服务器时间。目前我只有一台机器,所以我无法测试代码是否正常工作。
有没有办法告诉浏览器使用不同于操作系统中配置的时间配置?我已经使用 Firefox 的插件来测试不同的语言环境,我想知道是否有类似的时间测试选项。
谢谢。
为单独的 Chrome 用户配置文件创建一个新的空目录。例如与
mkdir ~/chrome-profile
您指定TZ
环境变量。例如,您可以在TZ 列中查看有效时区。
要启动 Chrome,请使用以下命令:
TZ='US/Pacific' open -na "Google Chrome" --args "--user-data-dir=$HOME/chrome-profile"
TZ='US/Pacific' google-chrome "--user-data-dir=$HOME/chrome-profile"
不幸的是,JavaScript 只知道当前时区,因为它是由操作系统设置的。没有工具可以让Date
对象在特定上下文中使用不同的时区。有一些库可以进行时区转换,但这对您的要求没有帮助。
在 Linux、Mac OSX 和其他 *NIX 系统上,您可以设置TZ
环境变量。有关详细信息,请参阅Benedikt Köppel 的答案。
但是,在 Windows 上没有此功能。 一些Windows 程序可能会使用 TZ 环境变量,但那些不会正确解释它的程序,因为它们没有连接到支持 IANA 时区名称。更多关于这里和这里。
应大众需求(开玩笑!),解释。
谷歌浏览器读取环境变量以获取运行时区。显然所有 Chrome 实例共享该值(未经测试)。为了强制使用时区,我们需要 a) 将环境变量设置为我们想要的时区,b)杀死所有现有的 Chrome 实例,c) 打印当前时区以确认,以及 d) 使用预期的时区启动 Chrome。
下面的 shell 脚本已经过 OS X 测试,但也适用于其他人。
export TZ='US/Pacific'
killall Chrome
date
open /Applications/Google\ Chrome.app
Chrome 似乎会在您在 Windows 中更改其 TimeZone 时立即更新它。Firefox 似乎在启动时存储系统的时区值。
使用 Visual Studio,您似乎可以扭转乾坤。似乎只有在您第一次启动调试过程时才会读取时区。因此,就我而言,我所做的是将 TimeZone 设置为例如东部标准时间。启动 Visual Studio 调试器。然后,我将时区更改为例如太平洋标准时间。此时服务器仍处于东部时区,而我的浏览器处于太平洋时区。现在我能够很好地测试客户端浏览器的行为。
如果您想在日本测试客户端,只需更新您的 TimeZone,浏览器就会跟随它。只要您不重新启动调试过程,您的服务器时区就不会改变。同样只是更改时间(而不是时区)也不起作用。
也许它会帮助某人。您可以使用以下步骤更改 Windows 10 的时区:
Ps 根据@Oscar Acevedo 的评论,这个答案并不完全正确。它适用于测试不同的时区。
老问题,但我有一个类似的问题,无论如何我都会抛出我的修复程序。
我所做的是在虚拟机中运行我的服务器,将网络设置设置为桥接,以便我能够轻松地从我的主机操作系统作为客户端访问服务器。
然后我更改了 VM 中的时间设置,以便在客户端和服务器之间有任何我想要的差异。
这是我尝试更改时区并针对 Windows 7 进行测试的一种简单方法 ^ 我使用tzutil
tzutil /s "Eastern Standard Time"
并将其保存到合适的.bat
文件,例如Eastern_Standard_Time_zone.bat
并使用default_time_zone.bat
您的原始系统时区在完成测试后将其取回。这会在眨眼间改变你的时区。
参考
如果您喜欢重现性,我建议您使用 e2e 环境,即可以自动化浏览器并允许操纵其时区的工具。
这样你就不必摆弄系统时区,你可以添加测试,专门使用不同的时区,即你可以在不同的时区测试你的代码。
两个最新流行的浏览器自动化库Puppeteer和Playwright明确允许设置时区。使用 Playwright,您可以自动为所有主要的常青浏览器(Safari、Firefox 和 Chrome / ChromeEdge)设置时区:
您最好保持计算机时区不变并更改服务器设置以反映您前面或后面的时区。这通常很容易做到,具体取决于您使用的服务器。