如何不借助外部库格式化DIV标签中的UTC日期字符串?
解决方案
方法一:直接字符串处理(推荐,无时区转换)
这种方法针对固定格式的日期字符串直接操作,无需处理时区转换,适合需要保留原字符串显示的日期时间的场景。
方式1:拆分字符串(Split)
const dateInUtc = '2021-12-09T15:43:29+01:00'; // 按'T'拆分,分离日期部分和带时区的时间部分 const [datePart, timeWithOffset] = dateInUtc.split('T'); // 按'+'拆分时间部分,只保留时分秒部分 const timePart = timeWithOffset.split('+')[0]; // 拼接成目标格式 const formattedDate = `${datePart} - ${timePart}`; console.log(formattedDate); // 输出:2021-12-09 - 15:43:29
方式2:正则表达式替换
const dateInUtc = '2021-12-09T15:43:29+01:00'; // 匹配'T'或'+'及后续所有内容,将'T'替换为' - ',其余匹配项清空 const formattedDate = dateInUtc.replace(/T|\+.*/g, match => match === 'T' ? ' - ' : ''); console.log(formattedDate); // 输出:2021-12-09 - 15:43:29
方法二:使用原生Date对象(适用于需要时区转换的场景)
如果需要将原日期转换为本地时间或UTC时间后再格式化,可以使用原生Date对象。注意:该方法会根据当前环境的时区自动转换时间。
const dateInUtc = '2021-12-09T15:43:29+01:00'; const date = new Date(dateInUtc); // 获取各时间部分,用padStart确保两位数格式 const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); const seconds = String(date.getSeconds()).padStart(2, '0'); // 拼接目标格式 const formattedDate = `${year}-${month}-${day} - ${hours}:${minutes}:${seconds}`; console.log(formattedDate); // 示例输出(假设本地时区为UTC+8):2021-12-09 - 22:43:29
注意:若需求是保留原字符串中的日期时间(不做时区转换),优先选择方法一,避免时区差异导致的时间偏差。
内容的提问来源于stack exchange,提问作者Ramdhas
相关产品推荐
相关产品推荐

