如何将nanosecond格式时间戳转换为24小时制格式在前端展示
时间戳转24小时制展示实现方案
首先澄清:你提到的10位数字1628165909为秒级Unix时间戳,若接口返回的是纳秒级时间戳为19位数字,处理前需先转换为毫秒级再交给日期对象解析。
方案1:原生JavaScript实现(无第三方依赖)
直接用浏览器自带的Date对象处理,不需要引入额外依赖:
/** * 时间戳转指定格式时间 * @param {number} timestamp - 接口返回的秒级/纳秒级时间戳 * @returns {string} 格式化后的时间,如1.00、13.00 */ function formatUnixTime(timestamp) { // 统一转成Date对象支持的毫秒级时间戳 let msTimestamp; const tsStr = timestamp.toString(); if (tsStr.length === 19) { // 纳秒级时间戳转毫秒级 msTimestamp = Math.floor(timestamp / 1000000); } else if (tsStr.length === 10) { // 秒级时间戳转毫秒级 msTimestamp = timestamp * 1000; } else { // 适配已为毫秒级的13位时间戳 msTimestamp = timestamp; } const time = new Date(msTimestamp); // getHours返回0-23的24小时制小时数,分钟补前导0 const hour = time.getHours(); const minute = time.getMinutes().toString().padStart(2, '0'); return `${hour}.${minute}`; } // 测试示例 console.log(formatUnixTime(1628165909)); // 输出对应时间:17.38
方案2:日期工具库实现(项目已引入dayjs/luxon等库的场景)
如果项目已经接入了日期处理工具库,可以用更简洁的写法,以dayjs为例:
import dayjs from 'dayjs'; function formatUnixTime(timestamp) { const tsStr = timestamp.toString(); let msTimestamp = timestamp; if (tsStr.length === 19) msTimestamp = Math.floor(timestamp / 1e6); if (tsStr.length === 10) msTimestamp = timestamp * 1000; // 格式符H代表24小时制不补0的小时,mm代表两位数的分钟 return dayjs(msTimestamp).format('H.mm'); }
适配说明
getHours()和格式符H本身就返回24小时制的数值,凌晨1点返回1,下午1点返回13,完全匹配你的展示要求,无需额外做12/24小时制转换。- 如果需要固定展示UTC时间而非用户本地时区时间,原生方案可以将
getHours()替换为getUTCHours()、getMinutes()替换为getUTCMinutes();dayjs可以用utc()方法适配。
内容的提问来源于stack exchange,提问作者Pooja
相关产品推荐
相关产品推荐

