如何实现与Scratch完全一致的JavaScript「Days Since 2000」函数?
实现与Scratch一致的「Days Since 2000」函数
你的代码和Scratch结果存在差异的核心原因是时区处理:原代码中new Date(2000, 0, 1)会创建本地时区的2000年1月1日00:00:00对应的UTC时间戳,而Scratch的计算基准是UTC时区的2000年1月1日00:00:00,时区偏移会导致结果偏差。
以下是修正后的代码,完全对齐Scratch的计算逻辑:
function daysSince2000() { // 基于UTC时区创建2000年1月1日00:00:00的基准时间 const utcEpoch = new Date(Date.UTC(2000, 0, 1)); // 计算当前UTC时间戳与基准时间戳的差值,转换为天数(含小数) return (new Date().getTime() - utcEpoch.getTime()) / 86400000; } console.log("Days since 2000: " + daysSince2000());
关键说明
Date.UTC(2000, 0, 1)直接生成UTC时区下2000年1月1日00:00:00的时间戳,以此作为基准点完全匹配Scratch的定义。new Date().getTime()返回的是当前时间的UTC毫秒数,确保时间差计算基于UTC时区,消除本地时区的影响。
内容的提问来源于stack exchange,提问作者JaecadeJnight
相关产品推荐
相关产品推荐

