UNPKG

8.6 kBJavaScriptView Raw
1var _ = require('underscore');
2
3var _months = {
4 full: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
5 abbr: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
6 },
7 _days = {
8 full: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
9 abbr: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
10 alt: {'-1': 'Yesterday', 0: 'Today', 1: 'Tomorrow'}
11 };
12
13/*
14DateZ is licensed under the MIT License:
15Copyright (c) 2011 Tomo Universalis (http://tomouniversalis.com)
16Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
17The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
18THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19*/
20exports.defaultTZOffset = 0;
21exports.DateZ = function () {
22 var members = {
23 'default': ['getUTCDate', 'getUTCDay', 'getUTCFullYear', 'getUTCHours', 'getUTCMilliseconds', 'getUTCMinutes', 'getUTCMonth', 'getUTCSeconds', 'toISOString', 'toGMTString', 'toUTCString', 'valueOf', 'getTime'],
24 z: ['getDate', 'getDay', 'getFullYear', 'getHours', 'getMilliseconds', 'getMinutes', 'getMonth', 'getSeconds', 'getYear', 'toDateString', 'toLocaleDateString', 'toLocaleTimeString'],
25 'string': ['toLocaleString', 'toString', 'toTimeString'],
26 zSet: ['setDate', 'setFullYear', 'setHours', 'setMilliseconds', 'setMinutes', 'setMonth', 'setSeconds', 'setTime', 'setYear'],
27 set: ['setUTCDate', 'setUTCFullYear', 'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds'],
28 'static': ['UTC', 'parse']
29 },
30 d = this,
31 i;
32
33 d.date = d.dateZ = (arguments.length > 1) ? new Date(Date.UTC.apply(Date, arguments) + ((new Date()).getTimezoneOffset() * 60000)) : (arguments.length === 1) ? new Date(new Date(arguments['0'])) : new Date();
34
35 d.timezoneOffset = d.dateZ.getTimezoneOffset();
36
37 function zeroPad(i) {
38 return (i < 10) ? '0' + i : i;
39 }
40 function _toTZString() {
41 var hours = zeroPad(Math.floor(Math.abs(d.timezoneOffset) / 60)),
42 minutes = zeroPad(Math.abs(d.timezoneOffset) - hours * 60),
43 prefix = (d.timezoneOffset < 0) ? '+' : '-',
44 abbr = (d.tzAbbreviation === undefined) ? '' : ' (' + d.tzAbbreviation + ')';
45
46 return 'GMT' + prefix + hours + minutes + abbr;
47 }
48
49 _.each(members.z, function (name) {
50 d[name] = function () {
51 return d.dateZ[name]();
52 };
53 });
54 _.each(members.string, function (name) {
55 d[name] = function () {
56 return d.dateZ[name].apply(d.dateZ, []).replace(/GMT[+\-]\\d{4} \\(([a-zA-Z]{3,4})\\)/, _toTZString());
57 };
58 });
59 _.each(members['default'], function (name) {
60 d[name] = function () {
61 return d.date[name]();
62 };
63 });
64 _.each(members['static'], function (name) {
65 d[name] = function () {
66 return Date[name].apply(Date, arguments);
67 };
68 });
69 _.each(members.zSet, function (name) {
70 d[name] = function () {
71 d.dateZ[name].apply(d.dateZ, arguments);
72 d.date = new Date(d.dateZ.getTime() - d.dateZ.getTimezoneOffset() * 60000 + d.timezoneOffset * 60000);
73 return d;
74 };
75 });
76 _.each(members.set, function (name) {
77 d[name] = function () {
78 d.date[name].apply(d.date, arguments);
79 d.dateZ = new Date(d.date.getTime() + d.date.getTimezoneOffset() * 60000 - d.timezoneOffset * 60000);
80 return d;
81 };
82 });
83
84 if (exports.defaultTZOffset) {
85 this.setTimezoneOffset(exports.defaultTZOffset);
86 }
87};
88exports.DateZ.prototype = {
89 getTimezoneOffset: function () {
90 return this.timezoneOffset;
91 },
92 setTimezoneOffset: function (offset, abbr) {
93 this.timezoneOffset = offset;
94 if (abbr) {
95 this.tzAbbreviation = abbr;
96 }
97 this.dateZ = new Date(this.date.getTime() + this.date.getTimezoneOffset() * 60000 - this.timezoneOffset * 60000);
98 return this;
99 }
100};
101
102// Day
103exports.d = function (input) {
104 return (input.getDate() < 10 ? '0' : '') + input.getDate();
105};
106exports.D = function (input) {
107 return _days.abbr[input.getDay()];
108};
109exports.j = function (input) {
110 return input.getDate();
111};
112exports.l = function (input) {
113 return _days.full[input.getDay()];
114};
115exports.N = function (input) {
116 var d = input.getDay();
117 return (d >= 1) ? d + 1 : 7;
118};
119exports.S = function (input) {
120 var d = input.getDate();
121 return (d % 10 === 1 && d !== 11 ? 'st' : (d % 10 === 2 && d !== 12 ? 'nd' : (d % 10 === 3 && d !== 13 ? 'rd' : 'th')));
122};
123exports.w = function (input) {
124 return input.getDay();
125};
126exports.z = function (input, offset, abbr) {
127 var year = input.getFullYear(),
128 e = new exports.DateZ(year, input.getMonth(), input.getDate(), 12, 0, 0),
129 d = new exports.DateZ(year, 0, 1, 12, 0, 0);
130
131 e.setTimezoneOffset(offset, abbr);
132 d.setTimezoneOffset(offset, abbr);
133 return Math.round((e - d) / 86400000);
134};
135
136// Week
137exports.W = function (input) {
138 var target = new Date(input.valueOf()),
139 dayNr = (input.getDay() + 6) % 7,
140 fThurs;
141
142 target.setDate(target.getDate() - dayNr + 3);
143 fThurs = target.valueOf();
144 target.setMonth(0, 1);
145 if (target.getDay() !== 4) {
146 target.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);
147 }
148
149 return 1 + Math.ceil((fThurs - target) / 604800000);
150};
151
152// Month
153exports.F = function (input) {
154 return _months.full[input.getMonth()];
155};
156exports.m = function (input) {
157 return (input.getMonth() < 9 ? '0' : '') + (input.getMonth() + 1);
158};
159exports.M = function (input) {
160 return _months.abbr[input.getMonth()];
161};
162exports.n = function (input) {
163 return input.getMonth() + 1;
164};
165exports.t = function (input) {
166 return 32 - (new Date(input.getFullYear(), input.getMonth(), 32).getDate());
167};
168
169// Year
170exports.L = function (input) {
171 return new Date(input.getFullYear(), 1, 29).getDate() === 29;
172};
173exports.o = function (input) {
174 var target = new Date(input.valueOf());
175 target.setDate(target.getDate() - ((input.getDay() + 6) % 7) + 3);
176 return target.getFullYear();
177};
178exports.Y = function (input) {
179 return input.getFullYear();
180};
181exports.y = function (input) {
182 return (input.getFullYear().toString()).substr(2);
183};
184
185// Time
186exports.a = function (input) {
187 return input.getHours() < 12 ? 'am' : 'pm';
188};
189exports.A = function (input) {
190 return input.getHours() < 12 ? 'AM' : 'PM';
191};
192exports.B = function (input) {
193 var hours = input.getUTCHours(), beats;
194 hours = (hours === 23) ? 0 : hours + 1;
195 beats = Math.abs(((((hours * 60) + input.getUTCMinutes()) * 60) + input.getUTCSeconds()) / 86.4).toFixed(0);
196 return ('000'.concat(beats).slice(beats.length));
197};
198exports.g = function (input) {
199 var h = input.getHours();
200 return h === 0 ? 12 : (h > 12 ? h - 12 : h);
201};
202exports.G = function (input) {
203 return input.getHours();
204};
205exports.h = function (input) {
206 var h = input.getHours();
207 return ((h < 10 || (12 < h && 22 > h)) ? '0' : '') + ((h < 12) ? h : h - 12);
208};
209exports.H = function (input) {
210 var h = input.getHours();
211 return (h < 10 ? '0' : '') + h;
212};
213exports.i = function (input) {
214 var m = input.getMinutes();
215 return (m < 10 ? '0' : '') + m;
216};
217exports.s = function (input) {
218 var s = input.getSeconds();
219 return (s < 10 ? '0' : '') + s;
220};
221//u = function () { return ''; },
222
223// Timezone
224//e = function () { return ''; },
225//I = function () { return ''; },
226exports.O = function (input) {
227 var tz = input.getTimezoneOffset();
228 return (tz < 0 ? '-' : '+') + (tz / 60 < 10 ? '0' : '') + (tz / 60) + '00';
229};
230//T = function () { return ''; },
231exports.Z = function (input) {
232 return input.getTimezoneOffset() * 60;
233};
234
235// Full Date/Time
236exports.c = function (input) {
237 return input.toISOString();
238};
239exports.r = function (input) {
240 return input.toUTCString();
241};
242exports.U = function (input) {
243 return input.getTime() / 1000;
244};