-(function() {
- 'use strict';
- var timeParsePatterns = [
- // 9
- {
- re: /^\d{1,2}$/i,
- handler: function(bits) {
- if (bits[0].length === 1) {
- return '0' + bits[0] + ':00';
- } else {
- return bits[0] + ':00';
- }
- }
- },
- // 13:00
- {
- re: /^\d{2}[:.]\d{2}$/i,
- handler: function(bits) {
- return bits[0].replace('.', ':');
- }
- },
- // 9:00
- {
- re: /^\d[:.]\d{2}$/i,
- handler: function(bits) {
- return '0' + bits[0].replace('.', ':');
- }
- },
- // 3 am / 3 a.m. / 3am
- {
- re: /^(\d+)\s*([ap])(?:.?m.?)?$/i,
- handler: function(bits) {
- var hour = parseInt(bits[1]);
- if (hour === 12) {
- hour = 0;
- }
- if (bits[2].toLowerCase() === 'p') {
- if (hour === 12) {
- hour = 0;
- }
- return (hour + 12) + ':00';
- } else {
- if (hour < 10) {
- return '0' + hour + ':00';
- } else {
- return hour + ':00';
- }
- }
- }
- },
- // 3.30 am / 3:15 a.m. / 3.00am
- {
- re: /^(\d+)[.:](\d{2})\s*([ap]).?m.?$/i,
- handler: function(bits) {
- var hour = parseInt(bits[1]);
- var mins = parseInt(bits[2]);
- if (mins < 10) {
- mins = '0' + mins;
- }
- if (hour === 12) {
- hour = 0;
- }
- if (bits[3].toLowerCase() === 'p') {
- if (hour === 12) {
- hour = 0;
- }
- return (hour + 12) + ':' + mins;
- } else {
- if (hour < 10) {
- return '0' + hour + ':' + mins;
- } else {
- return hour + ':' + mins;
- }
- }
- }
- },
- // noon
- {
- re: /^no/i,
- handler: function(bits) {
- return '12:00';
- }
- },
- // midnight
- {
- re: /^mid/i,
- handler: function(bits) {
- return '00:00';
- }
- }
- ];
-
- function parseTimeString(s) {
- for (var i = 0; i < timeParsePatterns.length; i++) {
- var re = timeParsePatterns[i].re;
- var handler = timeParsePatterns[i].handler;
- var bits = re.exec(s);
- if (bits) {
- return handler(bits);
- }
- }
- return s;
- }
-
- window.parseTimeString = parseTimeString;
-})();