JavaScript对象ISO日期格式化及字段引用问题求助
问题解答
1. 字段引用报错的解决
报错obj.data[field].split is not a function的核心原因是你的示例对象没有data嵌套层级,直接访问obj[field]即可。同时建议增加字段校验,避免字段不存在或非字符串的异常情况:
const formatISODate = function (obj, field) { // 校验字段合法性 if (!obj[field] || typeof obj[field] !== 'string') { return ''; // 可根据需求返回默认值 } // 移除多余的data层级,解构日期部分 const [year, month, day] = obj[field].split('T')[0].split('-'); return `${day} ${month} ${year}`; }
调用示例:
const user = { "_id": "63dd35e801ad6ada9a5eeb08", "name": "Joe Bloggs", "technicalCertification": true, "salesCertification": true, "salesCertificationExpiry": "2023-12-27T12:02:31.043Z", "techicalCertificationExpiry": "2024-09-29T12:02:48.254Z" }; console.log(formatISODate(user, 'salesCertificationExpiry')); // 输出 "27 12 2023"
2. 更简便的日期格式化实现
手动拆分字符串的方式不仅繁琐,还容易因日期格式变动出错,推荐用原生API实现更健壮的格式化:
方法一:用Intl.DateTimeFormat(支持本地化,推荐)
const formatISODate = function (obj, field) { if (!obj[field]) return ''; const date = new Date(obj[field]); // 按「日 月 年」格式输出,可调整配置实现不同分隔符或格式 return new Intl.DateTimeFormat('en-GB', { day: '2-digit', month: '2-digit', year: 'numeric' }).format(date).replace('/', ' ').replace('/', ' '); }
方法二:用Date对象的UTC方法
const formatISODate = function (obj, field) { if (!obj[field]) return ''; const date = new Date(obj[field]); // 补零确保两位数格式 const day = String(date.getUTCDate()).padStart(2, '0'); const month = String(date.getUTCMonth() + 1).padStart(2, '0'); // 月份从0开始,需+1 const year = date.getUTCFullYear(); return `${day} ${month} ${year}`; }
内容的提问来源于stack exchange,提问作者user1176737
相关产品推荐
相关产品推荐

