React Native中不使用moment库格式化时间字符串的方法
不用Moment.js实现React Native时间格式化
没问题!不用依赖Moment.js的话,咱们完全可以利用JavaScript原生的Date对象和Intl.DateTimeFormat API来实现你要的格式——React Native对这两个原生API的支持很完善,不用担心兼容性问题。
下面是一个直接可用的函数,我会一步步解释逻辑:
const formatDateToCustomStyle = (dateString) => { // 第一步:把数据库返回的时间字符串转换成Date对象 const date = new Date(dateString); // 处理无效的时间字符串(避免报错) if (isNaN(date.getTime())) { return 'Invalid Date'; // 你可以换成自己需要的默认值 } // 第二步:配置时间部分的格式(12小时制+分钟+AM/PM) const timeFormatter = new Intl.DateTimeFormat('en-US', { hour: 'numeric', minute: '2-digit', hour12: true }); // 第三步:配置日期部分的格式(日 + 月份缩写,比如17 Oct) const dateFormatter = new Intl.DateTimeFormat('en-GB', { day: '2-digit', month: 'short' }); // 分别格式化后拼接成目标格式 const formattedTime = timeFormatter.format(date); const formattedDate = dateFormatter.format(date); return `${formattedTime}, ${formattedDate}`; }; // 调用示例 const dbDate = "2018-10-17 14:52:52"; console.log(formatDateToCustomStyle(dbDate)); // 输出:2:52 PM, 17 Oct
关键细节说明:
Intl.DateTimeFormat:这是浏览器/React Native原生支持的国际化时间格式化API,比第三方库更轻量且性能更好。- 时间部分用
en-USlocale是因为它默认支持12小时制的AM/PM格式;日期部分用en-GB是因为它的日期顺序是「日-月」,正好符合你要的17 Oct格式。 - 加入了无效时间的判断,避免因数据库返回异常数据导致应用崩溃。
如果需要调整格式细节(比如月份全拼、小时补零等),只需要修改Intl.DateTimeFormat的配置参数即可,比如把hour: 'numeric'改成hour: '2-digit'会得到02:52 PM的效果。
内容的提问来源于stack exchange,提问作者serene
相关产品推荐
相关产品推荐

