import { makeGetSet } from ‘../moment/get-set’; import { addFormatToken } from ‘../format/format’; import { addUnitAlias } from ‘./aliases’; import { addRegexToken, match1to2, match2 } from ‘../parse/regex’; import { addParseToken } from ‘../parse/token’; import { HOUR } from ‘./constants’; import toInt from ‘../utils/to-int’;
// FORMATTING
addFormatToken(‘H’, [‘HH’, 2], 0, ‘hour’); addFormatToken(‘h’, [‘hh’, 2], 0, function () {
return this.hours() % 12 || 12;
});
function meridiem (token, lowercase) {
addFormatToken(token, 0, 0, function () { return this.localeData().meridiem(this.hours(), this.minutes(), lowercase); });
}
meridiem(‘a’, true); meridiem(‘A’, false);
// ALIASES
addUnitAlias(‘hour’, ‘h’);
// PARSING
function matchMeridiem (isStrict, locale) {
return locale._meridiemParse;
}
addRegexToken(‘a’, matchMeridiem); addRegexToken(‘A’, matchMeridiem); addRegexToken(‘H’, match1to2); addRegexToken(‘h’, match1to2); addRegexToken(‘HH’, match1to2, match2); addRegexToken(‘hh’, match1to2, match2);
addParseToken([‘H’, ‘HH’], HOUR); addParseToken([‘a’, ‘A’], function (input, array, config) {
config._isPm = config._locale.isPM(input); config._meridiem = input;
}); addParseToken([‘h’, ‘hh’], function (input, array, config) {
array[HOUR] = toInt(input); config._pf.bigHour = true;
});
// LOCALES
export function localeIsPM (input) {
// IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays // Using charAt should be more compatible. return ((input + '').toLowerCase().charAt(0) === 'p');
}
export var defaultLocaleMeridiemParse = /[ap].?m?.?/i; export function localeMeridiem (hours, minutes, isLower) {
if (hours > 11) { return isLower ? 'pm' : 'PM'; } else { return isLower ? 'am' : 'AM'; }
}
// MOMENTS
// Setting the hour should keep the time, because the user explicitly // specified which hour he wants. So trying to maintain the same hour (in // a new timezone) makes sense. Adding/subtracting hours does not follow // this rule. export var getSetHour = makeGetSet(‘Hours’, true);