请求协助完善年份显示的JavaScript代码(从PHP迁移)
解决你的年份显示JS迁移问题
首先我先拆解一下你原来PHP代码的核心逻辑,这样能清晰对应到JS的实现需求:
原PHP代码的规则是:
- 如果当前月份是7月及以后(
date('m') > 06),显示「当前完整年份-下一年的两位年份」,比如2024年8月会显示2024-25- 如果当前月份是1-6月,显示「上一年完整年份-当前年的两位年份」,比如2024年5月会显示
2023-24
你的JS代码目前有两个核心问题:
- 没有定义
getYearOffset函数——这是导致代码完全无法运行的直接原因 - 原调用的参数逻辑和PHP的月份判断需求不匹配,就算有这个函数也达不到预期效果
下面是修正后的完整代码,完全匹配原PHP的功能:
完整可运行代码
<span id="year1"></span>-<span id="year2"></span> <script type="text/javascript"> // 获取当前时间 const currentDate = new Date(); const fullYear = currentDate.getFullYear(); // JS的月份是0~11,所以+1转换成和PHP一致的1~12月 const currentMonth = currentDate.getMonth() + 1; let displayYear1, displayYear2; if (currentMonth > 6) { // 7月及以后:当前完整年份 + 下一年的两位年份 displayYear1 = fullYear; displayYear2 = (fullYear + 1).toString().slice(-2); } else { // 1-6月:上一年完整年份 + 当前年的两位年份 displayYear1 = fullYear - 1; displayYear2 = fullYear.toString().slice(-2); } // 把结果渲染到页面元素上,用textContent比innerHTML更安全(纯文本场景) document.getElementById("year1").textContent = displayYear1; document.getElementById("year2").textContent = displayYear2; </script>
代码关键点说明
- 月份处理:JavaScript的
getMonth()返回值是0(对应1月)到11(对应12月),所以必须加1才能和PHP的date('m')(1~12)逻辑对齐 - 两位年份处理:用
toString().slice(-2)截取完整年份的最后两位,完美实现PHP中date('y')的效果 - 安全优化:因为我们只需要渲染纯文本,用
textContent替代innerHTML可以避免潜在的XSS风险,性能也更好
你可以测试不同月份的情况:
- 比如当前是2024年6月1日及之前:页面会显示
2023-24 - 当前是2024年6月2日到12月:页面会显示
2024-25
内容的提问来源于stack exchange,提问作者beingbecoming
相关产品推荐
相关产品推荐

