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

JavaScript中使用时间戳创建Date对象返回错误日期问题

问题解决:Cryptocompare API时间戳转Date对象出错

问题原因

JavaScript的Date构造函数要求传入毫秒级Unix时间戳,但Cryptocompare API返回的published_on字段是秒级时间戳。直接将秒级时间戳传入Date,会被当作毫秒处理,所以得到的是1970年左右的错误日期(Unix纪元起始时间附近)。

解决方案

将API返回的秒级时间戳乘以1000,转换为毫秒级后再创建Date对象。

修改后的代码

requestLatestNews();
function requestLatestNews() {
    fetch(`https://min-api.cryptocompare.com/data/v2/news/?lang=EN&api_key=<key>`)
        .then((response) => {
            console.log(response);
            return response.json();
        })
        .then((data) => {
            console.log(data);
            return data;
        })
        .then((data) => {
            for (let i = 0; i < data.Data.length; i++) {
                // 关键修改:将秒级时间戳转为毫秒级
                let publishDate = new Date(data.Data[i].published_on * 1000);
                console.log(publishDate);
                let dmy = publishDate.getUTCDate() + "/" + (publishDate.getUTCMonth() + 1) + "/" + publishDate.getUTCFullYear();
                let hms = publishDate.getUTCHours() + ":" + publishDate.getUTCMinutes() + ":" + publishDate.getUTCSeconds();
                document.querySelector('#output').innerHTML
                    += `<p> <a href="${data.Data[i].guid}">${data.Data[i].source}</a> - ${data.Data[i].title}, ${dmy} ${hms}</p>
                <img src="${data.Data[i].imageurl}"></img> <p> [${data.Data[i].tags} ${data.Data[i].categories}] </p>
                <p> ${data.Data[i].body} </p>`;
            }
        })
        .catch((error) => {
            console.log('Error Code: ' + error);
        });
}

补充说明

你用验证网站得到正确日期,是因为这类网站默认解析的是秒级时间戳,和JavaScript的Date构造函数的要求不同,所以需要手动转换单位。

内容的提问来源于stack exchange,提问作者ihaveaquestion

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:15:44