diff options
Diffstat (limited to 'node_modules/locutus/php/datetime/date.js')
-rw-r--r-- | node_modules/locutus/php/datetime/date.js | 318 |
1 files changed, 318 insertions, 0 deletions
diff --git a/node_modules/locutus/php/datetime/date.js b/node_modules/locutus/php/datetime/date.js new file mode 100644 index 0000000..39d6db1 --- /dev/null +++ b/node_modules/locutus/php/datetime/date.js @@ -0,0 +1,318 @@ +'use strict'; + +module.exports = function date(format, timestamp) { + // discuss at: http://locutus.io/php/date/ + // original by: Carlos R. L. Rodrigues (http://www.jsfromhell.com) + // original by: gettimeofday + // parts by: Peter-Paul Koch (http://www.quirksmode.org/js/beat.html) + // improved by: Kevin van Zonneveld (http://kvz.io) + // improved by: MeEtc (http://yass.meetcweb.com) + // improved by: Brad Touesnard + // improved by: Tim Wiel + // improved by: Bryan Elliott + // improved by: David Randall + // improved by: Theriault (https://github.com/Theriault) + // improved by: Theriault (https://github.com/Theriault) + // improved by: Brett Zamir (http://brett-zamir.me) + // improved by: Theriault (https://github.com/Theriault) + // improved by: Thomas Beaucourt (http://www.webapp.fr) + // improved by: JT + // improved by: Theriault (https://github.com/Theriault) + // improved by: RafaĆ Kukawski (http://blog.kukawski.pl) + // improved by: Theriault (https://github.com/Theriault) + // input by: Brett Zamir (http://brett-zamir.me) + // input by: majak + // input by: Alex + // input by: Martin + // input by: Alex Wilson + // input by: Haravikk + // bugfixed by: Kevin van Zonneveld (http://kvz.io) + // bugfixed by: majak + // bugfixed by: Kevin van Zonneveld (http://kvz.io) + // bugfixed by: Brett Zamir (http://brett-zamir.me) + // bugfixed by: omid (http://locutus.io/php/380:380#comment_137122) + // bugfixed by: Chris (http://www.devotis.nl/) + // note 1: Uses global: locutus to store the default timezone + // note 1: Although the function potentially allows timezone info + // note 1: (see notes), it currently does not set + // note 1: per a timezone specified by date_default_timezone_set(). Implementers might use + // note 1: $locutus.currentTimezoneOffset and + // note 1: $locutus.currentTimezoneDST set by that function + // note 1: in order to adjust the dates in this function + // note 1: (or our other date functions!) accordingly + // example 1: date('H:m:s \\m \\i\\s \\m\\o\\n\\t\\h', 1062402400) + // returns 1: '07:09:40 m is month' + // example 2: date('F j, Y, g:i a', 1062462400) + // returns 2: 'September 2, 2003, 12:26 am' + // example 3: date('Y W o', 1062462400) + // returns 3: '2003 36 2003' + // example 4: var $x = date('Y m d', (new Date()).getTime() / 1000) + // example 4: $x = $x + '' + // example 4: var $result = $x.length // 2009 01 09 + // returns 4: 10 + // example 5: date('W', 1104534000) + // returns 5: '52' + // example 6: date('B t', 1104534000) + // returns 6: '999 31' + // example 7: date('W U', 1293750000.82); // 2010-12-31 + // returns 7: '52 1293750000' + // example 8: date('W', 1293836400); // 2011-01-01 + // returns 8: '52' + // example 9: date('W Y-m-d', 1293974054); // 2011-01-02 + // returns 9: '52 2011-01-02' + // test: skip-1 skip-2 skip-5 + + var jsdate, f; + // Keep this here (works, but for code commented-out below for file size reasons) + // var tal= []; + var txtWords = ['Sun', 'Mon', 'Tues', 'Wednes', 'Thurs', 'Fri', 'Satur', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; + // trailing backslash -> (dropped) + // a backslash followed by any character (including backslash) -> the character + // empty string -> empty string + var formatChr = /\\?(.?)/gi; + var formatChrCb = function formatChrCb(t, s) { + return f[t] ? f[t]() : s; + }; + var _pad = function _pad(n, c) { + n = String(n); + while (n.length < c) { + n = '0' + n; + } + return n; + }; + f = { + // Day + d: function d() { + // Day of month w/leading 0; 01..31 + return _pad(f.j(), 2); + }, + D: function D() { + // Shorthand day name; Mon...Sun + return f.l().slice(0, 3); + }, + j: function j() { + // Day of month; 1..31 + return jsdate.getDate(); + }, + l: function l() { + // Full day name; Monday...Sunday + return txtWords[f.w()] + 'day'; + }, + N: function N() { + // ISO-8601 day of week; 1[Mon]..7[Sun] + return f.w() || 7; + }, + S: function S() { + // Ordinal suffix for day of month; st, nd, rd, th + var j = f.j(); + var i = j % 10; + if (i <= 3 && parseInt(j % 100 / 10, 10) === 1) { + i = 0; + } + return ['st', 'nd', 'rd'][i - 1] || 'th'; + }, + w: function w() { + // Day of week; 0[Sun]..6[Sat] + return jsdate.getDay(); + }, + z: function z() { + // Day of year; 0..365 + var a = new Date(f.Y(), f.n() - 1, f.j()); + var b = new Date(f.Y(), 0, 1); + return Math.round((a - b) / 864e5); + }, + + // Week + W: function W() { + // ISO-8601 week number + var a = new Date(f.Y(), f.n() - 1, f.j() - f.N() + 3); + var b = new Date(a.getFullYear(), 0, 4); + return _pad(1 + Math.round((a - b) / 864e5 / 7), 2); + }, + + // Month + F: function F() { + // Full month name; January...December + return txtWords[6 + f.n()]; + }, + m: function m() { + // Month w/leading 0; 01...12 + return _pad(f.n(), 2); + }, + M: function M() { + // Shorthand month name; Jan...Dec + return f.F().slice(0, 3); + }, + n: function n() { + // Month; 1...12 + return jsdate.getMonth() + 1; + }, + t: function t() { + // Days in month; 28...31 + return new Date(f.Y(), f.n(), 0).getDate(); + }, + + // Year + L: function L() { + // Is leap year?; 0 or 1 + var j = f.Y(); + return j % 4 === 0 & j % 100 !== 0 | j % 400 === 0; + }, + o: function o() { + // ISO-8601 year + var n = f.n(); + var W = f.W(); + var Y = f.Y(); + return Y + (n === 12 && W < 9 ? 1 : n === 1 && W > 9 ? -1 : 0); + }, + Y: function Y() { + // Full year; e.g. 1980...2010 + return jsdate.getFullYear(); + }, + y: function y() { + // Last two digits of year; 00...99 + return f.Y().toString().slice(-2); + }, + + // Time + a: function a() { + // am or pm + return jsdate.getHours() > 11 ? 'pm' : 'am'; + }, + A: function A() { + // AM or PM + return f.a().toUpperCase(); + }, + B: function B() { + // Swatch Internet time; 000..999 + var H = jsdate.getUTCHours() * 36e2; + // Hours + var i = jsdate.getUTCMinutes() * 60; + // Minutes + // Seconds + var s = jsdate.getUTCSeconds(); + return _pad(Math.floor((H + i + s + 36e2) / 86.4) % 1e3, 3); + }, + g: function g() { + // 12-Hours; 1..12 + return f.G() % 12 || 12; + }, + G: function G() { + // 24-Hours; 0..23 + return jsdate.getHours(); + }, + h: function h() { + // 12-Hours w/leading 0; 01..12 + return _pad(f.g(), 2); + }, + H: function H() { + // 24-Hours w/leading 0; 00..23 + return _pad(f.G(), 2); + }, + i: function i() { + // Minutes w/leading 0; 00..59 + return _pad(jsdate.getMinutes(), 2); + }, + s: function s() { + // Seconds w/leading 0; 00..59 + return _pad(jsdate.getSeconds(), 2); + }, + u: function u() { + // Microseconds; 000000-999000 + return _pad(jsdate.getMilliseconds() * 1000, 6); + }, + + // Timezone + e: function e() { + // Timezone identifier; e.g. Atlantic/Azores, ... + // The following works, but requires inclusion of the very large + // timezone_abbreviations_list() function. + /* return that.date_default_timezone_get(); + */ + var msg = 'Not supported (see source code of date() for timezone on how to add support)'; + throw new Error(msg); + }, + I: function I() { + // DST observed?; 0 or 1 + // Compares Jan 1 minus Jan 1 UTC to Jul 1 minus Jul 1 UTC. + // If they are not equal, then DST is observed. + var a = new Date(f.Y(), 0); + // Jan 1 + var c = Date.UTC(f.Y(), 0); + // Jan 1 UTC + var b = new Date(f.Y(), 6); + // Jul 1 + // Jul 1 UTC + var d = Date.UTC(f.Y(), 6); + return a - c !== b - d ? 1 : 0; + }, + O: function O() { + // Difference to GMT in hour format; e.g. +0200 + var tzo = jsdate.getTimezoneOffset(); + var a = Math.abs(tzo); + return (tzo > 0 ? '-' : '+') + _pad(Math.floor(a / 60) * 100 + a % 60, 4); + }, + P: function P() { + // Difference to GMT w/colon; e.g. +02:00 + var O = f.O(); + return O.substr(0, 3) + ':' + O.substr(3, 2); + }, + T: function T() { + // The following works, but requires inclusion of the very + // large timezone_abbreviations_list() function. + /* var abbr, i, os, _default; + if (!tal.length) { + tal = that.timezone_abbreviations_list(); + } + if ($locutus && $locutus.default_timezone) { + _default = $locutus.default_timezone; + for (abbr in tal) { + for (i = 0; i < tal[abbr].length; i++) { + if (tal[abbr][i].timezone_id === _default) { + return abbr.toUpperCase(); + } + } + } + } + for (abbr in tal) { + for (i = 0; i < tal[abbr].length; i++) { + os = -jsdate.getTimezoneOffset() * 60; + if (tal[abbr][i].offset === os) { + return abbr.toUpperCase(); + } + } + } + */ + return 'UTC'; + }, + Z: function Z() { + // Timezone offset in seconds (-43200...50400) + return -jsdate.getTimezoneOffset() * 60; + }, + + // Full Date/Time + c: function c() { + // ISO-8601 date. + return 'Y-m-d\\TH:i:sP'.replace(formatChr, formatChrCb); + }, + r: function r() { + // RFC 2822 + return 'D, d M Y H:i:s O'.replace(formatChr, formatChrCb); + }, + U: function U() { + // Seconds since UNIX epoch + return jsdate / 1000 | 0; + } + }; + + var _date = function _date(format, timestamp) { + jsdate = timestamp === undefined ? new Date() // Not provided + : timestamp instanceof Date ? new Date(timestamp) // JS Date() + : new Date(timestamp * 1000) // UNIX timestamp (auto-convert to int) + ; + return format.replace(formatChr, formatChrCb); + }; + + return _date(format, timestamp); +}; +//# sourceMappingURL=date.js.map
\ No newline at end of file |