diff options
Diffstat (limited to '')
-rw-r--r-- | js/strftime.js | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/js/strftime.js b/js/strftime.js new file mode 100644 index 0000000..0933c27 --- /dev/null +++ b/js/strftime.js | |||
@@ -0,0 +1,146 @@ | |||
1 | /** | ||
2 | * | ||
3 | * This program is free software; you can redistribute it and/or modify it | ||
4 | * under the terms of the GNU General Public License as published by the Free | ||
5 | * Software Foundation; either version 2 of the License, or (at your option) | ||
6 | * any later version. | ||
7 | * | ||
8 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
11 | * more details. | ||
12 | |||
13 | * You should have received a copy of the GNU General Public License along | ||
14 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
15 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA | ||
16 | |||
17 | **/ | ||
18 | |||
19 | "use strict"; | ||
20 | |||
21 | function strftime (fmt, time) | ||
22 | { | ||
23 | var d = new Date(time*1000); | ||
24 | |||
25 | var days = [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ]; | ||
26 | var fdays = [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; | ||
27 | var months = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ]; | ||
28 | var fmonths = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; | ||
29 | |||
30 | function pad2 (number) | ||
31 | { | ||
32 | return (number < 10 ? '0' : '') + number | ||
33 | }; | ||
34 | |||
35 | function pad3(number) | ||
36 | { | ||
37 | return (number < 10 ? '00' : number < 100 ? '0' : '') + number | ||
38 | }; | ||
39 | |||
40 | function lpad (str, padString, length) | ||
41 | { | ||
42 | while (str.length < length) | ||
43 | str = padString + str; | ||
44 | return str; | ||
45 | }; | ||
46 | |||
47 | function format(match, opt) | ||
48 | { | ||
49 | if (match === '%%') return '%'; | ||
50 | |||
51 | switch (opt) { | ||
52 | case 'a': | ||
53 | return days[d.getDay()]; | ||
54 | break; | ||
55 | case 'A': | ||
56 | return fdays[d.getDay()]; | ||
57 | break; | ||
58 | case 'b': | ||
59 | return months[d.getMonth()]; | ||
60 | break; | ||
61 | case 'B': | ||
62 | return fmonths[d.getMonth()]; | ||
63 | break; | ||
64 | case 'c': | ||
65 | return d.toLocaleString(); | ||
66 | break; | ||
67 | case 'd': | ||
68 | return pad2(d.getDate()); | ||
69 | break; | ||
70 | case 'H': | ||
71 | return pad2(d.getHours()); | ||
72 | break; | ||
73 | case 'I': | ||
74 | var hours = d.getHours()%12; | ||
75 | return pad2(hours === 0 ? 12 : hours); | ||
76 | break; | ||
77 | case 'j': | ||
78 | var d01 = new Date (d.getFullYear(), 0, 1); | ||
79 | return pad3(Math.ceil((d.getTime()-d01.getTime())/86400000)+1); | ||
80 | break; | ||
81 | case 'm': | ||
82 | return pad2(d.getMonth()); | ||
83 | break; | ||
84 | case 'M': | ||
85 | return pad2(d.getMinutes()); | ||
86 | break; | ||
87 | case 'p': | ||
88 | return d.getHours() >= 12 ? 'PM' : 'AM'; | ||
89 | break; | ||
90 | case 's': | ||
91 | return pad2(d.getSeconds()); | ||
92 | break; | ||
93 | case 'S': | ||
94 | return d.getTime()/1000; | ||
95 | break; | ||
96 | case 'u': | ||
97 | return d.getDay() === 0 ? 7 : d.getDay(); | ||
98 | break; | ||
99 | case 'U': | ||
100 | var d01 = new Date(d.getFullYear(),0,1); | ||
101 | return pad2(Math.round((Math.ceil((d.getTime()-d01.getTime())/86400000)+1 + 6 - d.getDay())/7)); | ||
102 | break; | ||
103 | case 'V': | ||
104 | var d01 = new Date(d.getFullYear(), 0, 1); | ||
105 | var w = Math.round((Math.ceil((d.getTime()-d01.getTime())/86400000)+1 + 7 - (d.getDay() === 0 ? 7 : d.getDay()))/7); | ||
106 | var d31 = new Date(d.getFullYear(), 11, 31); | ||
107 | if (d01.getDay() < 4 && d01.getDay() > 1) w++; | ||
108 | if (w === 53 && d31.getDay() < 4) { | ||
109 | w = 1; | ||
110 | } else if (w === 0) { | ||
111 | d31 = new Date(d.getFullYear()-1, 11, 31); | ||
112 | d01 = new Date(d31.getFullYear(), 0, 1); | ||
113 | w = Math.round((Math.ceil((d31.getTime()-d01.getTime())/86400000)+1 + 7 - (d31.getDay() === 0 ? 7 : d31.getDay()))/7); | ||
114 | if (d01.getDay() < 4 && d01.getDay() > 1) w++; | ||
115 | if (w === 53 && d31.getDay() < 4) w = 1; | ||
116 | } | ||
117 | return pad2(w); | ||
118 | break; | ||
119 | case 'w': | ||
120 | return d.getDay(); | ||
121 | break; | ||
122 | case 'W': | ||
123 | var d01 = new Date(d.getFullYear(),0,1); | ||
124 | return pad2(Math.round((Math.ceil((d.getTime()-d01.getTime())/86400000)+1 + 7 - (d.getDay() === 0 ? 7 : d.getDay()))/7)); | ||
125 | break; | ||
126 | case 'x': | ||
127 | return pad2(d.getDate())+'/'+pad2(d.getMonth())+'/'+d.getFullYear() | ||
128 | break; | ||
129 | case 'X': | ||
130 | return pad2(d.getHours())+':'+pad2(d.getMinutes())+':'+pad2(d.getSeconds()); | ||
131 | break; | ||
132 | case 'y': | ||
133 | return pad2(d.getFullYear()%100); | ||
134 | break; | ||
135 | case 'Y': | ||
136 | return d.getFullYear(); | ||
137 | break; | ||
138 | case 'Z': | ||
139 | return d.toString().replace(/^.*\(([^)]+)\)$/, '$1'); | ||
140 | break; | ||
141 | default: | ||
142 | return match; | ||
143 | } | ||
144 | }; | ||
145 | return fmt.replace(/%([aAbBcdHIjmMpsSUVwWxXyYZ%])/g, format); | ||
146 | }; | ||