【问题标题】:How to use a custom time in browser to test for client vs server time difference如何在浏览器中使用自定义时间来测试客户端与服务器的时间差
【发布时间】:2026-02-21 01:30:02
【问题描述】:

我刚刚写了一小段代码来显示网页中的服务器时间。目前我只有一台机器,所以我无法测试代码是否正常工作。

有没有办法告诉浏览器使用不同于操作系统中配置的时间配置?我已经使用 Firefox 的插件来测试不同的语言环境,不知道是否有类似的时间测试选项。

谢谢。

【问题讨论】:

标签: browser timezone


【解决方案1】:

为单独的 Chrome 用户配置文件创建一个新的空目录。例如。与

mkdir ~/chrome-profile

您指定TZ 环境变量。您可以在 TZ 列中查看有效时区,例如 here

要启动 Chrome,请使用以下命令:

  • 对于 Mac OS X:TZ='US/Pacific' open -na "Google Chrome" --args "--user-data-dir=$HOME/chrome-profile"
  • 对于 Linux:TZ='US/Pacific' google-chrome "--user-data-dir=$HOME/chrome-profile"

【讨论】:

  • 对我来说,在 Mac OSX 上,必须输入完整路径而不是 ~/chrome-profile 快捷方式,但除此之外效果很好!这应该是公认的答案...
  • 太棒了!谢谢你。此外,我重命名了 chrome-profile 目录,以便为我的需要提供更具体的名称。
  • 解决核心问题的绝佳答案,并且不需要更改操作系统时区。而且,是的,这应该是公认的答案,因为它可以使用 Chrome 进行测试以解决 OP 的问题。
  • 镀铬配置文件部分对我来说不是必需的。我只是在 macos 上运行TZ='US/Pacific' open -na "Google Chrome" --args。完美运行
  • 如何在 Windows 上执行此操作?
【解决方案2】:

不幸的是,JavaScript 只知道当前时区,因为它是由操作系统设置的。没有工具可以让Date 对象在特定上下文中使用不同的时区。有some libraries 可以进行时区转换,但这对您的要求没有帮助。

在 Linux、Mac OSX 和其他 *NIX 系统上,您可以设置 TZ 环境变量。详情请见Benedikt Köppel's answer

但是,Windows 上没有此功能。 一些 Windows 程序可能会使用 TZ 环境变量,但那些这样做的程序不一定会正确解释它,因为它们没有连接到支持 IANA 时区名称。更多关于 herehere.

【讨论】:

  • 感谢您的回答。我正在使用 PHP。我不知道完整的要求,我的一个朋友让我帮助他展示它。
  • Chrome 45 现在会立即更新时区,但 Firefox 40 仍然没有.. 我希望永远不会改变,否则我们就完蛋了!愚蠢的时区!开发者的瘟疫..
  • @Pacerier 不再。 Chrome 将立即检测您操作系统的时区设置。示例:在控制台中,输入new Date()。更改您的时区。再次在控制台输入new Date()。每个日期都会显示您在更改之前和之后设置的任何时区。
【解决方案3】:

应大众需求(开玩笑!),解释。

Google Chrome 读取环境变量以获取其运行所在的时区。显然所有 Chrome 实例共享该值(未经测试)。为了强制一个时区,我们需要 a) 将环境变量设置为我们想要的时区,b) 杀死所有现有的 Chrome 实例,c) 打印当前时区以确认,以及 d)使用预期的时区启动 Chrome。

以下 shell 脚本已在 OS X 上测试过,但也适用于其他人。

export TZ='US/Pacific'

killall Chrome
date
open /Applications/Google\ Chrome.app

【讨论】:

  • 虽然此代码示例可能会回答这个问题,但最好在您的回答中包含一些基本解释。就目前而言,这个答案对未来的读者几乎没有价值。
  • killall 是危险的家伙。我将编辑答案以添加一些警告。
  • @Pacerier so killallin bold 会解释为什么它很危险,甚至警告人们它很危险......?
【解决方案4】:

Chrome 似乎会在您在 Windows 中更改其 TimeZone 时立即更新它。 Firefox 似乎在启动时存储了系统的时区值。

使用 Visual Studio,您似乎可以扭转乾坤。似乎只有在您第一次启动调试过程时才会读取时区。因此,就我而言,我所做的是将 TimeZone 设置为例如东部标准时间。启动 Visual Studio 调试器。然后,我将时区更改为例如太平洋标准时间。此时服务器仍处于东部时区,而我的浏览器处于太平洋时区。现在我可以很好地测试客户端浏览器的行为了。

如果您想在日本测试客户端,只需更新您的 TimeZone,浏览器就会跟随它。 只要您不重新启动调试过程,您的服务器时区就不会改变。此外只是更改时间(而不是时区)也不起作用。

【讨论】:

    【解决方案5】:

    您无需更改操作系统变量或扩展即可在 2021 年执行此操作。

    Chrome 开发工具 > 汉堡菜单 > 更多工具 > 传感器

    在“位置”部分选择您的位置或为其指定时区 ID(例如 America/Chicago、America/New_York)

    【讨论】:

      【解决方案6】:

      有很多时区扩展可用于在浏览器级别进行欺骗。我目前正在使用

      添加扩展的点击选项并检查后

      完成后,转到任何网站并打开开发人员工具并通过执行以下命令进行检查

      new Date().toLocaleTimeString()
      

      【讨论】:

      • 只是为了补充您的答案,如果您使用的是 VPN,那么您可以从 IP 获取时区。
      【解决方案7】:

      老问题,但我遇到了类似的问题,无论如何我都会解决问题。

      我所做的是在虚拟机中运行我的服务器,将网络设置设置为桥接,这样我就可以轻松地从我的主机操作系统作为客户端访问服务器。

      然后我更改了 VM 中的时间设置,以便在客户端和服务器之间有任何我想要的差异。

      【讨论】:

        【解决方案8】:

        也许它会帮助某人。您可以使用以下步骤更改 Windows 10 的时区:

        1. 打开设置。
        2. 点击时间和语言。
        3. 点击日期和时间。
        4. 根据需要更改时区。

        附:根据@Oscar Acevedo 的评论,这个答案并不完全正确。适合测试不同时区。

        【讨论】:

        • 他需要看到环境服务器和客户端之间的区别,因为他在同一台电脑上测试它,所以如果他按照你所说的,两者都会改变(这不是他所期望的)
        • 是的,你是对的。我错误地理解了这个问题。我需要模仿应用在不同时区的工作,所以我使用了这种方法。
        【解决方案9】:

        这是我尝试更改时区并针对 Windows 7 进行测试的一种简单方法 ^ 我用tzutil

        tzutil /s "Eastern Standard Time" 并将其保存到合适的.bat 文件,例如Eastern_Standard_Time_zone.bat 并使用default_time_zone.bat 在您的原始系统时区中完成测试后将其取回。这会在眨眼间改变你的时区。 reference

        【讨论】:

          【解决方案10】:

          如果您喜欢再现性,我建议您使用 e2e 环境,即可以自动化浏览器并允许操纵其时区的工具。

          这样您就不必摆弄系统时区,并且可以添加测试,专门使用不同的时区,即您可以在不同的时区测试您的代码。

          两个最新流行的浏览器自动化库PuppeteerPlaywright 明确允许设置时区。使用 Playwright,您可以自动为所有主要 evergreen 浏览器(Safari、Firefox 和 Chrome / ChromeEdge)设置时区:

          【讨论】:

            【解决方案11】:

            您最好保持计算机时区不变并更改服务器设置以反映您前面或后面的时区。这通常很容易做到,具体取决于您使用的服务器。

            【讨论】:

            • 日期时间应该以 UTC 格式存储,改变在真实服务器上测试 web 应用程序的想法是一个坏主意(甚至让系统时区影响日期持久性或您的应用程序)。真的希望你的意思是你的“本地开发服务器”。
            最近更新 更多