import { makeGetSet } from '../moment/get-set';
|
import { addFormatToken } from '../format/format';
|
import { addUnitAlias } from './aliases';
|
import { addUnitPriority } from './priorities';
|
import {
|
addRegexToken,
|
match1to2,
|
match2,
|
match3to4,
|
match5to6,
|
} from '../parse/regex';
|
import { addParseToken } from '../parse/token';
|
import { HOUR, MINUTE, SECOND } from './constants';
|
import toInt from '../utils/to-int';
|
import zeroFill from '../utils/zero-fill';
|
import getParsingFlags from '../create/parsing-flags';
|
|
// FORMATTING
|
|
function hFormat() {
|
return this.hours() % 12 || 12;
|
}
|
|
function kFormat() {
|
return this.hours() || 24;
|
}
|
|
addFormatToken('H', ['HH', 2], 0, 'hour');
|
addFormatToken('h', ['hh', 2], 0, hFormat);
|
addFormatToken('k', ['kk', 2], 0, kFormat);
|
|
addFormatToken('hmm', 0, 0, function () {
|
return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
|
});
|
|
addFormatToken('hmmss', 0, 0, function () {
|
return (
|
'' +
|
hFormat.apply(this) +
|
zeroFill(this.minutes(), 2) +
|
zeroFill(this.seconds(), 2)
|
);
|
});
|
|
addFormatToken('Hmm', 0, 0, function () {
|
return '' + this.hours() + zeroFill(this.minutes(), 2);
|
});
|
|
addFormatToken('Hmmss', 0, 0, function () {
|
return (
|
'' +
|
this.hours() +
|
zeroFill(this.minutes(), 2) +
|
zeroFill(this.seconds(), 2)
|
);
|
});
|
|
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');
|
|
// PRIORITY
|
addUnitPriority('hour', 13);
|
|
// PARSING
|
|
function matchMeridiem(isStrict, locale) {
|
return locale._meridiemParse;
|
}
|
|
addRegexToken('a', matchMeridiem);
|
addRegexToken('A', matchMeridiem);
|
addRegexToken('H', match1to2);
|
addRegexToken('h', match1to2);
|
addRegexToken('k', match1to2);
|
addRegexToken('HH', match1to2, match2);
|
addRegexToken('hh', match1to2, match2);
|
addRegexToken('kk', match1to2, match2);
|
|
addRegexToken('hmm', match3to4);
|
addRegexToken('hmmss', match5to6);
|
addRegexToken('Hmm', match3to4);
|
addRegexToken('Hmmss', match5to6);
|
|
addParseToken(['H', 'HH'], HOUR);
|
addParseToken(['k', 'kk'], function (input, array, config) {
|
var kInput = toInt(input);
|
array[HOUR] = kInput === 24 ? 0 : kInput;
|
});
|
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);
|
getParsingFlags(config).bigHour = true;
|
});
|
addParseToken('hmm', function (input, array, config) {
|
var pos = input.length - 2;
|
array[HOUR] = toInt(input.substr(0, pos));
|
array[MINUTE] = toInt(input.substr(pos));
|
getParsingFlags(config).bigHour = true;
|
});
|
addParseToken('hmmss', function (input, array, config) {
|
var pos1 = input.length - 4,
|
pos2 = input.length - 2;
|
array[HOUR] = toInt(input.substr(0, pos1));
|
array[MINUTE] = toInt(input.substr(pos1, 2));
|
array[SECOND] = toInt(input.substr(pos2));
|
getParsingFlags(config).bigHour = true;
|
});
|
addParseToken('Hmm', function (input, array, config) {
|
var pos = input.length - 2;
|
array[HOUR] = toInt(input.substr(0, pos));
|
array[MINUTE] = toInt(input.substr(pos));
|
});
|
addParseToken('Hmmss', function (input, array, config) {
|
var pos1 = input.length - 4,
|
pos2 = input.length - 2;
|
array[HOUR] = toInt(input.substr(0, pos1));
|
array[MINUTE] = toInt(input.substr(pos1, 2));
|
array[SECOND] = toInt(input.substr(pos2));
|
});
|
|
// 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,
|
// Setting the hour should keep the time, because the user explicitly
|
// specified which hour they want. So trying to maintain the same hour (in
|
// a new timezone) makes sense. Adding/subtracting hours does not follow
|
// this rule.
|
getSetHour = makeGetSet('Hours', true);
|
|
export function localeMeridiem(hours, minutes, isLower) {
|
if (hours > 11) {
|
return isLower ? 'pm' : 'PM';
|
} else {
|
return isLower ? 'am' : 'AM';
|
}
|
}
|