如何将$DATE$从HTML传递到JavaScript并实现英文日期转波兰语长日期
问题分析与解决方案:英文日期转波兰语长日期的参数异常问题
核心问题
你当前的问题出在模板变量$DATE$的输出值——它不是预期的01/01/2024这类日期字符串,而是一个小数形式的时间戳(代表从1970年1月1日至今的时间差,以年为单位)。直接将这个小数传入new Date()会被解析为1970年附近的无效日期,导致后续转换逻辑失效。
原因拆解
模板引擎(你使用的CMS或模板工具)没有按照预期格式输出$DATE$,而是输出了一个被归一化的时间数值(比如将毫秒级时间戳除以1e9,转换成以年为单位的小数)。new Date()虽能处理数字类型参数,但这个数值太小,无法对应到正常日期范围。
解决步骤
1. 优先修正模板变量的输出格式
这是最根本的解决方式:
- 查找模板引擎的配置或文档,调整
$DATE$的输出规则,让它输出标准日期字符串(如"2024-01-01"、"01/01/2024"),或者整数类型的Unix毫秒时间戳(如1704067200000)。 - 如果模板引擎只能输出该小数格式,需在JS中先将其转换为有效时间戳:比如这个小数是年为单位的时间差,计算方式为
1970年1月1日的时间戳 + 小数 * 一年的毫秒数。
2. 优化JS函数的容错性与写法
更新JS代码,增加参数校验和异常处理,同时优化变量声明方式:
// 用const声明数组,避免全局变量污染 const DayT = [ "niedziela", "poniedziałek", "wtorek", "środa", "czwartek", "piątek", "sobota" ]; const MonthT = [ "stycznia", "lutego", "marca", "kwietnia", "maja", "czerwca", "lipca", "sierpnia", "września", "października", "listopada", "grudnia" ]; function date2polish(dateT){ console.log("dateT = ", dateT); let tEMP; // 处理小数类型的时间参数(假设是年为单位的时间差) if (typeof dateT === 'number' && dateT < 10000) { tEMP = new Date(1970, 0, 1); tEMP.setFullYear(tEMP.getFullYear() + dateT); } else { tEMP = new Date(dateT); } // 校验日期是否有效 if (isNaN(tEMP.getTime())) { return "Nieprawidłowa data"; // 返回波兰语的"无效日期"提示 } const day = tEMP.getDate(); const dayOfWeek = tEMP.getDay(); const month = tEMP.getMonth(); const year = tEMP.getFullYear(); return `${DayT[dayOfWeek]}, ${day} ${MonthT[month]}, ${year}`; }
3. 修正模板中的参数传递
如果模板引擎输出的是日期字符串,需要给参数加上引号,确保传入JS函数的是字符串类型:
<script type="text/javascript">document.write(date2polish("$DATE$"))</script>
内容的提问来源于stack exchange,提问作者bzc0fq
相关产品推荐
相关产品推荐

