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

如何将$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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:23:16