求助:JavaScript中OpenWeatherMap API日出日落Unix时间转时分格式
解决Unix时间戳转时分格式问题
你遇到的问题是因为原生JavaScript的Date对象并没有.format()方法,这个方法是moment.js、date-fns这类日期处理库提供的——没引入对应库就调用会抛出错误,导致后续代码执行中断,所以页面无法正常显示内容。
方案一:原生JavaScript实现(无需第三方库)
先写一个工具函数,把OpenWeatherMap返回的秒级Unix时间戳转成HH:mm格式:
function formatUnixTimeToHHmm(unixTimestamp) { // 转成Date对象需要毫秒级时间戳,所以乘以1000 const date = new Date(unixTimestamp * 1000); // 补零确保时分都是两位数字 const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); return `${hours}:${minutes}`; }
然后修改你的原有代码:
// 一次解构获取日出日落时间 const { sunrise, sunset } = data.sys; // 格式化时间 const formattedSunrise = formatUnixTimeToHHmm(sunrise); const formattedSunset = formatUnixTimeToHHmm(sunset); // 更新页面显示 document.querySelector(".sunrise").innerText = `Sonnenaufgang: ${formattedSunrise}`; document.querySelector(".sunset").innerText = `Sonnenuntergang: ${formattedSunset}`;
方案二:使用第三方日期库(如moment.js)
如果你更倾向于用.format()方法,需要先引入moment.js库:
<script src="https://cdn.jsdelivr.net/npm/moment@2.29.4/moment.min.js"></script>
再修改代码:
const { sunrise, sunset } = data.sys; // moment.unix()直接支持秒级时间戳 const formattedSunrise = moment.unix(sunrise).format('HH:mm'); const formattedSunset = moment.unix(sunset).format('HH:mm'); document.querySelector(".sunrise").innerText = `Sonnenaufgang: ${formattedSunrise}`; document.querySelector(".sunset").innerText = `Sonnenuntergang: ${formattedSunset}`;
内容的提问来源于stack exchange,提问作者KaiSanjix
相关产品推荐
相关产品推荐

