summaryrefslogtreecommitdiff
path: root/node_modules/locutus/php/datetime/strtotime.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/locutus/php/datetime/strtotime.js')
-rw-r--r--node_modules/locutus/php/datetime/strtotime.js273
1 files changed, 0 insertions, 273 deletions
diff --git a/node_modules/locutus/php/datetime/strtotime.js b/node_modules/locutus/php/datetime/strtotime.js
deleted file mode 100644
index b14a093..0000000
--- a/node_modules/locutus/php/datetime/strtotime.js
+++ /dev/null
@@ -1,273 +0,0 @@
-'use strict';
-
-module.exports = function strtotime(text, now) {
- // discuss at: http://locutus.io/php/strtotime/
- // original by: Caio Ariede (http://caioariede.com)
- // improved by: Kevin van Zonneveld (http://kvz.io)
- // improved by: Caio Ariede (http://caioariede.com)
- // improved by: A. Matías Quezada (http://amatiasq.com)
- // improved by: preuter
- // improved by: Brett Zamir (http://brett-zamir.me)
- // improved by: Mirko Faber
- // input by: David
- // bugfixed by: Wagner B. Soares
- // bugfixed by: Artur Tchernychev
- // bugfixed by: Stephan Bösch-Plepelits (http://github.com/plepe)
- // note 1: Examples all have a fixed timestamp to prevent
- // note 1: tests to fail because of variable time(zones)
- // example 1: strtotime('+1 day', 1129633200)
- // returns 1: 1129719600
- // example 2: strtotime('+1 week 2 days 4 hours 2 seconds', 1129633200)
- // returns 2: 1130425202
- // example 3: strtotime('last month', 1129633200)
- // returns 3: 1127041200
- // example 4: strtotime('2009-05-04 08:30:00 GMT')
- // returns 4: 1241425800
- // example 5: strtotime('2009-05-04 08:30:00+00')
- // returns 5: 1241425800
- // example 6: strtotime('2009-05-04 08:30:00+02:00')
- // returns 6: 1241418600
- // example 7: strtotime('2009-05-04T08:30:00Z')
- // returns 7: 1241425800
-
- var parsed;
- var match;
- var today;
- var year;
- var date;
- var days;
- var ranges;
- var len;
- var times;
- var regex;
- var i;
- var fail = false;
-
- if (!text) {
- return fail;
- }
-
- // Unecessary spaces
- text = text.replace(/^\s+|\s+$/g, '').replace(/\s{2,}/g, ' ').replace(/[\t\r\n]/g, '').toLowerCase();
-
- // in contrast to php, js Date.parse function interprets:
- // dates given as yyyy-mm-dd as in timezone: UTC,
- // dates with "." or "-" as MDY instead of DMY
- // dates with two-digit years differently
- // etc...etc...
- // ...therefore we manually parse lots of common date formats
- var pattern = new RegExp(['^(\\d{1,4})', '([\\-\\.\\/:])', '(\\d{1,2})', '([\\-\\.\\/:])', '(\\d{1,4})', '(?:\\s(\\d{1,2}):(\\d{2})?:?(\\d{2})?)?', '(?:\\s([A-Z]+)?)?$'].join(''));
- match = text.match(pattern);
-
- if (match && match[2] === match[4]) {
- if (match[1] > 1901) {
- switch (match[2]) {
- case '-':
- // YYYY-M-D
- if (match[3] > 12 || match[5] > 31) {
- return fail;
- }
-
- return new Date(match[1], parseInt(match[3], 10) - 1, match[5], match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;
- case '.':
- // YYYY.M.D is not parsed by strtotime()
- return fail;
- case '/':
- // YYYY/M/D
- if (match[3] > 12 || match[5] > 31) {
- return fail;
- }
-
- return new Date(match[1], parseInt(match[3], 10) - 1, match[5], match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;
- }
- } else if (match[5] > 1901) {
- switch (match[2]) {
- case '-':
- // D-M-YYYY
- if (match[3] > 12 || match[1] > 31) {
- return fail;
- }
-
- return new Date(match[5], parseInt(match[3], 10) - 1, match[1], match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;
- case '.':
- // D.M.YYYY
- if (match[3] > 12 || match[1] > 31) {
- return fail;
- }
-
- return new Date(match[5], parseInt(match[3], 10) - 1, match[1], match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;
- case '/':
- // M/D/YYYY
- if (match[1] > 12 || match[3] > 31) {
- return fail;
- }
-
- return new Date(match[5], parseInt(match[1], 10) - 1, match[3], match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;
- }
- } else {
- switch (match[2]) {
- case '-':
- // YY-M-D
- if (match[3] > 12 || match[5] > 31 || match[1] < 70 && match[1] > 38) {
- return fail;
- }
-
- year = match[1] >= 0 && match[1] <= 38 ? +match[1] + 2000 : match[1];
- return new Date(year, parseInt(match[3], 10) - 1, match[5], match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;
- case '.':
- // D.M.YY or H.MM.SS
- if (match[5] >= 70) {
- // D.M.YY
- if (match[3] > 12 || match[1] > 31) {
- return fail;
- }
-
- return new Date(match[5], parseInt(match[3], 10) - 1, match[1], match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;
- }
- if (match[5] < 60 && !match[6]) {
- // H.MM.SS
- if (match[1] > 23 || match[3] > 59) {
- return fail;
- }
-
- today = new Date();
- return new Date(today.getFullYear(), today.getMonth(), today.getDate(), match[1] || 0, match[3] || 0, match[5] || 0, match[9] || 0) / 1000;
- }
-
- // invalid format, cannot be parsed
- return fail;
- case '/':
- // M/D/YY
- if (match[1] > 12 || match[3] > 31 || match[5] < 70 && match[5] > 38) {
- return fail;
- }
-
- year = match[5] >= 0 && match[5] <= 38 ? +match[5] + 2000 : match[5];
- return new Date(year, parseInt(match[1], 10) - 1, match[3], match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;
- case ':':
- // HH:MM:SS
- if (match[1] > 23 || match[3] > 59 || match[5] > 59) {
- return fail;
- }
-
- today = new Date();
- return new Date(today.getFullYear(), today.getMonth(), today.getDate(), match[1] || 0, match[3] || 0, match[5] || 0) / 1000;
- }
- }
- }
-
- // other formats and "now" should be parsed by Date.parse()
- if (text === 'now') {
- return now === null || isNaN(now) ? new Date().getTime() / 1000 | 0 : now | 0;
- }
- if (!isNaN(parsed = Date.parse(text))) {
- return parsed / 1000 | 0;
- }
- // Browsers !== Chrome have problems parsing ISO 8601 date strings, as they do
- // not accept lower case characters, space, or shortened time zones.
- // Therefore, fix these problems and try again.
- // Examples:
- // 2015-04-15 20:33:59+02
- // 2015-04-15 20:33:59z
- // 2015-04-15t20:33:59+02:00
- pattern = new RegExp(['^([0-9]{4}-[0-9]{2}-[0-9]{2})', '[ t]', '([0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]+)?)', '([\\+-][0-9]{2}(:[0-9]{2})?|z)'].join(''));
- match = text.match(pattern);
- if (match) {
- // @todo: time zone information
- if (match[4] === 'z') {
- match[4] = 'Z';
- } else if (match[4].match(/^([+-][0-9]{2})$/)) {
- match[4] = match[4] + ':00';
- }
-
- if (!isNaN(parsed = Date.parse(match[1] + 'T' + match[2] + match[4]))) {
- return parsed / 1000 | 0;
- }
- }
-
- date = now ? new Date(now * 1000) : new Date();
- days = {
- 'sun': 0,
- 'mon': 1,
- 'tue': 2,
- 'wed': 3,
- 'thu': 4,
- 'fri': 5,
- 'sat': 6
- };
- ranges = {
- 'yea': 'FullYear',
- 'mon': 'Month',
- 'day': 'Date',
- 'hou': 'Hours',
- 'min': 'Minutes',
- 'sec': 'Seconds'
- };
-
- function lastNext(type, range, modifier) {
- var diff;
- var day = days[range];
-
- if (typeof day !== 'undefined') {
- diff = day - date.getDay();
-
- if (diff === 0) {
- diff = 7 * modifier;
- } else if (diff > 0 && type === 'last') {
- diff -= 7;
- } else if (diff < 0 && type === 'next') {
- diff += 7;
- }
-
- date.setDate(date.getDate() + diff);
- }
- }
-
- function process(val) {
- // @todo: Reconcile this with regex using \s, taking into account
- // browser issues with split and regexes
- var splt = val.split(' ');
- var type = splt[0];
- var range = splt[1].substring(0, 3);
- var typeIsNumber = /\d+/.test(type);
- var ago = splt[2] === 'ago';
- var num = (type === 'last' ? -1 : 1) * (ago ? -1 : 1);
-
- if (typeIsNumber) {
- num *= parseInt(type, 10);
- }
-
- if (ranges.hasOwnProperty(range) && !splt[1].match(/^mon(day|\.)?$/i)) {
- return date['set' + ranges[range]](date['get' + ranges[range]]() + num);
- }
-
- if (range === 'wee') {
- return date.setDate(date.getDate() + num * 7);
- }
-
- if (type === 'next' || type === 'last') {
- lastNext(type, range, num);
- } else if (!typeIsNumber) {
- return false;
- }
-
- return true;
- }
-
- times = '(years?|months?|weeks?|days?|hours?|minutes?|min|seconds?|sec' + '|sunday|sun\\.?|monday|mon\\.?|tuesday|tue\\.?|wednesday|wed\\.?' + '|thursday|thu\\.?|friday|fri\\.?|saturday|sat\\.?)';
- regex = '([+-]?\\d+\\s' + times + '|' + '(last|next)\\s' + times + ')(\\sago)?';
-
- match = text.match(new RegExp(regex, 'gi'));
- if (!match) {
- return fail;
- }
-
- for (i = 0, len = match.length; i < len; i++) {
- if (!process(match[i])) {
- return fail;
- }
- }
-
- return date.getTime() / 1000;
-};
-//# sourceMappingURL=strtotime.js.map \ No newline at end of file