如何使用Moment.js实现输入字符串无时间部分时格式化返回空时间
实现方案
Moment 原生没有提供识别原始输入是否包含时间部分的配置项,我们可以通过封装自定义的实例化和格式化逻辑实现需求:
- 实例化时留存原始输入的特征,判断是否携带时间信息
- 重写format方法,针对无时间的输入,在格式化时间相关内容时直接返回空字符串
封装代码示例
function customMoment(inputStr) { const instance = moment(inputStr); // 可根据实际业务的输入格式调整判断规则,当前适配示例中的ISO类格式 instance._hasTime = /(T\d|\d:\d)/.test(inputStr); const originFormat = instance.format; instance.format = function (formatStr) { // 匹配时间格式符:时/分/秒/上午下午标识,无时间时直接返回空 if (!this._hasTime && /[hHmsaA]/.test(formatStr)) { return ""; } return originFormat.call(this, formatStr); }; return instance; }
效果测试
// 无时间输入 const date1 = customMoment("2021-02-12"); console.log(date1.format("h:mm a")); // 输出 "" // 带时间输入 const date2 = customMoment("2021-02-12T6:00"); console.log(date2.format("h:mm a")); // 输出 "6:00 am" const date3 = customMoment("2021-02-19T18:00"); console.log(date3.format("h:mm a")); // 输出 "6:00 pm"
如果你的业务场景存在其他非ISO格式的日期输入,仅需要调整_hasTime的判断逻辑即可适配。
内容的提问来源于stack exchange,提问作者A.J.
相关产品推荐
相关产品推荐

