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

如何让程序根据时间显示对应文本?排查代码仅显示最后一行的问题

问题分析与修复方案

先点明你代码里的几个核心问题:

  • 语法不完整:if语句没写闭合的},函数M也缺结尾的},这会直接导致代码执行异常。
  • DOM方法错误:不存在document.getElementByTag这个方法,正确写法是document.getElementsByTagName,而且它返回的是所有p标签的集合,必须指定具体元素(比如第一个p标签用[0])。
  • 时间比较逻辑错了:Date()返回的是带日期的完整字符串(比如Wed Oct 11 2024 14:30:00 GMT+0800),直接和"8:00:00"比是字符串字典序,完全不具备时间对比的意义,得提取当前时间的时分秒来做对比。
  • 定时器滥用:I和M互相递归调用setTimeout,1ms的间隔太耗性能,用setInterval每秒更新一次就足够。

修正后的完整代码

<div id="time"></div>
<p></p>

<script>
function updateTime() {
    // 更新当前时间显示
    const now = new Date();
    document.getElementById("time").textContent = now.toString();

    // 把当前时间格式化为HH:mm:ss的字符串
    const currentTimeStr = `${now.getHours().toString().padStart(2, '0')}:${now.getMinutes().toString().padStart(2, '0')}:${now.getSeconds().toString().padStart(2, '0')}`;
    const targetTime = "08:00:00"; // 补前导零,保证格式一致

    // 获取页面第一个p标签
    const pElement = document.getElementsByTagName("p")[0];
    if (currentTimeStr > targetTime) {
        pElement.textContent = "Hello!";
    } else {
        pElement.textContent = "还没到8点哦~"; // 加个默认文本避免空白
    }
}

// 每秒执行一次更新
setInterval(updateTime, 1000);
// 页面加载时先执行一次,不用等1秒才显示内容
updateTime();
</script>

关键修复说明

  • 用new Date()创建日期对象,方便提取时分秒,并用padStart(2, '0')保证时分秒都是两位(比如8点转为08:00:00),这样字符串对比才能准确反映时间先后。
  • 用textContent代替innerHTML,纯文本场景下更安全高效。
  • 改用setInterval定时执行逻辑,避免递归setTimeout的性能浪费。
  • 补全所有语法结构,确保代码能正常解析运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:32:48