Repository navigation
Expand file tree
/
Copy pathdate.format.js
More file actions
100 lines (95 loc) · 5.52 KB
/
Copy pathdate.format.js
File metadata and controls
100 lines (95 loc) · 5.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
(function() {
// Checking for locale month and day names
if(typeof locale !== 'undefined'){
Date.shortMonths = locale.shortMonths;
Date.longMonths = locale.longMonths;
Date.shortDays = locale.shortDays;
Date.longDays = locale.longDays;
}else{
Date.shortMonths = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
Date.longMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
Date.shortDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
Date.longDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
}
// Defining patterns
var replaceChars = {
// Day
d: function() { var d = this.getDate(); return (d < 10 ? '0' : '') + d; },
D: function() { return Date.shortDays[this.getDay()]; },
j: function() { return this.getDate(); },
l: function() { return Date.longDays[this.getDay()]; },
N: function() { var N = this.getDay(); return (N == 0 ? 7 : N); },
S: function() { var S = this.getDate(); return (S % 10 == 1 && S != 11 ? 'st' : (S % 10 == 2 && S != 12 ? 'nd' : (S % 10 == 3 && S != 13 ? 'rd' : 'th'))); },
w: function() { return this.getDay(); },
z: function() { var d = new Date(this.getFullYear(),0,1); return Math.ceil((this - d) / 86400000); },
// Week
W: function() {
var target = new Date(this.valueOf());
var dayNr = (this.getDay() + 6) % 7;
target.setDate(target.getDate() - dayNr + 3);
var firstThursday = target.valueOf();
target.setMonth(0, 1);
if (target.getDay() !== 4) {
target.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);
}
var retVal = 1 + Math.ceil((firstThursday - target) / 604800000);
return (retVal < 10 ? '0' + retVal : retVal);
},
// Month
F: function() { return Date.longMonths[this.getMonth()]; },
m: function() { var m = this.getMonth(); return (m < 9 ? '0' : '') + (m + 1); },
M: function() { return Date.shortMonths[this.getMonth()]; },
n: function() { return this.getMonth() + 1; },
t: function() {
var year = this.getFullYear(), nextMonth = this.getMonth() + 1;
if (nextMonth === 12) {
year = year++;
nextMonth = 0;
}
return new Date(year, nextMonth, 0).getDate();
},
// Year
L: function() { var L = this.getFullYear(); return (L % 400 == 0 || (L % 100 != 0 && L % 4 == 0)); },
o: function() { var d = new Date(this.valueOf()); d.setDate(d.getDate() - ((this.getDay() + 6) % 7) + 3); return d.getFullYear();},
Y: function() { return this.getFullYear(); },
y: function() { return ('' + this.getFullYear()).substr(2); },
// Time
a: function() { return this.getHours() < 12 ? 'am' : 'pm'; },
A: function() { return this.getHours() < 12 ? 'AM' : 'PM'; },
B: function() { return Math.floor((((this.getUTCHours() + 1) % 24) + this.getUTCMinutes() / 60 + this.getUTCSeconds() / 3600) * 1000 / 24); },
g: function() { return this.getHours() % 12 || 12; },
G: function() { return this.getHours(); },
h: function() { var h = this.getHours(); return ((h % 12 || 12) < 10 ? '0' : '') + (h % 12 || 12); },
H: function() { var H = this.getHours(); return (H < 10 ? '0' : '') + H; },
i: function() { var i = this.getMinutes(); return (i < 10 ? '0' : '') + i; },
s: function() { var s = this.getSeconds(); return (s < 10 ? '0' : '') + s; },
v: function() { var v = this.getMilliseconds(); return (v < 10 ? '00' : (v < 100 ? '0' : '')) + v; },
// Timezone
e: function() { return Intl.DateTimeFormat().resolvedOptions().timeZone; },
I: function() {
var DST = null;
for (var i = 0; i < 12; ++i) {
var d = new Date(this.getFullYear(), i, 1);
var offset = d.getTimezoneOffset();
if (DST === null) DST = offset;
else if (offset < DST) { DST = offset; break; } else if (offset > DST) break;
}
return (this.getTimezoneOffset() == DST) | 0;
},
O: function() { var O = this.getTimezoneOffset(); return (-O < 0 ? '-' : '+') + (Math.abs(O / 60) < 10 ? '0' : '') + Math.floor(Math.abs(O / 60)) + (Math.abs(O % 60) == 0 ? '00' : ((Math.abs(O % 60) < 10 ? '0' : '')) + (Math.abs(O % 60))); },
P: function() { var P = this.getTimezoneOffset(); return (-P < 0 ? '-' : '+') + (Math.abs(P / 60) < 10 ? '0' : '') + Math.floor(Math.abs(P / 60)) + ':' + (Math.abs(P % 60) == 0 ? '00' : ((Math.abs(P % 60) < 10 ? '0' : '')) + (Math.abs(P % 60))); },
T: function() { var tz = this.toLocaleTimeString(navigator.language,{timeZoneName:'short'}).split(' '); return tz[tz.length - 1]; },
Z: function() { return -this.getTimezoneOffset() * 60; },
// Full Date/Time
c: function() { return this.format("Y-m-d\\TH:i:sP"); },
r: function() { return this.toString(); },
U: function() { return this.getTime() / 1000; }
};
// Simulates PHP's date function
Date.prototype.format = function(format) {
var date = this;
return format.replace(/(\\?)(.)/g, function(_, esc, chr) {
return (esc === '' && replaceChars[chr]) ? replaceChars[chr].call(date) : chr;
});
};
}).call(this);