Moment.js 自定义 AM/PM 解析
AM/PM 解析 是分析字符串以检查是否包含 AM 或 PM 的过程。这意味着我们试图找出给定的字符串形式的时间是否为上午或下午。有两种方法可以实现这一点。一种是通过配置 updateLocale() 方法,另一种是直接从字符串解析 AM/PM。让我们逐个理解它们。
配置 updateLocale() 方法
语法:
moment.updateLocale('en', {
meridiemParse : RegExp
isPM : Function
});
如我们所见,有两种方法可以通过配置updateLocale()方法来解析字符串中的AM/PM。
- meridiemParse: 接受一个正则表达式来检查是否满足给定字符串
- isPM: 一个回调函数,用于检查字符串中是否包含PM。
isPM函数: isPM函数用于检查给定的时间是否为PM时间。它返回一个布尔值。例如-如果输入字符串是12点以后,则isPM()应该返回true。我们使用isPM来检查当前时间是否为‘pm’。
moment.updateLocale('en', {
isPM : function (input) {
return ((input + '').toLowerCase()[0] === 'p');
}
});
meridiemParse: 在此示例中,我们使用了meridiemParse属性,该属性使用正则表达式来检查字符串中的AM/PM
// Specifying what string should be parsed
// as input using meridiemParse property
moment.updateLocale('en', {
meridiemParse : /[ap]\.?m?\.?/i
});
示例1: 在这个示例中,我们为’fr’即法语区域设置了上午/下午解析逻辑,然后我们使用样本字符串检查isPM函数。
var localeData = moment.updateLocale('fr', {
meridiemParse: /PD|MD/,
isPM: function (input) {
return input.charAt(0) === 'M';
}
});
var m = localeData.isPM("MD");
输出:
Meredian : true
直接从字符串中解析AM/PM: 我们可以通过在moment()的格式字符串中使用‘A’或‘a’来提取日期,将其解释为一个moment,并在format()中显示输出。
示例2: 假设我们有以下字符串。
Mon 03-Jul-2017, 11:00 AM
现在,要从这个中提取出AM/PM,我们可以使用以下代码。我们只需要添加字母‘A’(代表AM/PM)或者字母‘a’(代表am/pm)的标记。在moment()和format()的第二个参数中,我们在末尾附加了‘A’。
const moment = require('moment');
console.log(
moment('Mon 03-Jul-2017, 11:00 AM',
'ddd DD-MMM-YYYY, hh:mm A')
.format('hh:mm A')
);
输出:
11:00 AM
示例3: 假设我们有以下字符串
Tue 04-Jul-2017, 11:08 PM
现在,要从中提取上午/下午,我们可以使用以下代码。我们只需要在moment()的第二个参数中添加字母’a’,并在最后的format()中获取上午/下午的标记。
console.log(
moment('Mon 03-Jul-2017, 11:00 AM',
'ddd DD-MMM-YYYY, hh:mm a')
.format('hh:mm a')
);
输出:
11:08 pm
参考资料: https://momentjs.com/docs/#/customization/am-pm-parsing/