strftime-rails 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +37 -0
- data/lib/strftime/rails.rb +2 -0
- data/lib/strftime/rails/engine.rb +6 -0
- data/lib/strftime/rails/version.rb +5 -0
- data/vendor/assets/javascripts/strftime-rails/strftime-min.js +12 -0
- data/vendor/assets/javascripts/strftime-rails/strftime.js +629 -0
- metadata +51 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2e82c15e58b693d52f0a635d6d3ca506e85559fe
|
4
|
+
data.tar.gz: 3a322648025af32dad56f6c03e05dc284e479db7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 169e6ca1769462694653e930349756643df9c01d94556f7cf4a8fc545a76c5ffbfbddd6360f8e7b33bc6747f3341412fe63fa1dff4527d4d443670d509bf8244
|
7
|
+
data.tar.gz: a11bf9e042669ca3e74a517ea38629846c9e07769366e5d766e04514dad85f0761d7fc609d8ef4e88e90f9c914869961d92572df8970c267e87a1b4b83ccf55e
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015 Chris Cressman
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
strftime-rails
|
2
|
+
================================================================================
|
3
|
+
|
4
|
+
[strftime](https://github.com/samsonjs/strftime) for JavaScript, packaged for
|
5
|
+
the Rails asset pipeline.
|
6
|
+
|
7
|
+
|
8
|
+
Usage
|
9
|
+
--------------------------------------------------------------------------------
|
10
|
+
|
11
|
+
Add the gem to your Gemfile:
|
12
|
+
|
13
|
+
gem 'strftime-rails'
|
14
|
+
|
15
|
+
Load the library within an asset manifest such as `application.js`:
|
16
|
+
|
17
|
+
//= require strftime-rails/strftime
|
18
|
+
|
19
|
+
If you've included the gem in your Gemfile, Bundler will generally take care of
|
20
|
+
`require`ing the necessary files, but if for some reason you need to manually
|
21
|
+
`require` the gem:
|
22
|
+
|
23
|
+
require 'strftime/rails'
|
24
|
+
|
25
|
+
|
26
|
+
Versioning
|
27
|
+
--------------------------------------------------------------------------------
|
28
|
+
|
29
|
+
The version number of the gem mirrors the version number of strftime. For
|
30
|
+
example:
|
31
|
+
|
32
|
+
gem 'strftime-rails', '1.1.1'
|
33
|
+
|
34
|
+
will add strftime version 1.1.1 to the asset pipeline.
|
35
|
+
|
36
|
+
Should a bug be discovered in the gem only, a fourth version identifier will be
|
37
|
+
added and incremented.
|
@@ -0,0 +1,12 @@
|
|
1
|
+
(function(){function k(b,a){s[b]||(typeof console!=="undefined"&&typeof console.warn=="function"&&console.warn("[WARNING] "+b+" is deprecated and will be removed in version 1.0. Instead, use `"+a+"`."),s[b]=!0)}function t(b){b.localize=i.localize.bind(i);b.timezone=i.timezone.bind(i);b.utc=i.utc.bind(i)}function r(b,a,e){a&&a.days&&(e=a,a=void 0);e&&k("`"+g+"(format, [date], [locale])`","var s = "+g+".localize(locale); s(format, [date])");return(e?i.localize(e):i)(b,a)}function u(b,a,e){e?k("`"+g+
|
2
|
+
".strftime(format, [date], [locale])`","var s = "+g+".localize(locale); s(format, [date])"):k("`"+g+".strftime(format, [date])`",g+"(format, [date])");return(e?i.localize(e):i)(b,a)}function p(b,a,e){function g(b,c,h,a){for(var d="",f=null,e=!1,i=b.length,j=!1,o=0;o<i;o++){var n=b.charCodeAt(o);if(e===!0)if(n===45)f="";else if(n===95)f=" ";else if(n===48)f="0";else if(n===58)j&&typeof console!=="undefined"&&typeof console.warn=="function"&&console.warn("[WARNING] detected use of unsupported %:: or %::: modifiers to strftime"),
|
3
|
+
j=!0;else{switch(n){case 65:d+=h.days[c.getDay()];break;case 66:d+=h.months[c.getMonth()];break;case 67:d+=l(Math.floor(c.getFullYear()/100),f);break;case 68:d+=g(h.formats.D,c,h,a);break;case 70:d+=g(h.formats.F,c,h,a);break;case 72:d+=l(c.getHours(),f);break;case 73:d+=l(v(c.getHours()),f);break;case 76:d+=Math.floor(a%1E3)>99?Math.floor(a%1E3):Math.floor(a%1E3)>9?"0"+Math.floor(a%1E3):"00"+Math.floor(a%1E3);break;case 77:d+=l(c.getMinutes(),f);break;case 80:d+=c.getHours()<12?h.am:h.pm;break;case 82:d+=
|
4
|
+
g(h.formats.R,c,h,a);break;case 83:d+=l(c.getSeconds(),f);break;case 84:d+=g(h.formats.T,c,h,a);break;case 85:d+=l(w(c,"sunday"),f);break;case 87:d+=l(w(c,"monday"),f);break;case 88:d+=g(h.formats.X,c,h,a);break;case 89:d+=c.getFullYear();break;case 90:k&&m===0?d+="GMT":(f=c.toString().match(/\(([\w\s]+)\)/),d+=f&&f[1]||"");break;case 97:d+=h.shortDays[c.getDay()];break;case 98:d+=h.shortMonths[c.getMonth()];break;case 99:d+=g(h.formats.c,c,h,a);break;case 100:d+=l(c.getDate(),f);break;case 101:d+=
|
5
|
+
l(c.getDate(),f==null?" ":f);break;case 104:d+=h.shortMonths[c.getMonth()];break;case 106:f=new Date(c.getFullYear(),0,1);f=Math.ceil((c.getTime()-f.getTime())/864E5);d+=f>99?f:f>9?"0"+f:"00"+f;break;case 107:d+=l(c.getHours(),f==null?" ":f);break;case 108:d+=l(v(c.getHours()),f==null?" ":f);break;case 109:d+=l(c.getMonth()+1,f);break;case 110:d+="\n";break;case 111:d+=String(c.getDate())+A(c.getDate());break;case 112:d+=c.getHours()<12?h.AM:h.PM;break;case 114:d+=g(h.formats.r,c,h,a);break;case 115:d+=
|
6
|
+
Math.floor(a/1E3);break;case 116:d+="\t";break;case 117:f=c.getDay();d+=f===0?7:f;break;case 118:d+=g(h.formats.v,c,h,a);break;case 119:d+=c.getDay();break;case 120:d+=g(h.formats.x,c,h,a);break;case 121:d+=(""+c.getFullYear()).slice(2);break;case 122:k&&m===0?d+=j?"+00:00":"+0000":(f=m!==0?m/6E4:-c.getTimezoneOffset(),e=j?":":"",n=Math.abs(f%60),d+=(f<0?"-":"+")+l(Math.floor(Math.abs(f/60)))+e+l(n));break;default:d+=b[o]}f=null;e=!1}else n===37?e=!0:d+=b[o]}return d}var i=b||x,m=a||0,k=e||!1,j=0,
|
7
|
+
q,b=function(b,c){var a;c?(a=c.getTime(),k&&(c=new Date(c.getTime()+(c.getTimezoneOffset()||0)*6E4+m))):(a=Date.now(),a>j?(j=a,q=new Date(j),a=j,k&&(q=new Date(j+(q.getTimezoneOffset()||0)*6E4+m))):a=j,c=q);return g(b,c,i,a)};b.localize=function(a){return new p(a||i,m,k)};b.timezone=function(a){var c=m,b=k,e=typeof a;if(e==="number"||e==="string")b=!0,e==="string"?(c=a[0]==="-"?-1:1,e=parseInt(a.slice(1,3),10),a=parseInt(a.slice(3,5),10),c=c*(60*e+a)*6E4):e==="number"&&(c=a*6E4);return new p(i,c,
|
8
|
+
b)};b.utc=function(){return new p(i,m,!0)};return b}function l(b,a){if(a===""||b>9)return b;a==null&&(a="0");return a+b}function v(b){if(b===0)return 12;else if(b>12)return b-12;return b}function w(b,a){var a=a||"sunday",e=b.getDay();a==="monday"&&(e===0?e=6:e--);var g=Date.UTC(b.getFullYear(),0,1),i=Date.UTC(b.getFullYear(),b.getMonth(),b.getDate());return Math.floor((Math.floor((i-g)/864E5)+7-e)/7)}function A(b){var a=b%10;b%=100;if(b>=11&&b<=13||a===0||a>=4)return"th";switch(a){case 1:return"st";
|
9
|
+
case 2:return"nd";case 3:return"rd"}}var x={days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],AM:"AM",PM:"PM",am:"am",pm:"pm",formats:{D:"%m/%d/%y",F:"%Y-%m-%d",R:"%H:%M",T:"%H:%M:%S",X:"%T",c:"%a %b %d %X %Y",r:"%I:%M:%S %p",
|
10
|
+
v:"%e-%b-%Y",x:"%D"}},i=new p(x,0,!1),y=typeof module!=="undefined",j;y?(j=module.exports=r,j.strftime=u):(j=function(){return this||(0,eval)("this")}(),j.strftime=r);var g=y?"require('strftime')":"strftime",s={};j.strftimeTZ=function(b,a,e,j){if((typeof e=="number"||typeof e=="string")&&j==null)j=e,e=void 0;e?k("`"+g+".strftimeTZ(format, date, locale, tz)`","var s = "+g+".localize(locale).timezone(tz); s(format, [date])` or `var s = "+g+".localize(locale); s.timezone(tz)(format, [date])"):k("`"+
|
11
|
+
g+".strftimeTZ(format, date, tz)`","var s = "+g+".timezone(tz); s(format, [date])` or `"+g+".timezone(tz)(format, [date])");return(e?i.localize(e):i).timezone(j)(b,a)};j.strftimeUTC=function(b,a,e){e?k("`"+g+".strftimeUTC(format, date, locale)`","var s = "+g+".localize(locale).utc(); s(format, [date])"):k("`"+g+".strftimeUTC(format, [date])`","var s = "+g+".utc(); s(format, [date])");return(e?z.localize(e):z)(b,a)};j.localizedStrftime=function(b){k("`"+g+".localizedStrftime(locale)`",g+".localize(locale)");
|
12
|
+
return i.localize(b)};t(r);t(u);var z=i.utc();if(typeof Date.now!=="function")Date.now=function(){return+new Date}})();
|
@@ -0,0 +1,629 @@
|
|
1
|
+
//
|
2
|
+
// strftime
|
3
|
+
// github.com/samsonjs/strftime
|
4
|
+
// @_sjs
|
5
|
+
//
|
6
|
+
// Copyright 2010 - 2015 Sami Samhuri <sami@samhuri.net>
|
7
|
+
//
|
8
|
+
// MIT License
|
9
|
+
// http://sjs.mit-license.org
|
10
|
+
//
|
11
|
+
|
12
|
+
;(function() {
|
13
|
+
|
14
|
+
var DefaultLocale = {
|
15
|
+
days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
|
16
|
+
shortDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
|
17
|
+
months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
|
18
|
+
shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
|
19
|
+
AM: 'AM',
|
20
|
+
PM: 'PM',
|
21
|
+
am: 'am',
|
22
|
+
pm: 'pm',
|
23
|
+
formats: {
|
24
|
+
D: '%m/%d/%y',
|
25
|
+
F: '%Y-%m-%d',
|
26
|
+
R: '%H:%M',
|
27
|
+
T: '%H:%M:%S',
|
28
|
+
X: '%T',
|
29
|
+
c: '%a %b %d %X %Y',
|
30
|
+
r: '%I:%M:%S %p',
|
31
|
+
v: '%e-%b-%Y',
|
32
|
+
x: '%D'
|
33
|
+
}
|
34
|
+
},
|
35
|
+
defaultStrftime = new Strftime(DefaultLocale, 0, false),
|
36
|
+
isCommonJS = typeof module !== 'undefined',
|
37
|
+
namespace;
|
38
|
+
|
39
|
+
// CommonJS / Node module
|
40
|
+
if (isCommonJS) {
|
41
|
+
namespace = module.exports = adaptedStrftime;
|
42
|
+
namespace.strftime = deprecatedStrftime;
|
43
|
+
}
|
44
|
+
// Browsers and other environments
|
45
|
+
else {
|
46
|
+
// Get the global object. Works in ES3, ES5, and ES5 strict mode.
|
47
|
+
namespace = (function() { return this || (1,eval)('this'); }());
|
48
|
+
namespace.strftime = adaptedStrftime;
|
49
|
+
}
|
50
|
+
|
51
|
+
// Deprecated API, to be removed in v1.0
|
52
|
+
var _require = isCommonJS ? "require('strftime')" : "strftime";
|
53
|
+
var _deprecationWarnings = {};
|
54
|
+
function deprecationWarning(name, instead) {
|
55
|
+
if (!_deprecationWarnings[name]) {
|
56
|
+
if (typeof console !== 'undefined' && typeof console.warn == 'function') {
|
57
|
+
console.warn("[WARNING] " + name + " is deprecated and will be removed in version 1.0. Instead, use `" + instead + "`.");
|
58
|
+
}
|
59
|
+
_deprecationWarnings[name] = true;
|
60
|
+
}
|
61
|
+
}
|
62
|
+
|
63
|
+
namespace.strftimeTZ = deprecatedStrftimeTZ;
|
64
|
+
namespace.strftimeUTC = deprecatedStrftimeUTC;
|
65
|
+
namespace.localizedStrftime = deprecatedStrftimeLocalized;
|
66
|
+
|
67
|
+
// Adapt the old API while preserving the new API.
|
68
|
+
function adaptForwards(fn) {
|
69
|
+
fn.localize = defaultStrftime.localize.bind(defaultStrftime);
|
70
|
+
fn.timezone = defaultStrftime.timezone.bind(defaultStrftime);
|
71
|
+
fn.utc = defaultStrftime.utc.bind(defaultStrftime);
|
72
|
+
}
|
73
|
+
|
74
|
+
adaptForwards(adaptedStrftime);
|
75
|
+
function adaptedStrftime(fmt, d, locale) {
|
76
|
+
// d and locale are optional, check if this is (format, locale)
|
77
|
+
if (d && d.days) {
|
78
|
+
locale = d;
|
79
|
+
d = undefined;
|
80
|
+
}
|
81
|
+
if (locale) {
|
82
|
+
deprecationWarning("`" + _require + "(format, [date], [locale])`", "var s = " + _require + ".localize(locale); s(format, [date])");
|
83
|
+
}
|
84
|
+
var strftime = locale ? defaultStrftime.localize(locale) : defaultStrftime;
|
85
|
+
return strftime(fmt, d);
|
86
|
+
}
|
87
|
+
|
88
|
+
adaptForwards(deprecatedStrftime);
|
89
|
+
function deprecatedStrftime(fmt, d, locale) {
|
90
|
+
if (locale) {
|
91
|
+
deprecationWarning("`" + _require + ".strftime(format, [date], [locale])`", "var s = " + _require + ".localize(locale); s(format, [date])");
|
92
|
+
}
|
93
|
+
else {
|
94
|
+
deprecationWarning("`" + _require + ".strftime(format, [date])`", _require + "(format, [date])");
|
95
|
+
}
|
96
|
+
var strftime = locale ? defaultStrftime.localize(locale) : defaultStrftime;
|
97
|
+
return strftime(fmt, d);
|
98
|
+
}
|
99
|
+
|
100
|
+
function deprecatedStrftimeTZ(fmt, d, locale, timezone) {
|
101
|
+
// locale is optional, check if this is (format, date, timezone)
|
102
|
+
if ((typeof locale == 'number' || typeof locale == 'string') && timezone == null) {
|
103
|
+
timezone = locale;
|
104
|
+
locale = undefined;
|
105
|
+
}
|
106
|
+
|
107
|
+
if (locale) {
|
108
|
+
deprecationWarning("`" + _require + ".strftimeTZ(format, date, locale, tz)`", "var s = " + _require + ".localize(locale).timezone(tz); s(format, [date])` or `var s = " + _require + ".localize(locale); s.timezone(tz)(format, [date])");
|
109
|
+
}
|
110
|
+
else {
|
111
|
+
deprecationWarning("`" + _require + ".strftimeTZ(format, date, tz)`", "var s = " + _require + ".timezone(tz); s(format, [date])` or `" + _require + ".timezone(tz)(format, [date])");
|
112
|
+
}
|
113
|
+
|
114
|
+
var strftime = (locale ? defaultStrftime.localize(locale) : defaultStrftime).timezone(timezone);
|
115
|
+
return strftime(fmt, d);
|
116
|
+
}
|
117
|
+
|
118
|
+
var utcStrftime = defaultStrftime.utc();
|
119
|
+
function deprecatedStrftimeUTC(fmt, d, locale) {
|
120
|
+
if (locale) {
|
121
|
+
deprecationWarning("`" + _require + ".strftimeUTC(format, date, locale)`", "var s = " + _require + ".localize(locale).utc(); s(format, [date])");
|
122
|
+
}
|
123
|
+
else {
|
124
|
+
deprecationWarning("`" + _require + ".strftimeUTC(format, [date])`", "var s = " + _require + ".utc(); s(format, [date])");
|
125
|
+
}
|
126
|
+
var strftime = locale ? utcStrftime.localize(locale) : utcStrftime;
|
127
|
+
return strftime(fmt, d);
|
128
|
+
}
|
129
|
+
|
130
|
+
function deprecatedStrftimeLocalized(locale) {
|
131
|
+
deprecationWarning("`" + _require + ".localizedStrftime(locale)`", _require + ".localize(locale)");
|
132
|
+
return defaultStrftime.localize(locale);
|
133
|
+
}
|
134
|
+
// End of deprecated API
|
135
|
+
|
136
|
+
// Polyfill Date.now for old browsers.
|
137
|
+
if (typeof Date.now !== 'function') {
|
138
|
+
Date.now = function() {
|
139
|
+
return +new Date();
|
140
|
+
};
|
141
|
+
}
|
142
|
+
|
143
|
+
function Strftime(locale, customTimezoneOffset, useUtcTimezone) {
|
144
|
+
var _locale = locale || DefaultLocale,
|
145
|
+
_customTimezoneOffset = customTimezoneOffset || 0,
|
146
|
+
_useUtcBasedDate = useUtcTimezone || false,
|
147
|
+
|
148
|
+
// we store unix timestamp value here to not create new Date() each iteration (each millisecond)
|
149
|
+
// Date.now() is 2 times faster than new Date()
|
150
|
+
// while millisecond precise is enough here
|
151
|
+
// this could be very helpful when strftime triggered a lot of times one by one
|
152
|
+
_cachedDateTimestamp = 0,
|
153
|
+
_cachedDate;
|
154
|
+
|
155
|
+
function _strftime(format, date) {
|
156
|
+
var timestamp;
|
157
|
+
|
158
|
+
if (!date) {
|
159
|
+
var currentTimestamp = Date.now();
|
160
|
+
if (currentTimestamp > _cachedDateTimestamp) {
|
161
|
+
_cachedDateTimestamp = currentTimestamp;
|
162
|
+
_cachedDate = new Date(_cachedDateTimestamp);
|
163
|
+
|
164
|
+
timestamp = _cachedDateTimestamp;
|
165
|
+
|
166
|
+
if (_useUtcBasedDate) {
|
167
|
+
// how to avoid duplication of date instantiation for utc here?
|
168
|
+
// we tied to getTimezoneOffset of the current date
|
169
|
+
_cachedDate = new Date(_cachedDateTimestamp + getTimestampToUtcOffsetFor(_cachedDate) + _customTimezoneOffset);
|
170
|
+
}
|
171
|
+
}
|
172
|
+
else {
|
173
|
+
timestamp = _cachedDateTimestamp;
|
174
|
+
}
|
175
|
+
date = _cachedDate;
|
176
|
+
}
|
177
|
+
else {
|
178
|
+
timestamp = date.getTime();
|
179
|
+
|
180
|
+
if (_useUtcBasedDate) {
|
181
|
+
date = new Date(date.getTime() + getTimestampToUtcOffsetFor(date) + _customTimezoneOffset);
|
182
|
+
}
|
183
|
+
}
|
184
|
+
|
185
|
+
return _processFormat(format, date, _locale, timestamp);
|
186
|
+
}
|
187
|
+
|
188
|
+
function _processFormat(format, date, locale, timestamp) {
|
189
|
+
var resultString = '',
|
190
|
+
padding = null,
|
191
|
+
isInScope = false,
|
192
|
+
length = format.length,
|
193
|
+
extendedTZ = false;
|
194
|
+
|
195
|
+
for (var i = 0; i < length; i++) {
|
196
|
+
|
197
|
+
var currentCharCode = format.charCodeAt(i);
|
198
|
+
|
199
|
+
if (isInScope === true) {
|
200
|
+
// '-'
|
201
|
+
if (currentCharCode === 45) {
|
202
|
+
padding = '';
|
203
|
+
continue;
|
204
|
+
}
|
205
|
+
// '_'
|
206
|
+
else if (currentCharCode === 95) {
|
207
|
+
padding = ' ';
|
208
|
+
continue;
|
209
|
+
}
|
210
|
+
// '0'
|
211
|
+
else if (currentCharCode === 48) {
|
212
|
+
padding = '0';
|
213
|
+
continue;
|
214
|
+
}
|
215
|
+
// ':'
|
216
|
+
else if (currentCharCode === 58) {
|
217
|
+
if (extendedTZ) {
|
218
|
+
if (typeof console !== 'undefined' && typeof console.warn == 'function') {
|
219
|
+
console.warn("[WARNING] detected use of unsupported %:: or %::: modifiers to strftime");
|
220
|
+
}
|
221
|
+
}
|
222
|
+
extendedTZ = true;
|
223
|
+
continue;
|
224
|
+
}
|
225
|
+
|
226
|
+
switch (currentCharCode) {
|
227
|
+
|
228
|
+
// Examples for new Date(0) in GMT
|
229
|
+
|
230
|
+
// 'Thursday'
|
231
|
+
// case 'A':
|
232
|
+
case 65:
|
233
|
+
resultString += locale.days[date.getDay()];
|
234
|
+
break;
|
235
|
+
|
236
|
+
// 'January'
|
237
|
+
// case 'B':
|
238
|
+
case 66:
|
239
|
+
resultString += locale.months[date.getMonth()];
|
240
|
+
break;
|
241
|
+
|
242
|
+
// '19'
|
243
|
+
// case 'C':
|
244
|
+
case 67:
|
245
|
+
resultString += padTill2(Math.floor(date.getFullYear() / 100), padding);
|
246
|
+
break;
|
247
|
+
|
248
|
+
// '01/01/70'
|
249
|
+
// case 'D':
|
250
|
+
case 68:
|
251
|
+
resultString += _processFormat(locale.formats.D, date, locale, timestamp);
|
252
|
+
break;
|
253
|
+
|
254
|
+
// '1970-01-01'
|
255
|
+
// case 'F':
|
256
|
+
case 70:
|
257
|
+
resultString += _processFormat(locale.formats.F, date, locale, timestamp);
|
258
|
+
break;
|
259
|
+
|
260
|
+
// '00'
|
261
|
+
// case 'H':
|
262
|
+
case 72:
|
263
|
+
resultString += padTill2(date.getHours(), padding);
|
264
|
+
break;
|
265
|
+
|
266
|
+
// '12'
|
267
|
+
// case 'I':
|
268
|
+
case 73:
|
269
|
+
resultString += padTill2(hours12(date.getHours()), padding);
|
270
|
+
break;
|
271
|
+
|
272
|
+
// '000'
|
273
|
+
// case 'L':
|
274
|
+
case 76:
|
275
|
+
resultString += padTill3(Math.floor(timestamp % 1000));
|
276
|
+
break;
|
277
|
+
|
278
|
+
// '00'
|
279
|
+
// case 'M':
|
280
|
+
case 77:
|
281
|
+
resultString += padTill2(date.getMinutes(), padding);
|
282
|
+
break;
|
283
|
+
|
284
|
+
// 'am'
|
285
|
+
// case 'P':
|
286
|
+
case 80:
|
287
|
+
resultString += date.getHours() < 12 ? locale.am : locale.pm;
|
288
|
+
break;
|
289
|
+
|
290
|
+
// '00:00'
|
291
|
+
// case 'R':
|
292
|
+
case 82:
|
293
|
+
resultString += _processFormat(locale.formats.R, date, locale, timestamp);
|
294
|
+
break;
|
295
|
+
|
296
|
+
// '00'
|
297
|
+
// case 'S':
|
298
|
+
case 83:
|
299
|
+
resultString += padTill2(date.getSeconds(), padding);
|
300
|
+
break;
|
301
|
+
|
302
|
+
// '00:00:00'
|
303
|
+
// case 'T':
|
304
|
+
case 84:
|
305
|
+
resultString += _processFormat(locale.formats.T, date, locale, timestamp);
|
306
|
+
break;
|
307
|
+
|
308
|
+
// '00'
|
309
|
+
// case 'U':
|
310
|
+
case 85:
|
311
|
+
resultString += padTill2(weekNumber(date, 'sunday'), padding);
|
312
|
+
break;
|
313
|
+
|
314
|
+
// '00'
|
315
|
+
// case 'W':
|
316
|
+
case 87:
|
317
|
+
resultString += padTill2(weekNumber(date, 'monday'), padding);
|
318
|
+
break;
|
319
|
+
|
320
|
+
// '16:00:00'
|
321
|
+
// case 'X':
|
322
|
+
case 88:
|
323
|
+
resultString += _processFormat(locale.formats.X, date, locale, timestamp);
|
324
|
+
break;
|
325
|
+
|
326
|
+
// '1970'
|
327
|
+
// case 'Y':
|
328
|
+
case 89:
|
329
|
+
resultString += date.getFullYear();
|
330
|
+
break;
|
331
|
+
|
332
|
+
// 'GMT'
|
333
|
+
// case 'Z':
|
334
|
+
case 90:
|
335
|
+
if (_useUtcBasedDate && _customTimezoneOffset === 0) {
|
336
|
+
resultString += "GMT";
|
337
|
+
}
|
338
|
+
else {
|
339
|
+
// fixme optimize
|
340
|
+
var tzString = date.toString().match(/\(([\w\s]+)\)/);
|
341
|
+
resultString += tzString && tzString[1] || '';
|
342
|
+
}
|
343
|
+
break;
|
344
|
+
|
345
|
+
// 'Thu'
|
346
|
+
// case 'a':
|
347
|
+
case 97:
|
348
|
+
resultString += locale.shortDays[date.getDay()];
|
349
|
+
break;
|
350
|
+
|
351
|
+
// 'Jan'
|
352
|
+
// case 'b':
|
353
|
+
case 98:
|
354
|
+
resultString += locale.shortMonths[date.getMonth()];
|
355
|
+
break;
|
356
|
+
|
357
|
+
// ''
|
358
|
+
// case 'c':
|
359
|
+
case 99:
|
360
|
+
resultString += _processFormat(locale.formats.c, date, locale, timestamp);
|
361
|
+
break;
|
362
|
+
|
363
|
+
// '01'
|
364
|
+
// case 'd':
|
365
|
+
case 100:
|
366
|
+
resultString += padTill2(date.getDate(), padding);
|
367
|
+
break;
|
368
|
+
|
369
|
+
// ' 1'
|
370
|
+
// case 'e':
|
371
|
+
case 101:
|
372
|
+
resultString += padTill2(date.getDate(), padding == null ? ' ' : padding);
|
373
|
+
break;
|
374
|
+
|
375
|
+
// 'Jan'
|
376
|
+
// case 'h':
|
377
|
+
case 104:
|
378
|
+
resultString += locale.shortMonths[date.getMonth()];
|
379
|
+
break;
|
380
|
+
|
381
|
+
// '000'
|
382
|
+
// case 'j':
|
383
|
+
case 106:
|
384
|
+
var y = new Date(date.getFullYear(), 0, 1);
|
385
|
+
var day = Math.ceil((date.getTime() - y.getTime()) / (1000 * 60 * 60 * 24));
|
386
|
+
resultString += padTill3(day);
|
387
|
+
break;
|
388
|
+
|
389
|
+
// ' 0'
|
390
|
+
// case 'k':
|
391
|
+
case 107:
|
392
|
+
resultString += padTill2(date.getHours(), padding == null ? ' ' : padding);
|
393
|
+
break;
|
394
|
+
|
395
|
+
// '12'
|
396
|
+
// case 'l':
|
397
|
+
case 108:
|
398
|
+
resultString += padTill2(hours12(date.getHours()), padding == null ? ' ' : padding);
|
399
|
+
break;
|
400
|
+
|
401
|
+
// '01'
|
402
|
+
// case 'm':
|
403
|
+
case 109:
|
404
|
+
resultString += padTill2(date.getMonth() + 1, padding);
|
405
|
+
break;
|
406
|
+
|
407
|
+
// '\n'
|
408
|
+
// case 'n':
|
409
|
+
case 110:
|
410
|
+
resultString += '\n';
|
411
|
+
break;
|
412
|
+
|
413
|
+
// '1st'
|
414
|
+
// case 'o':
|
415
|
+
case 111:
|
416
|
+
resultString += String(date.getDate()) + ordinal(date.getDate());
|
417
|
+
break;
|
418
|
+
|
419
|
+
// 'AM'
|
420
|
+
// case 'p':
|
421
|
+
case 112:
|
422
|
+
resultString += date.getHours() < 12 ? locale.AM : locale.PM;
|
423
|
+
break;
|
424
|
+
|
425
|
+
// '12:00:00 AM'
|
426
|
+
// case 'r':
|
427
|
+
case 114:
|
428
|
+
resultString += _processFormat(locale.formats.r, date, locale, timestamp);
|
429
|
+
break;
|
430
|
+
|
431
|
+
// '0'
|
432
|
+
// case 's':
|
433
|
+
case 115:
|
434
|
+
resultString += Math.floor(timestamp / 1000);
|
435
|
+
break;
|
436
|
+
|
437
|
+
// '\t'
|
438
|
+
// case 't':
|
439
|
+
case 116:
|
440
|
+
resultString += '\t';
|
441
|
+
break;
|
442
|
+
|
443
|
+
// '4'
|
444
|
+
// case 'u':
|
445
|
+
case 117:
|
446
|
+
var day = date.getDay();
|
447
|
+
resultString += day === 0 ? 7 : day;
|
448
|
+
break; // 1 - 7, Monday is first day of the week
|
449
|
+
|
450
|
+
// ' 1-Jan-1970'
|
451
|
+
// case 'v':
|
452
|
+
case 118:
|
453
|
+
resultString += _processFormat(locale.formats.v, date, locale, timestamp);
|
454
|
+
break;
|
455
|
+
|
456
|
+
// '4'
|
457
|
+
// case 'w':
|
458
|
+
case 119:
|
459
|
+
resultString += date.getDay();
|
460
|
+
break; // 0 - 6, Sunday is first day of the week
|
461
|
+
|
462
|
+
// '12/31/69'
|
463
|
+
// case 'x':
|
464
|
+
case 120:
|
465
|
+
resultString += _processFormat(locale.formats.x, date, locale, timestamp);
|
466
|
+
break;
|
467
|
+
|
468
|
+
// '70'
|
469
|
+
// case 'y':
|
470
|
+
case 121:
|
471
|
+
resultString += ('' + date.getFullYear()).slice(2);
|
472
|
+
break;
|
473
|
+
|
474
|
+
// '+0000'
|
475
|
+
// case 'z':
|
476
|
+
case 122:
|
477
|
+
if (_useUtcBasedDate && _customTimezoneOffset === 0) {
|
478
|
+
resultString += extendedTZ ? "+00:00" : "+0000";
|
479
|
+
}
|
480
|
+
else {
|
481
|
+
var off;
|
482
|
+
if (_customTimezoneOffset !== 0) {
|
483
|
+
off = _customTimezoneOffset / (60 * 1000);
|
484
|
+
}
|
485
|
+
else {
|
486
|
+
off = -date.getTimezoneOffset();
|
487
|
+
}
|
488
|
+
var sign = off < 0 ? '-' : '+';
|
489
|
+
var sep = extendedTZ ? ':' : '';
|
490
|
+
var hours = Math.floor(Math.abs(off / 60));
|
491
|
+
var mins = Math.abs(off % 60);
|
492
|
+
resultString += sign + padTill2(hours) + sep + padTill2(mins);
|
493
|
+
}
|
494
|
+
break;
|
495
|
+
|
496
|
+
default:
|
497
|
+
resultString += format[i];
|
498
|
+
break;
|
499
|
+
}
|
500
|
+
|
501
|
+
padding = null;
|
502
|
+
isInScope = false;
|
503
|
+
continue;
|
504
|
+
}
|
505
|
+
|
506
|
+
// '%'
|
507
|
+
if (currentCharCode === 37) {
|
508
|
+
isInScope = true;
|
509
|
+
continue;
|
510
|
+
}
|
511
|
+
|
512
|
+
resultString += format[i];
|
513
|
+
}
|
514
|
+
|
515
|
+
return resultString;
|
516
|
+
}
|
517
|
+
|
518
|
+
var strftime = _strftime;
|
519
|
+
|
520
|
+
strftime.localize = function(locale) {
|
521
|
+
return new Strftime(locale || _locale, _customTimezoneOffset, _useUtcBasedDate);
|
522
|
+
};
|
523
|
+
|
524
|
+
strftime.timezone = function(timezone) {
|
525
|
+
var customTimezoneOffset = _customTimezoneOffset;
|
526
|
+
var useUtcBasedDate = _useUtcBasedDate;
|
527
|
+
|
528
|
+
var timezoneType = typeof timezone;
|
529
|
+
if (timezoneType === 'number' || timezoneType === 'string') {
|
530
|
+
useUtcBasedDate = true;
|
531
|
+
|
532
|
+
// ISO 8601 format timezone string, [-+]HHMM
|
533
|
+
if (timezoneType === 'string') {
|
534
|
+
var sign = timezone[0] === '-' ? -1 : 1,
|
535
|
+
hours = parseInt(timezone.slice(1, 3), 10),
|
536
|
+
minutes = parseInt(timezone.slice(3, 5), 10);
|
537
|
+
|
538
|
+
customTimezoneOffset = sign * ((60 * hours) + minutes) * 60 * 1000;
|
539
|
+
// in minutes: 420
|
540
|
+
}
|
541
|
+
else if (timezoneType === 'number') {
|
542
|
+
customTimezoneOffset = timezone * 60 * 1000;
|
543
|
+
}
|
544
|
+
}
|
545
|
+
|
546
|
+
return new Strftime(_locale, customTimezoneOffset, useUtcBasedDate);
|
547
|
+
};
|
548
|
+
|
549
|
+
strftime.utc = function() {
|
550
|
+
return new Strftime(_locale, _customTimezoneOffset, true);
|
551
|
+
};
|
552
|
+
|
553
|
+
return strftime;
|
554
|
+
}
|
555
|
+
|
556
|
+
function padTill2(numberToPad, paddingChar) {
|
557
|
+
if (paddingChar === '' || numberToPad > 9) {
|
558
|
+
return numberToPad;
|
559
|
+
}
|
560
|
+
if (paddingChar == null) {
|
561
|
+
paddingChar = '0';
|
562
|
+
}
|
563
|
+
return paddingChar + numberToPad;
|
564
|
+
}
|
565
|
+
|
566
|
+
function padTill3(numberToPad) {
|
567
|
+
if (numberToPad > 99) {
|
568
|
+
return numberToPad;
|
569
|
+
}
|
570
|
+
if (numberToPad > 9) {
|
571
|
+
return '0' + numberToPad;
|
572
|
+
}
|
573
|
+
return '00' + numberToPad;
|
574
|
+
}
|
575
|
+
|
576
|
+
function hours12(hour) {
|
577
|
+
if (hour === 0) {
|
578
|
+
return 12;
|
579
|
+
}
|
580
|
+
else if (hour > 12) {
|
581
|
+
return hour - 12;
|
582
|
+
}
|
583
|
+
return hour;
|
584
|
+
}
|
585
|
+
|
586
|
+
// firstWeekday: 'sunday' or 'monday', default is 'sunday'
|
587
|
+
//
|
588
|
+
// Pilfered & ported from Ruby's strftime implementation.
|
589
|
+
function weekNumber(date, firstWeekday) {
|
590
|
+
firstWeekday = firstWeekday || 'sunday';
|
591
|
+
|
592
|
+
// This works by shifting the weekday back by one day if we
|
593
|
+
// are treating Monday as the first day of the week.
|
594
|
+
var weekday = date.getDay();
|
595
|
+
if (firstWeekday === 'monday') {
|
596
|
+
if (weekday === 0) // Sunday
|
597
|
+
weekday = 6;
|
598
|
+
else
|
599
|
+
weekday--;
|
600
|
+
}
|
601
|
+
|
602
|
+
var firstDayOfYearUtc = Date.UTC(date.getFullYear(), 0, 1),
|
603
|
+
dateUtc = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()),
|
604
|
+
yday = Math.floor((dateUtc - firstDayOfYearUtc) / 86400000),
|
605
|
+
weekNum = (yday + 7 - weekday) / 7;
|
606
|
+
|
607
|
+
return Math.floor(weekNum);
|
608
|
+
}
|
609
|
+
|
610
|
+
// Get the ordinal suffix for a number: st, nd, rd, or th
|
611
|
+
function ordinal(number) {
|
612
|
+
var i = number % 10;
|
613
|
+
var ii = number % 100;
|
614
|
+
|
615
|
+
if ((ii >= 11 && ii <= 13) || i === 0 || i >= 4) {
|
616
|
+
return 'th';
|
617
|
+
}
|
618
|
+
switch (i) {
|
619
|
+
case 1: return 'st';
|
620
|
+
case 2: return 'nd';
|
621
|
+
case 3: return 'rd';
|
622
|
+
}
|
623
|
+
}
|
624
|
+
|
625
|
+
function getTimestampToUtcOffsetFor(date) {
|
626
|
+
return (date.getTimezoneOffset() || 0) * 60000;
|
627
|
+
}
|
628
|
+
|
629
|
+
}());
|
metadata
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: strftime-rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Chris Cressman
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-09-18 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: 'strftime for JavaScript, packaged for the Rails asset '
|
14
|
+
email:
|
15
|
+
- ccressman@weblinc.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- LICENSE
|
21
|
+
- README.md
|
22
|
+
- lib/strftime/rails.rb
|
23
|
+
- lib/strftime/rails/engine.rb
|
24
|
+
- lib/strftime/rails/version.rb
|
25
|
+
- vendor/assets/javascripts/strftime-rails/strftime-min.js
|
26
|
+
- vendor/assets/javascripts/strftime-rails/strftime.js
|
27
|
+
homepage: http://github.com/chriscressman/strftime-rails
|
28
|
+
licenses:
|
29
|
+
- MIT
|
30
|
+
metadata: {}
|
31
|
+
post_install_message:
|
32
|
+
rdoc_options: []
|
33
|
+
require_paths:
|
34
|
+
- lib
|
35
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
requirements: []
|
46
|
+
rubyforge_project:
|
47
|
+
rubygems_version: 2.4.8
|
48
|
+
signing_key:
|
49
|
+
specification_version: 4
|
50
|
+
summary: strftime for JavaScript, packaged for the Rails asset
|
51
|
+
test_files: []
|