如何编写JavaScript函数判断文件是否符合最近9点更新要求?
解决JavaScript文件修改时间判断的问题
我明白你遇到的问题了——你的函数在当前时间早于上午9点时,会错误地用当天的9点作为比较基准,而不是我们需要的前一天的9点,这就导致第一个场景返回了错误的结果。
问题分析
原代码里的d.setHours(9)不管当前时间是几点,都会把日期设置成当天的9点。比如当前是1月2日8:30,这个方法得到的是1月2日9:00,而文件修改时间是1月1日9:30,自然比这个时间小,所以返回了Fail,但我们实际需要的是和1月1日9:00比较。
修正后的函数
我们需要先判断当前时间是否已经过了当天9点,再决定“最近的9点”是当天还是昨天的:
function determine_if_file_has_been_updated_since_9AM(modified_date_time) { const now = new Date(); let mostRecent9AM; // 判断当前时间是否已经过了当天9点 if (now.getHours() >= 9) { // 过了9点,基准是当天9点 mostRecent9AM = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 9, 0, 0, 0); } else { // 没到9点,基准是昨天9点 mostRecent9AM = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1, 9, 0, 0, 0); } // 比较文件修改时间和基准时间 return modified_date_time > mostRecent9AM ? 'Success' : 'Fail'; }
测试你的示例场景
- 场景1:当前时间2018年1月2日8:30
- 因为当前时间早于9点,
mostRecent9AM是2018年1月1日9:00 - 文件修改时间2018年1月1日9:30 > 2018年1月1日9:00 → 返回
Success,符合预期
- 因为当前时间早于9点,
- 场景2:当前时间2018年1月2日9:50
- 当前时间过了9点,
mostRecent9AM是2018年1月2日9:00 - 文件修改时间2018年1月1日9:30 < 2018年1月2日9:00 → 返回
Fail,符合预期
- 当前时间过了9点,
额外说明
- 用
new Date(year, month, day, hours, ...)的方式创建基准时间,比setHours更直观,也避免了修改原日期对象的副作用 - 确保
modified_date_time是一个Date对象或者可被Date解析的时间戳/字符串,否则比较会出错
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

