You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:使用JavaScript在HTML中显示巴西实时时钟报错

帮你调试巴西时间显示的JS代码

嘿,我来帮你搞定这个问题!你遇到的TypeError: x.getMonth is not a function错误,原因很简单:你用new Date().toLocaleString(...)得到的x是一个字符串,而不是Date对象——字符串当然没有getMonth()这类Date专属方法啦😅。

问题出在哪?

原代码里这一行:

var x = new Date().toLocaleString("en-US", {timeZone: "America/Sao_Paulo"});

toLocaleString()会直接返回格式化好的时间字符串(比如"10/5/2024, 3:45:22 PM"),你之后试图用x.getMonth()去操作这个字符串,肯定会触发报错。

修复方案

我们需要先保留原始的Date对象,再从这个对象里提取巴西时区对应的年月日时分秒,最后自己拼接成想要的格式:

<head>
  <script>
    function display_c() {
      var refresh = 1000; // 刷新间隔(毫秒)
      mytime = setTimeout(display_ct, refresh); // 直接传函数引用,比字符串包裹更规范
    }

    function display_ct() {
      // 1. 创建基础Date对象,后续基于它获取巴西时区的时间组件
      var brDate = new Date();
      
      // 2. 分别获取巴西时区的各时间部分,保证两位数格式
      var month = brDate.toLocaleString("en-US", { timeZone: "America/Sao_Paulo", month: "2-digit" });
      var day = brDate.toLocaleString("en-US", { timeZone: "America/Sao_Paulo", day: "2-digit" });
      var year = brDate.toLocaleString("en-US", { timeZone: "America/Sao_Paulo", year: "numeric" });
      var hours = brDate.toLocaleString("en-US", { timeZone: "America/Sao_Paulo", hour: "2-digit", hour12: false });
      var minutes = brDate.toLocaleString("en-US", { timeZone: "America/Sao_Paulo", minute: "2-digit" });
      var seconds = brDate.toLocaleString("en-US", { timeZone: "America/Sao_Paulo", second: "2-digit" });

      // 3. 拼接成目标格式
      var displayStr = `${month}/${day}/${year} - ${hours}:${minutes}:${seconds}`;
      document.getElementById('ct').innerHTML = displayStr;

      // 4. 设置下一次刷新
      display_c();
    }
  </script>
</head>
<body onload="display_ct();">
  <span id='ct'></span>
</body>

额外优化点

  • 替换了过时的getYear()方法,用toLocaleString获取完整年份,避免出现年份显示错误(比如2024年用getYear()会返回124)
  • 用2-digit参数保证月份、日期、时分秒都是两位数格式(比如1月显示为01)
  • 去掉了函数调用的字符串包裹写法,避免潜在的作用域问题
  • 用模板字符串拼接格式,可读性更强

现在运行这段代码,就能在任何访问位置都显示正确的巴西时间啦!

内容的提问来源于stack exchange,提问作者user8762292

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:12:35