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
相关产品推荐
相关产品推荐

