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);