date-and-time 3.3.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/PLUGINS.md CHANGED
@@ -380,6 +380,45 @@ In the first example above, if you want `parseTZ()` to parse the time as PST, yo
380
380
  date.parse('Nov 7 2021 1:59:59 -0800', 'MMM D YYYY H:mm:ss Z'); // => 2021-11-07T09:59:59Z
381
381
  ```
382
382
 
383
+ #### Token Extension
384
+
385
+ This plugin also adds tokens for time zone name to the formatter.
386
+
387
+ **formatter:**
388
+
389
+ | token | meaning | output examples |
390
+ |:------|:----------------------------|:----------------------|
391
+ | z | time zone name abbreviation | PST, EST |
392
+ | zz | time zone name | Pacific Standard Time |
393
+
394
+ The `z` and `zz` are lowercase. Also, currently it does not support output other than English.
395
+
396
+ **parser:**
397
+
398
+ There is no change.
399
+
400
+ ```javascript
401
+ const date = require('date-and-time');
402
+ // Import "timezone" plugin.
403
+ const timezone = require('date-and-time/plugin/timezone');
404
+
405
+ // Apply "timezone" plugin to the library.
406
+ date.plugin(timezone);
407
+
408
+ const d1 = new Date(Date.UTC(2021, 2, 14, 9, 59, 59, 999));
409
+ date.format(d1, 'MMMM DD YYYY H:mm:ss.SSS zz');
410
+ // March 14 2021 1:59:59.999 Pacific Standard Time
411
+
412
+ date.format(d1, 'MMMM DD YYYY H:mm:ss.SSS zz', true);
413
+ // March 14 2021 9:59:59.999 Coordinated Universal Time
414
+
415
+ date.formatTZ(d1, 'MMMM DD YYYY H:mm:ss.SSS z', 'Asia/Tokyo');
416
+ // March 14 2021 18:59:59.999 JST
417
+
418
+ // Transforms the date string from EST (Eastern Standard Time) to PDT (Pacific Daylight Time).
419
+ date.transform('2021-11-07T03:59:59 UTC-0500', 'YYYY-MM-DD[T]HH:mm:ss [UTC]Z', 'MMMM D YYYY H:mm:ss z');
420
+ // November 7 2021 1:59:59 PDT
421
+ ```
383
422
  ---
384
423
 
385
424
  ### two-digit-year
package/README.md CHANGED
@@ -25,16 +25,16 @@ npm i date-and-time
25
25
 
26
26
  ## Recent Changes
27
27
 
28
+ - 3.4.0
29
+ - Added `zz` (time zone name) and `z` (time zone name abbreviation) tokens to the `timezone` plugin.
30
+ - Fixed an issue where token extensions by other plugins were not reflected in functions provided by the `timezone` plugin.
31
+
28
32
  - 3.3.0
29
33
  - Refactored `format()`, `isValid()`, and `preparse()`, further improved performance.
30
34
 
31
35
  - 3.2.0
32
36
  - Refactored `compile()`, `format()`, and `preparse()`, slightly improved performance.
33
37
 
34
- - 3.1.1
35
- - Fixed an issue where `format()` could output incorrect UTC times in locales with daylight savings time.
36
- - Refactored `formatTZ()` of `timezone` plugin.
37
-
38
38
  ## Usage
39
39
 
40
40
  - ES Modules:
@@ -179,12 +179,14 @@ Available tokens and their meanings are as follows:
179
179
 
180
180
  You can also use the following tokens by importing plugins. See [PLUGINS.md](./PLUGINS.md) for details.
181
181
 
182
- | token | meaning | examples of output |
183
- |:------|:-------------------------------------|:-------------------|
184
- | DDD | ordinal notation of date | 1st, 2nd, 3rd |
185
- | AA | meridiem (uppercase with ellipsis) | A.M., P.M. |
186
- | a | meridiem (lowercase) | am, pm |
187
- | aa | meridiem (lowercase with ellipsis) | a.m., p.m. |
182
+ | token | meaning | examples of output |
183
+ |:------|:-------------------------------------|:----------------------|
184
+ | DDD | ordinal notation of date | 1st, 2nd, 3rd |
185
+ | AA | meridiem (uppercase with ellipsis) | A.M., P.M. |
186
+ | a | meridiem (lowercase) | am, pm |
187
+ | aa | meridiem (lowercase with ellipsis) | a.m., p.m. |
188
+ | z | time zone name abbreviation | PST, EST |
189
+ | zz | time zone name | Pacific Standard Time |
188
190
 
189
191
  #### Note 1. Comments
190
192
 
@@ -296,7 +296,7 @@ export type Extension = {
296
296
  export function extend(extension: Extension): void;
297
297
 
298
298
  /** Plugin installer */
299
- export type Plugin = (proto: unknown, localized_proto?: unknown) => string;
299
+ export type Plugin = (proto: unknown, date?: unknown) => string;
300
300
 
301
301
  /**
302
302
  * Importing plugins
package/date-and-time.js CHANGED
@@ -142,7 +142,6 @@
142
142
  _formatter: _formatter,
143
143
  _parser: _parser
144
144
  },
145
- localized_proto,
146
145
  date;
147
146
 
148
147
  /**
@@ -177,6 +176,7 @@
177
176
  u.getMilliseconds = u.getUTCMilliseconds;
178
177
  u.getDay = u.getUTCDay;
179
178
  u.getTimezoneOffset = function () { return 0; };
179
+ u.getTimezoneName = function () { return 'UTC'; };
180
180
  return u;
181
181
  }
182
182
  return dateObj;
@@ -453,7 +453,6 @@
453
453
  }
454
454
  };
455
455
 
456
- localized_proto = extend(proto);
457
456
  date = extend(proto);
458
457
 
459
458
  /**
@@ -474,8 +473,8 @@
474
473
  var formatter = extend(_formatter, extension.formatter, true, res);
475
474
  var parser = extend(_parser, extension.parser, true, res);
476
475
 
477
- date._formatter = localized_proto._formatter = formatter;
478
- date._parser = localized_proto._parser = parser;
476
+ date._formatter = formatter;
477
+ date._parser = parser;
479
478
 
480
479
  for (var plugin in plugins) {
481
480
  date.extend(plugins[plugin]);
@@ -512,7 +511,7 @@
512
511
  var install = typeof plugin === 'function' ? plugin : date.plugin[plugin];
513
512
 
514
513
  if (install) {
515
- date.extend(plugins[install(proto, localized_proto)] || {});
514
+ date.extend(plugins[install(proto, date)] || {});
516
515
  }
517
516
  };
518
517
 
@@ -1,4 +1,4 @@
1
1
  !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).date=t()}(this,(function(){"use strict";
2
2
  /**
3
3
  * @preserve date-and-time (c) KNOWLEDGECODE | MIT
4
- */var e,t,n={},r={},i="en",u={MMMM:["January","February","March","April","May","June","July","August","September","October","November","December"],MMM:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dddd:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],ddd:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dd:["Su","Mo","Tu","We","Th","Fr","Sa"],A:["AM","PM"]},s={YYYY:function(e){return("000"+e.getFullYear()).slice(-4)},YY:function(e){return("0"+e.getFullYear()).slice(-2)},Y:function(e){return""+e.getFullYear()},MMMM:function(e){return this.res.MMMM[e.getMonth()]},MMM:function(e){return this.res.MMM[e.getMonth()]},MM:function(e){return("0"+(e.getMonth()+1)).slice(-2)},M:function(e){return""+(e.getMonth()+1)},DD:function(e){return("0"+e.getDate()).slice(-2)},D:function(e){return""+e.getDate()},HH:function(e){return("0"+e.getHours()).slice(-2)},H:function(e){return""+e.getHours()},A:function(e){return this.res.A[e.getHours()>11|0]},hh:function(e){return("0"+(e.getHours()%12||12)).slice(-2)},h:function(e){return""+(e.getHours()%12||12)},mm:function(e){return("0"+e.getMinutes()).slice(-2)},m:function(e){return""+e.getMinutes()},ss:function(e){return("0"+e.getSeconds()).slice(-2)},s:function(e){return""+e.getSeconds()},SSS:function(e){return("00"+e.getMilliseconds()).slice(-3)},SS:function(e){return("0"+(e.getMilliseconds()/10|0)).slice(-2)},S:function(e){return""+(e.getMilliseconds()/100|0)},dddd:function(e){return this.res.dddd[e.getDay()]},ddd:function(e){return this.res.ddd[e.getDay()]},dd:function(e){return this.res.dd[e.getDay()]},Z:function(e){var t=e.getTimezoneOffset()/.6|0;return(t>0?"-":"+")+("000"+Math.abs(t-(t%100*.4|0))).slice(-4)},ZZ:function(e){var t=e.getTimezoneOffset(),n=Math.abs(t);return(t>0?"-":"+")+("0"+(n/60|0)).slice(-2)+":"+("0"+n%60).slice(-2)},post:function(e){return e},res:u},o={YYYY:function(e){return this.exec(/^\d{4}/,e)},Y:function(e){return this.exec(/^\d{1,4}/,e)},MMMM:function(e){var t=this.find(this.res.MMMM,e);return t.value++,t},MMM:function(e){var t=this.find(this.res.MMM,e);return t.value++,t},MM:function(e){return this.exec(/^\d\d/,e)},M:function(e){return this.exec(/^\d\d?/,e)},DD:function(e){return this.exec(/^\d\d/,e)},D:function(e){return this.exec(/^\d\d?/,e)},HH:function(e){return this.exec(/^\d\d/,e)},H:function(e){return this.exec(/^\d\d?/,e)},A:function(e){return this.find(this.res.A,e)},hh:function(e){return this.exec(/^\d\d/,e)},h:function(e){return this.exec(/^\d\d?/,e)},mm:function(e){return this.exec(/^\d\d/,e)},m:function(e){return this.exec(/^\d\d?/,e)},ss:function(e){return this.exec(/^\d\d/,e)},s:function(e){return this.exec(/^\d\d?/,e)},SSS:function(e){return this.exec(/^\d{1,3}/,e)},SS:function(e){var t=this.exec(/^\d\d?/,e);return t.value*=10,t},S:function(e){var t=this.exec(/^\d/,e);return t.value*=100,t},Z:function(e){var t=this.exec(/^[+-]\d{2}[0-5]\d/,e);return t.value=-60*(t.value/100|0)-t.value%100,t},ZZ:function(e){var t=/^([+-])(\d{2}):([0-5]\d)/.exec(e)||["","","",""];return{value:0-(60*(t[1]+t[2]|0)+(t[1]+t[3]|0)),length:t[0].length}},h12:function(e,t){return(12===e?0:e)+12*t},exec:function(e,t){var n=(e.exec(t)||[""])[0];return{value:0|n,length:n.length}},find:function(e,t){for(var n,r=-1,i=0,u=0,s=e.length;u<s;u++)n=e[u],!t.indexOf(n)&&n.length>i&&(r=u,i=n.length);return{value:r,length:i}},pre:function(e){return e},res:u},c=function(e,t,n,r){var i,u={};for(i in e)u[i]=e[i];for(i in t||{})!!n^!!u[i]||(u[i]=t[i]);return r&&(u.res=r),u},a={_formatter:s,_parser:o};return a.compile=function(e){return[e].concat(e.match(/\[(?:[^[\]]|\[[^[\]]*])*]|([A-Za-z])\1*|\.{3}|./g)||[])},a.format=function(e,n,r){for(var i,u=this||t,s="string"==typeof n?u.compile(n):n,o=u._formatter,c=function(){if(r){var t=new Date(e.getTime());return t.getFullYear=t.getUTCFullYear,t.getMonth=t.getUTCMonth,t.getDate=t.getUTCDate,t.getHours=t.getUTCHours,t.getMinutes=t.getUTCMinutes,t.getSeconds=t.getUTCSeconds,t.getMilliseconds=t.getUTCMilliseconds,t.getDay=t.getUTCDay,t.getTimezoneOffset=function(){return 0},t}return e}(),a=/^\[(.*)\]$/,d="",f=1,l=s.length;f<l;f++)d+=o[i=s[f]]?o.post(o[i](c,s[0])):a.test(i)?i.replace(a,"$1"):i;return d},a.preparse=function(e,n){var r=this||t,i="string"==typeof n?r.compile(n):n,u=r._parser,s={Y:1970,M:1,D:1,H:0,A:0,h:0,m:0,s:0,S:0,Z:0,_index:0,_length:0,_match:0},o=/^\[(.*)\]$/;e=u.pre(e);for(var c,a,d,f=1,l=i.length;f<l;f++)if(c=i[f],a=e.substring(s._index),u[c]){if(!(d=u[c](a,i[0])).length)break;s[d.token||c.charAt(0)]=d.value,s._index+=d.length,s._match++}else if(c===a.charAt(0)||" "===c)s._index++;else{if(!o.test(c)||a.indexOf(c.replace(o,"$1"))){if("..."===c){s._index=e.length;break}break}s._index+=c.length-2}return s.H=s.H||u.h12(s.h,s.A),s._length=e.length,s},a.parse=function(e,n,r){var i=this||t,u="string"==typeof n?i.compile(n):n,s=i.preparse(e,u);return i.isValid(s)?(s.M-=s.Y<100?22801:1,r||~i._parser.find(u,"ZZ").value?new Date(Date.UTC(s.Y,s.M,s.D,s.H,s.m+s.Z,s.s,s.S)):new Date(s.Y,s.M,s.D,s.H,s.m,s.s,s.S)):new Date(NaN)},a.isValid=function(e,n){var r="string"==typeof e?(this||t).preparse(e,n):e;return!(r._index<1||r._length<1||r._index-r._length||r._match<1||r.Y<1||r.Y>9999||r.M<1||r.M>12||r.D<1||r.D>new Date(r.Y,r.M,0).getDate()||r.H<0||r.H>23||r.m<0||r.m>59||r.s<0||r.s>59||r.S<0||r.S>999||r.Z<-840||r.Z>720)},a.transform=function(e,n,r,i){const u=this||t;return u.format(u.parse(e,n),r,i)},a.addYears=function(e,n,r){return(this||t).addMonths(e,12*n,r)},a.addMonths=function(e,n,r){var i=new Date(e.getTime());if(r){if(i.setUTCMonth(i.getUTCMonth()+n),i.getUTCDate()<e.getUTCDate())return(this||t).addDays(i,-i.getUTCDate(),r)}else if(i.setMonth(i.getMonth()+n),i.getDate()<e.getDate())return(this||t).addDays(i,-i.getDate(),r);return i},a.addDays=function(e,n,r){return(this||t).addHours(e,24*n,r)},a.addHours=function(e,n,r){return(this||t).addMinutes(e,60*n,r)},a.addMinutes=function(e,n,r){return(this||t).addSeconds(e,60*n,r)},a.addSeconds=function(e,n,r){return(this||t).addMilliseconds(e,1e3*n,r)},a.addMilliseconds=function(e,t,n){var r=new Date(e.getTime());return n?r.setUTCMilliseconds(r.getUTCMilliseconds()+t):r.setMilliseconds(r.getMilliseconds()+t),r},a.subtract=function(e,t){var n=e.getTime()-t.getTime();return{toMilliseconds:function(){return n},toSeconds:function(){return n/1e3},toMinutes:function(){return n/6e4},toHours:function(){return n/36e5},toDays:function(){return n/864e5}}},a.isLeapYear=function(e){return!((e%4||!(e%100))&&e%400)},a.isSameDay=function(e,t){return e.toDateString()===t.toDateString()},a.locale=function(e,t){n[e]||(n[e]=t)},a.plugin=function(e,t){r[e]||(r[e]=t)},e=c(a),(t=c(a)).locale=function(d){var f="function"==typeof d?d:t.locale[d];if(!f)return i;i=f(a);var l=n[i]||{},h=c(u,l.res,!0),g=c(s,l.formatter,!0,h),M=c(o,l.parser,!0,h);for(var p in t._formatter=e._formatter=g,t._parser=e._parser=M,r)t.extend(r[p]);return i},t.extend=function(e){var n=c(t._parser.res,e.res),r=e.extender||{};for(var i in t._formatter=c(t._formatter,e.formatter,!1,n),t._parser=c(t._parser,e.parser,!1,n),r)t[i]||(t[i]=r[i])},t.plugin=function(n){var i="function"==typeof n?n:t.plugin[n];i&&t.extend(r[i(a,e)]||{})},t}));
4
+ */var e,t={},n={},r="en",i={MMMM:["January","February","March","April","May","June","July","August","September","October","November","December"],MMM:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dddd:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],ddd:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dd:["Su","Mo","Tu","We","Th","Fr","Sa"],A:["AM","PM"]},u={YYYY:function(e){return("000"+e.getFullYear()).slice(-4)},YY:function(e){return("0"+e.getFullYear()).slice(-2)},Y:function(e){return""+e.getFullYear()},MMMM:function(e){return this.res.MMMM[e.getMonth()]},MMM:function(e){return this.res.MMM[e.getMonth()]},MM:function(e){return("0"+(e.getMonth()+1)).slice(-2)},M:function(e){return""+(e.getMonth()+1)},DD:function(e){return("0"+e.getDate()).slice(-2)},D:function(e){return""+e.getDate()},HH:function(e){return("0"+e.getHours()).slice(-2)},H:function(e){return""+e.getHours()},A:function(e){return this.res.A[e.getHours()>11|0]},hh:function(e){return("0"+(e.getHours()%12||12)).slice(-2)},h:function(e){return""+(e.getHours()%12||12)},mm:function(e){return("0"+e.getMinutes()).slice(-2)},m:function(e){return""+e.getMinutes()},ss:function(e){return("0"+e.getSeconds()).slice(-2)},s:function(e){return""+e.getSeconds()},SSS:function(e){return("00"+e.getMilliseconds()).slice(-3)},SS:function(e){return("0"+(e.getMilliseconds()/10|0)).slice(-2)},S:function(e){return""+(e.getMilliseconds()/100|0)},dddd:function(e){return this.res.dddd[e.getDay()]},ddd:function(e){return this.res.ddd[e.getDay()]},dd:function(e){return this.res.dd[e.getDay()]},Z:function(e){var t=e.getTimezoneOffset()/.6|0;return(t>0?"-":"+")+("000"+Math.abs(t-(t%100*.4|0))).slice(-4)},ZZ:function(e){var t=e.getTimezoneOffset(),n=Math.abs(t);return(t>0?"-":"+")+("0"+(n/60|0)).slice(-2)+":"+("0"+n%60).slice(-2)},post:function(e){return e},res:i},o={YYYY:function(e){return this.exec(/^\d{4}/,e)},Y:function(e){return this.exec(/^\d{1,4}/,e)},MMMM:function(e){var t=this.find(this.res.MMMM,e);return t.value++,t},MMM:function(e){var t=this.find(this.res.MMM,e);return t.value++,t},MM:function(e){return this.exec(/^\d\d/,e)},M:function(e){return this.exec(/^\d\d?/,e)},DD:function(e){return this.exec(/^\d\d/,e)},D:function(e){return this.exec(/^\d\d?/,e)},HH:function(e){return this.exec(/^\d\d/,e)},H:function(e){return this.exec(/^\d\d?/,e)},A:function(e){return this.find(this.res.A,e)},hh:function(e){return this.exec(/^\d\d/,e)},h:function(e){return this.exec(/^\d\d?/,e)},mm:function(e){return this.exec(/^\d\d/,e)},m:function(e){return this.exec(/^\d\d?/,e)},ss:function(e){return this.exec(/^\d\d/,e)},s:function(e){return this.exec(/^\d\d?/,e)},SSS:function(e){return this.exec(/^\d{1,3}/,e)},SS:function(e){var t=this.exec(/^\d\d?/,e);return t.value*=10,t},S:function(e){var t=this.exec(/^\d/,e);return t.value*=100,t},Z:function(e){var t=this.exec(/^[+-]\d{2}[0-5]\d/,e);return t.value=-60*(t.value/100|0)-t.value%100,t},ZZ:function(e){var t=/^([+-])(\d{2}):([0-5]\d)/.exec(e)||["","","",""];return{value:0-(60*(t[1]+t[2]|0)+(t[1]+t[3]|0)),length:t[0].length}},h12:function(e,t){return(12===e?0:e)+12*t},exec:function(e,t){var n=(e.exec(t)||[""])[0];return{value:0|n,length:n.length}},find:function(e,t){for(var n,r=-1,i=0,u=0,o=e.length;u<o;u++)n=e[u],!t.indexOf(n)&&n.length>i&&(r=u,i=n.length);return{value:r,length:i}},pre:function(e){return e},res:i},s=function(e,t,n,r){var i,u={};for(i in e)u[i]=e[i];for(i in t||{})!!n^!!u[i]||(u[i]=t[i]);return r&&(u.res=r),u},c={_formatter:u,_parser:o};return c.compile=function(e){return[e].concat(e.match(/\[(?:[^[\]]|\[[^[\]]*])*]|([A-Za-z])\1*|\.{3}|./g)||[])},c.format=function(t,n,r){for(var i,u=this||e,o="string"==typeof n?u.compile(n):n,s=u._formatter,c=function(){if(r){var e=new Date(t.getTime());return e.getFullYear=e.getUTCFullYear,e.getMonth=e.getUTCMonth,e.getDate=e.getUTCDate,e.getHours=e.getUTCHours,e.getMinutes=e.getUTCMinutes,e.getSeconds=e.getUTCSeconds,e.getMilliseconds=e.getUTCMilliseconds,e.getDay=e.getUTCDay,e.getTimezoneOffset=function(){return 0},e.getTimezoneName=function(){return"UTC"},e}return t}(),a=/^\[(.*)\]$/,d="",f=1,l=o.length;f<l;f++)d+=s[i=o[f]]?s.post(s[i](c,o[0])):a.test(i)?i.replace(a,"$1"):i;return d},c.preparse=function(t,n){var r=this||e,i="string"==typeof n?r.compile(n):n,u=r._parser,o={Y:1970,M:1,D:1,H:0,A:0,h:0,m:0,s:0,S:0,Z:0,_index:0,_length:0,_match:0},s=/^\[(.*)\]$/;t=u.pre(t);for(var c,a,d,f=1,l=i.length;f<l;f++)if(c=i[f],a=t.substring(o._index),u[c]){if(!(d=u[c](a,i[0])).length)break;o[d.token||c.charAt(0)]=d.value,o._index+=d.length,o._match++}else if(c===a.charAt(0)||" "===c)o._index++;else{if(!s.test(c)||a.indexOf(c.replace(s,"$1"))){if("..."===c){o._index=t.length;break}break}o._index+=c.length-2}return o.H=o.H||u.h12(o.h,o.A),o._length=t.length,o},c.parse=function(t,n,r){var i=this||e,u="string"==typeof n?i.compile(n):n,o=i.preparse(t,u);return i.isValid(o)?(o.M-=o.Y<100?22801:1,r||~i._parser.find(u,"ZZ").value?new Date(Date.UTC(o.Y,o.M,o.D,o.H,o.m+o.Z,o.s,o.S)):new Date(o.Y,o.M,o.D,o.H,o.m,o.s,o.S)):new Date(NaN)},c.isValid=function(t,n){var r="string"==typeof t?(this||e).preparse(t,n):t;return!(r._index<1||r._length<1||r._index-r._length||r._match<1||r.Y<1||r.Y>9999||r.M<1||r.M>12||r.D<1||r.D>new Date(r.Y,r.M,0).getDate()||r.H<0||r.H>23||r.m<0||r.m>59||r.s<0||r.s>59||r.S<0||r.S>999||r.Z<-840||r.Z>720)},c.transform=function(t,n,r,i){const u=this||e;return u.format(u.parse(t,n),r,i)},c.addYears=function(t,n,r){return(this||e).addMonths(t,12*n,r)},c.addMonths=function(t,n,r){var i=new Date(t.getTime());if(r){if(i.setUTCMonth(i.getUTCMonth()+n),i.getUTCDate()<t.getUTCDate())return(this||e).addDays(i,-i.getUTCDate(),r)}else if(i.setMonth(i.getMonth()+n),i.getDate()<t.getDate())return(this||e).addDays(i,-i.getDate(),r);return i},c.addDays=function(t,n,r){return(this||e).addHours(t,24*n,r)},c.addHours=function(t,n,r){return(this||e).addMinutes(t,60*n,r)},c.addMinutes=function(t,n,r){return(this||e).addSeconds(t,60*n,r)},c.addSeconds=function(t,n,r){return(this||e).addMilliseconds(t,1e3*n,r)},c.addMilliseconds=function(e,t,n){var r=new Date(e.getTime());return n?r.setUTCMilliseconds(r.getUTCMilliseconds()+t):r.setMilliseconds(r.getMilliseconds()+t),r},c.subtract=function(e,t){var n=e.getTime()-t.getTime();return{toMilliseconds:function(){return n},toSeconds:function(){return n/1e3},toMinutes:function(){return n/6e4},toHours:function(){return n/36e5},toDays:function(){return n/864e5}}},c.isLeapYear=function(e){return!((e%4||!(e%100))&&e%400)},c.isSameDay=function(e,t){return e.toDateString()===t.toDateString()},c.locale=function(e,n){t[e]||(t[e]=n)},c.plugin=function(e,t){n[e]||(n[e]=t)},(e=s(c)).locale=function(a){var d="function"==typeof a?a:e.locale[a];if(!d)return r;r=d(c);var f=t[r]||{},l=s(i,f.res,!0),h=s(u,f.formatter,!0,l),g=s(o,f.parser,!0,l);for(var M in e._formatter=h,e._parser=g,n)e.extend(n[M]);return r},e.extend=function(t){var n=s(e._parser.res,t.res),r=t.extender||{};for(var i in e._formatter=s(e._formatter,t.formatter,!1,n),e._parser=s(e._parser,t.parser,!1,n),r)e[i]||(e[i]=r[i])},e.plugin=function(t){var r="function"==typeof t?t:e.plugin[t];r&&e.extend(n[r(c,e)]||{})},e}));
@@ -136,7 +136,6 @@ var locales = {},
136
136
  _formatter: _formatter,
137
137
  _parser: _parser
138
138
  },
139
- localized_proto,
140
139
  date;
141
140
 
142
141
  /**
@@ -171,6 +170,7 @@ proto.format = function (dateObj, arg, utc) {
171
170
  u.getMilliseconds = u.getUTCMilliseconds;
172
171
  u.getDay = u.getUTCDay;
173
172
  u.getTimezoneOffset = function () { return 0; };
173
+ u.getTimezoneName = function () { return 'UTC'; };
174
174
  return u;
175
175
  }
176
176
  return dateObj;
@@ -447,7 +447,6 @@ proto.plugin = function (name, plugin) {
447
447
  }
448
448
  };
449
449
 
450
- localized_proto = extend(proto);
451
450
  date = extend(proto);
452
451
 
453
452
  /**
@@ -468,8 +467,8 @@ date.locale = function (locale) {
468
467
  var formatter = extend(_formatter, extension.formatter, true, res);
469
468
  var parser = extend(_parser, extension.parser, true, res);
470
469
 
471
- date._formatter = localized_proto._formatter = formatter;
472
- date._parser = localized_proto._parser = parser;
470
+ date._formatter = formatter;
471
+ date._parser = parser;
473
472
 
474
473
  for (var plugin in plugins) {
475
474
  date.extend(plugins[plugin]);
@@ -506,7 +505,7 @@ date.plugin = function (plugin) {
506
505
  var install = typeof plugin === 'function' ? plugin : date.plugin[plugin];
507
506
 
508
507
  if (install) {
509
- date.extend(plugins[install(proto, localized_proto)] || {});
508
+ date.extend(plugins[install(proto, date)] || {});
510
509
  }
511
510
  };
512
511
 
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * @preserve date-and-time (c) KNOWLEDGECODE | MIT
3
3
  */
4
- var e,t,n={},r={},i="en",u={MMMM:["January","February","March","April","May","June","July","August","September","October","November","December"],MMM:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dddd:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],ddd:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dd:["Su","Mo","Tu","We","Th","Fr","Sa"],A:["AM","PM"]},s={YYYY:function(e){return("000"+e.getFullYear()).slice(-4)},YY:function(e){return("0"+e.getFullYear()).slice(-2)},Y:function(e){return""+e.getFullYear()},MMMM:function(e){return this.res.MMMM[e.getMonth()]},MMM:function(e){return this.res.MMM[e.getMonth()]},MM:function(e){return("0"+(e.getMonth()+1)).slice(-2)},M:function(e){return""+(e.getMonth()+1)},DD:function(e){return("0"+e.getDate()).slice(-2)},D:function(e){return""+e.getDate()},HH:function(e){return("0"+e.getHours()).slice(-2)},H:function(e){return""+e.getHours()},A:function(e){return this.res.A[e.getHours()>11|0]},hh:function(e){return("0"+(e.getHours()%12||12)).slice(-2)},h:function(e){return""+(e.getHours()%12||12)},mm:function(e){return("0"+e.getMinutes()).slice(-2)},m:function(e){return""+e.getMinutes()},ss:function(e){return("0"+e.getSeconds()).slice(-2)},s:function(e){return""+e.getSeconds()},SSS:function(e){return("00"+e.getMilliseconds()).slice(-3)},SS:function(e){return("0"+(e.getMilliseconds()/10|0)).slice(-2)},S:function(e){return""+(e.getMilliseconds()/100|0)},dddd:function(e){return this.res.dddd[e.getDay()]},ddd:function(e){return this.res.ddd[e.getDay()]},dd:function(e){return this.res.dd[e.getDay()]},Z:function(e){var t=e.getTimezoneOffset()/.6|0;return(t>0?"-":"+")+("000"+Math.abs(t-(t%100*.4|0))).slice(-4)},ZZ:function(e){var t=e.getTimezoneOffset(),n=Math.abs(t);return(t>0?"-":"+")+("0"+(n/60|0)).slice(-2)+":"+("0"+n%60).slice(-2)},post:function(e){return e},res:u},o={YYYY:function(e){return this.exec(/^\d{4}/,e)},Y:function(e){return this.exec(/^\d{1,4}/,e)},MMMM:function(e){var t=this.find(this.res.MMMM,e);return t.value++,t},MMM:function(e){var t=this.find(this.res.MMM,e);return t.value++,t},MM:function(e){return this.exec(/^\d\d/,e)},M:function(e){return this.exec(/^\d\d?/,e)},DD:function(e){return this.exec(/^\d\d/,e)},D:function(e){return this.exec(/^\d\d?/,e)},HH:function(e){return this.exec(/^\d\d/,e)},H:function(e){return this.exec(/^\d\d?/,e)},A:function(e){return this.find(this.res.A,e)},hh:function(e){return this.exec(/^\d\d/,e)},h:function(e){return this.exec(/^\d\d?/,e)},mm:function(e){return this.exec(/^\d\d/,e)},m:function(e){return this.exec(/^\d\d?/,e)},ss:function(e){return this.exec(/^\d\d/,e)},s:function(e){return this.exec(/^\d\d?/,e)},SSS:function(e){return this.exec(/^\d{1,3}/,e)},SS:function(e){var t=this.exec(/^\d\d?/,e);return t.value*=10,t},S:function(e){var t=this.exec(/^\d/,e);return t.value*=100,t},Z:function(e){var t=this.exec(/^[+-]\d{2}[0-5]\d/,e);return t.value=-60*(t.value/100|0)-t.value%100,t},ZZ:function(e){var t=/^([+-])(\d{2}):([0-5]\d)/.exec(e)||["","","",""];return{value:0-(60*(t[1]+t[2]|0)+(t[1]+t[3]|0)),length:t[0].length}},h12:function(e,t){return(12===e?0:e)+12*t},exec:function(e,t){var n=(e.exec(t)||[""])[0];return{value:0|n,length:n.length}},find:function(e,t){for(var n,r=-1,i=0,u=0,s=e.length;u<s;u++)n=e[u],!t.indexOf(n)&&n.length>i&&(r=u,i=n.length);return{value:r,length:i}},pre:function(e){return e},res:u},a=function(e,t,n,r){var i,u={};for(i in e)u[i]=e[i];for(i in t||{})!!n^!!u[i]||(u[i]=t[i]);return r&&(u.res=r),u},c={_formatter:s,_parser:o};c.compile=function(e){return[e].concat(e.match(/\[(?:[^[\]]|\[[^[\]]*])*]|([A-Za-z])\1*|\.{3}|./g)||[])},c.format=function(e,n,r){for(var i,u=this||t,s="string"==typeof n?u.compile(n):n,o=u._formatter,a=function(){if(r){var t=new Date(e.getTime());return t.getFullYear=t.getUTCFullYear,t.getMonth=t.getUTCMonth,t.getDate=t.getUTCDate,t.getHours=t.getUTCHours,t.getMinutes=t.getUTCMinutes,t.getSeconds=t.getUTCSeconds,t.getMilliseconds=t.getUTCMilliseconds,t.getDay=t.getUTCDay,t.getTimezoneOffset=function(){return 0},t}return e}(),c=/^\[(.*)\]$/,d="",f=1,l=s.length;f<l;f++)d+=o[i=s[f]]?o.post(o[i](a,s[0])):c.test(i)?i.replace(c,"$1"):i;return d},c.preparse=function(e,n){var r=this||t,i="string"==typeof n?r.compile(n):n,u=r._parser,s={Y:1970,M:1,D:1,H:0,A:0,h:0,m:0,s:0,S:0,Z:0,_index:0,_length:0,_match:0},o=/^\[(.*)\]$/;e=u.pre(e);for(var a,c,d,f=1,l=i.length;f<l;f++)if(a=i[f],c=e.substring(s._index),u[a]){if(!(d=u[a](c,i[0])).length)break;s[d.token||a.charAt(0)]=d.value,s._index+=d.length,s._match++}else if(a===c.charAt(0)||" "===a)s._index++;else{if(!o.test(a)||c.indexOf(a.replace(o,"$1"))){if("..."===a){s._index=e.length;break}break}s._index+=a.length-2}return s.H=s.H||u.h12(s.h,s.A),s._length=e.length,s},c.parse=function(e,n,r){var i=this||t,u="string"==typeof n?i.compile(n):n,s=i.preparse(e,u);return i.isValid(s)?(s.M-=s.Y<100?22801:1,r||~i._parser.find(u,"ZZ").value?new Date(Date.UTC(s.Y,s.M,s.D,s.H,s.m+s.Z,s.s,s.S)):new Date(s.Y,s.M,s.D,s.H,s.m,s.s,s.S)):new Date(NaN)},c.isValid=function(e,n){var r="string"==typeof e?(this||t).preparse(e,n):e;return!(r._index<1||r._length<1||r._index-r._length||r._match<1||r.Y<1||r.Y>9999||r.M<1||r.M>12||r.D<1||r.D>new Date(r.Y,r.M,0).getDate()||r.H<0||r.H>23||r.m<0||r.m>59||r.s<0||r.s>59||r.S<0||r.S>999||r.Z<-840||r.Z>720)},c.transform=function(e,n,r,i){const u=this||t;return u.format(u.parse(e,n),r,i)},c.addYears=function(e,n,r){return(this||t).addMonths(e,12*n,r)},c.addMonths=function(e,n,r){var i=new Date(e.getTime());if(r){if(i.setUTCMonth(i.getUTCMonth()+n),i.getUTCDate()<e.getUTCDate())return(this||t).addDays(i,-i.getUTCDate(),r)}else if(i.setMonth(i.getMonth()+n),i.getDate()<e.getDate())return(this||t).addDays(i,-i.getDate(),r);return i},c.addDays=function(e,n,r){return(this||t).addHours(e,24*n,r)},c.addHours=function(e,n,r){return(this||t).addMinutes(e,60*n,r)},c.addMinutes=function(e,n,r){return(this||t).addSeconds(e,60*n,r)},c.addSeconds=function(e,n,r){return(this||t).addMilliseconds(e,1e3*n,r)},c.addMilliseconds=function(e,t,n){var r=new Date(e.getTime());return n?r.setUTCMilliseconds(r.getUTCMilliseconds()+t):r.setMilliseconds(r.getMilliseconds()+t),r},c.subtract=function(e,t){var n=e.getTime()-t.getTime();return{toMilliseconds:function(){return n},toSeconds:function(){return n/1e3},toMinutes:function(){return n/6e4},toHours:function(){return n/36e5},toDays:function(){return n/864e5}}},c.isLeapYear=function(e){return!((e%4||!(e%100))&&e%400)},c.isSameDay=function(e,t){return e.toDateString()===t.toDateString()},c.locale=function(e,t){n[e]||(n[e]=t)},c.plugin=function(e,t){r[e]||(r[e]=t)},e=a(c),(t=a(c)).locale=function(d){var f="function"==typeof d?d:t.locale[d];if(!f)return i;i=f(c);var l=n[i]||{},h=a(u,l.res,!0),g=a(s,l.formatter,!0,h),M=a(o,l.parser,!0,h);for(var D in t._formatter=e._formatter=g,t._parser=e._parser=M,r)t.extend(r[D]);return i},t.extend=function(e){var n=a(t._parser.res,e.res),r=e.extender||{};for(var i in t._formatter=a(t._formatter,e.formatter,!1,n),t._parser=a(t._parser,e.parser,!1,n),r)t[i]||(t[i]=r[i])},t.plugin=function(n){var i="function"==typeof n?n:t.plugin[n];i&&t.extend(r[i(c,e)]||{})};var d=t;export{d as default};
4
+ var e,t={},n={},r="en",i={MMMM:["January","February","March","April","May","June","July","August","September","October","November","December"],MMM:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dddd:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],ddd:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dd:["Su","Mo","Tu","We","Th","Fr","Sa"],A:["AM","PM"]},u={YYYY:function(e){return("000"+e.getFullYear()).slice(-4)},YY:function(e){return("0"+e.getFullYear()).slice(-2)},Y:function(e){return""+e.getFullYear()},MMMM:function(e){return this.res.MMMM[e.getMonth()]},MMM:function(e){return this.res.MMM[e.getMonth()]},MM:function(e){return("0"+(e.getMonth()+1)).slice(-2)},M:function(e){return""+(e.getMonth()+1)},DD:function(e){return("0"+e.getDate()).slice(-2)},D:function(e){return""+e.getDate()},HH:function(e){return("0"+e.getHours()).slice(-2)},H:function(e){return""+e.getHours()},A:function(e){return this.res.A[e.getHours()>11|0]},hh:function(e){return("0"+(e.getHours()%12||12)).slice(-2)},h:function(e){return""+(e.getHours()%12||12)},mm:function(e){return("0"+e.getMinutes()).slice(-2)},m:function(e){return""+e.getMinutes()},ss:function(e){return("0"+e.getSeconds()).slice(-2)},s:function(e){return""+e.getSeconds()},SSS:function(e){return("00"+e.getMilliseconds()).slice(-3)},SS:function(e){return("0"+(e.getMilliseconds()/10|0)).slice(-2)},S:function(e){return""+(e.getMilliseconds()/100|0)},dddd:function(e){return this.res.dddd[e.getDay()]},ddd:function(e){return this.res.ddd[e.getDay()]},dd:function(e){return this.res.dd[e.getDay()]},Z:function(e){var t=e.getTimezoneOffset()/.6|0;return(t>0?"-":"+")+("000"+Math.abs(t-(t%100*.4|0))).slice(-4)},ZZ:function(e){var t=e.getTimezoneOffset(),n=Math.abs(t);return(t>0?"-":"+")+("0"+(n/60|0)).slice(-2)+":"+("0"+n%60).slice(-2)},post:function(e){return e},res:i},s={YYYY:function(e){return this.exec(/^\d{4}/,e)},Y:function(e){return this.exec(/^\d{1,4}/,e)},MMMM:function(e){var t=this.find(this.res.MMMM,e);return t.value++,t},MMM:function(e){var t=this.find(this.res.MMM,e);return t.value++,t},MM:function(e){return this.exec(/^\d\d/,e)},M:function(e){return this.exec(/^\d\d?/,e)},DD:function(e){return this.exec(/^\d\d/,e)},D:function(e){return this.exec(/^\d\d?/,e)},HH:function(e){return this.exec(/^\d\d/,e)},H:function(e){return this.exec(/^\d\d?/,e)},A:function(e){return this.find(this.res.A,e)},hh:function(e){return this.exec(/^\d\d/,e)},h:function(e){return this.exec(/^\d\d?/,e)},mm:function(e){return this.exec(/^\d\d/,e)},m:function(e){return this.exec(/^\d\d?/,e)},ss:function(e){return this.exec(/^\d\d/,e)},s:function(e){return this.exec(/^\d\d?/,e)},SSS:function(e){return this.exec(/^\d{1,3}/,e)},SS:function(e){var t=this.exec(/^\d\d?/,e);return t.value*=10,t},S:function(e){var t=this.exec(/^\d/,e);return t.value*=100,t},Z:function(e){var t=this.exec(/^[+-]\d{2}[0-5]\d/,e);return t.value=-60*(t.value/100|0)-t.value%100,t},ZZ:function(e){var t=/^([+-])(\d{2}):([0-5]\d)/.exec(e)||["","","",""];return{value:0-(60*(t[1]+t[2]|0)+(t[1]+t[3]|0)),length:t[0].length}},h12:function(e,t){return(12===e?0:e)+12*t},exec:function(e,t){var n=(e.exec(t)||[""])[0];return{value:0|n,length:n.length}},find:function(e,t){for(var n,r=-1,i=0,u=0,s=e.length;u<s;u++)n=e[u],!t.indexOf(n)&&n.length>i&&(r=u,i=n.length);return{value:r,length:i}},pre:function(e){return e},res:i},o=function(e,t,n,r){var i,u={};for(i in e)u[i]=e[i];for(i in t||{})!!n^!!u[i]||(u[i]=t[i]);return r&&(u.res=r),u},a={_formatter:u,_parser:s};a.compile=function(e){return[e].concat(e.match(/\[(?:[^[\]]|\[[^[\]]*])*]|([A-Za-z])\1*|\.{3}|./g)||[])},a.format=function(t,n,r){for(var i,u=this||e,s="string"==typeof n?u.compile(n):n,o=u._formatter,a=function(){if(r){var e=new Date(t.getTime());return e.getFullYear=e.getUTCFullYear,e.getMonth=e.getUTCMonth,e.getDate=e.getUTCDate,e.getHours=e.getUTCHours,e.getMinutes=e.getUTCMinutes,e.getSeconds=e.getUTCSeconds,e.getMilliseconds=e.getUTCMilliseconds,e.getDay=e.getUTCDay,e.getTimezoneOffset=function(){return 0},e.getTimezoneName=function(){return"UTC"},e}return t}(),c=/^\[(.*)\]$/,d="",f=1,l=s.length;f<l;f++)d+=o[i=s[f]]?o.post(o[i](a,s[0])):c.test(i)?i.replace(c,"$1"):i;return d},a.preparse=function(t,n){var r=this||e,i="string"==typeof n?r.compile(n):n,u=r._parser,s={Y:1970,M:1,D:1,H:0,A:0,h:0,m:0,s:0,S:0,Z:0,_index:0,_length:0,_match:0},o=/^\[(.*)\]$/;t=u.pre(t);for(var a,c,d,f=1,l=i.length;f<l;f++)if(a=i[f],c=t.substring(s._index),u[a]){if(!(d=u[a](c,i[0])).length)break;s[d.token||a.charAt(0)]=d.value,s._index+=d.length,s._match++}else if(a===c.charAt(0)||" "===a)s._index++;else{if(!o.test(a)||c.indexOf(a.replace(o,"$1"))){if("..."===a){s._index=t.length;break}break}s._index+=a.length-2}return s.H=s.H||u.h12(s.h,s.A),s._length=t.length,s},a.parse=function(t,n,r){var i=this||e,u="string"==typeof n?i.compile(n):n,s=i.preparse(t,u);return i.isValid(s)?(s.M-=s.Y<100?22801:1,r||~i._parser.find(u,"ZZ").value?new Date(Date.UTC(s.Y,s.M,s.D,s.H,s.m+s.Z,s.s,s.S)):new Date(s.Y,s.M,s.D,s.H,s.m,s.s,s.S)):new Date(NaN)},a.isValid=function(t,n){var r="string"==typeof t?(this||e).preparse(t,n):t;return!(r._index<1||r._length<1||r._index-r._length||r._match<1||r.Y<1||r.Y>9999||r.M<1||r.M>12||r.D<1||r.D>new Date(r.Y,r.M,0).getDate()||r.H<0||r.H>23||r.m<0||r.m>59||r.s<0||r.s>59||r.S<0||r.S>999||r.Z<-840||r.Z>720)},a.transform=function(t,n,r,i){const u=this||e;return u.format(u.parse(t,n),r,i)},a.addYears=function(t,n,r){return(this||e).addMonths(t,12*n,r)},a.addMonths=function(t,n,r){var i=new Date(t.getTime());if(r){if(i.setUTCMonth(i.getUTCMonth()+n),i.getUTCDate()<t.getUTCDate())return(this||e).addDays(i,-i.getUTCDate(),r)}else if(i.setMonth(i.getMonth()+n),i.getDate()<t.getDate())return(this||e).addDays(i,-i.getDate(),r);return i},a.addDays=function(t,n,r){return(this||e).addHours(t,24*n,r)},a.addHours=function(t,n,r){return(this||e).addMinutes(t,60*n,r)},a.addMinutes=function(t,n,r){return(this||e).addSeconds(t,60*n,r)},a.addSeconds=function(t,n,r){return(this||e).addMilliseconds(t,1e3*n,r)},a.addMilliseconds=function(e,t,n){var r=new Date(e.getTime());return n?r.setUTCMilliseconds(r.getUTCMilliseconds()+t):r.setMilliseconds(r.getMilliseconds()+t),r},a.subtract=function(e,t){var n=e.getTime()-t.getTime();return{toMilliseconds:function(){return n},toSeconds:function(){return n/1e3},toMinutes:function(){return n/6e4},toHours:function(){return n/36e5},toDays:function(){return n/864e5}}},a.isLeapYear=function(e){return!((e%4||!(e%100))&&e%400)},a.isSameDay=function(e,t){return e.toDateString()===t.toDateString()},a.locale=function(e,n){t[e]||(t[e]=n)},a.plugin=function(e,t){n[e]||(n[e]=t)},(e=o(a)).locale=function(c){var d="function"==typeof c?c:e.locale[c];if(!d)return r;r=d(a);var f=t[r]||{},l=o(i,f.res,!0),h=o(u,f.formatter,!0,l),g=o(s,f.parser,!0,l);for(var M in e._formatter=h,e._parser=g,n)e.extend(n[M]);return r},e.extend=function(t){var n=o(e._parser.res,t.res),r=t.extender||{};for(var i in e._formatter=o(e._formatter,t.formatter,!1,n),e._parser=o(e._parser,t.parser,!1,n),r)e[i]||(e[i]=r[i])},e.plugin=function(t){var r="function"==typeof t?t:e.plugin[t];r&&e.extend(n[r(a,e)]||{})};var c=e;export{c as default};
@@ -136,7 +136,6 @@ var locales = {},
136
136
  _formatter: _formatter,
137
137
  _parser: _parser
138
138
  },
139
- localized_proto,
140
139
  date;
141
140
 
142
141
  /**
@@ -171,6 +170,7 @@ proto.format = function (dateObj, arg, utc) {
171
170
  u.getMilliseconds = u.getUTCMilliseconds;
172
171
  u.getDay = u.getUTCDay;
173
172
  u.getTimezoneOffset = function () { return 0; };
173
+ u.getTimezoneName = function () { return 'UTC'; };
174
174
  return u;
175
175
  }
176
176
  return dateObj;
@@ -447,7 +447,6 @@ proto.plugin = function (name, plugin) {
447
447
  }
448
448
  };
449
449
 
450
- localized_proto = extend(proto);
451
450
  date = extend(proto);
452
451
 
453
452
  /**
@@ -468,8 +467,8 @@ date.locale = function (locale) {
468
467
  var formatter = extend(_formatter, extension.formatter, true, res);
469
468
  var parser = extend(_parser, extension.parser, true, res);
470
469
 
471
- date._formatter = localized_proto._formatter = formatter;
472
- date._parser = localized_proto._parser = parser;
470
+ date._formatter = formatter;
471
+ date._parser = parser;
473
472
 
474
473
  for (var plugin in plugins) {
475
474
  date.extend(plugins[plugin]);
@@ -506,7 +505,7 @@ date.plugin = function (plugin) {
506
505
  var install = typeof plugin === 'function' ? plugin : date.plugin[plugin];
507
506
 
508
507
  if (install) {
509
- date.extend(plugins[install(proto, localized_proto)] || {});
508
+ date.extend(plugins[install(proto, date)] || {});
510
509
  }
511
510
  };
512
511
 
@@ -3,12 +3,7 @@
3
3
  * @preserve timezone
4
4
  */
5
5
 
6
- var plugin = function (date, localized_date) {
7
- var options = {
8
- year: 'numeric', month: 'numeric', day: 'numeric',
9
- hour: 'numeric', minute: 'numeric', second: 'numeric'
10
- };
11
- var pattern = date.compile('M/D/Y, h:mm:ss A');
6
+ var plugin = function (proto, date) {
12
7
  var timeZones = {
13
8
  africa: {
14
9
  abidjan: [0, -968],
@@ -455,41 +450,173 @@ var plugin = function (date, localized_date) {
455
450
  wallis: [43200, 41524]
456
451
  }
457
452
  };
453
+ var timeZoneNames = {
454
+ 'Acre Standard Time': 'ACT', 'Acre Summer Time': 'ACST', 'Afghanistan Time': 'AFT',
455
+ 'Alaska Daylight Time': 'AKDT', 'Alaska Standard Time': 'AKST', 'Almaty Standard Time': 'ALMT',
456
+ 'Almaty Summer Time': 'ALMST', 'Amazon Standard Time': 'AMT', 'Amazon Summer Time': 'AMST',
457
+ 'Anadyr Standard Time': 'ANAT', 'Anadyr Summer Time': 'ANAST', 'Apia Daylight Time': 'WSDT',
458
+ 'Apia Standard Time': 'WSST', 'Aqtau Standard Time': 'AQTT', 'Aqtau Summer Time': 'AQTT',
459
+ 'Aqtobe Standard Time': 'AQTT', 'Aqtobe Summer Time': 'AQST', 'Arabian Daylight Time': 'ADT',
460
+ 'Arabian Standard Time': 'AST', 'Argentina Standard Time': 'ART', 'Argentina Summer Time': 'ARST',
461
+ 'Armenia Standard Time': 'AMT', 'Armenia Summer Time': 'AMST', 'Atlantic Daylight Time': 'ADT',
462
+ 'Atlantic Standard Time': 'AST', 'Australian Central Daylight Time': 'ACDT', 'Australian Central Standard Time': 'ACST',
463
+ 'Australian Central Western Daylight Time': 'ACWDT', 'Australian Central Western Standard Time': 'ACWST', 'Australian Eastern Daylight Time': 'AEDT',
464
+ 'Australian Eastern Standard Time': 'AEST', 'Australian Western Daylight Time': 'AWDT', 'Australian Western Standard Time': 'AWST',
465
+ 'Azerbaijan Standard Time': 'AZT', 'Azerbaijan Summer Time': 'AZST', 'Azores Standard Time': 'AZOT',
466
+ 'Azores Summer Time': 'AZOST', 'Bangladesh Standard Time': 'BST', 'Bangladesh Summer Time': 'BDST',
467
+ 'Bhutan Time': 'BTT', 'Bolivia Time': 'BOT', 'Brasilia Standard Time': 'BRT',
468
+ 'Brasilia Summer Time': 'BRST', 'British Summer Time': 'BST', 'Brunei Darussalam Time': 'BNT',
469
+ 'Cape Verde Standard Time': 'CVT', 'Casey Time': 'CAST', 'Central Africa Time': 'CAT',
470
+ 'Central Daylight Time': 'CDT', 'Central European Standard Time': 'CET', 'Central European Summer Time': 'CEST',
471
+ 'Central Indonesia Time': 'WITA', 'Central Standard Time': 'CST', 'Chamorro Standard Time': 'ChST',
472
+ 'Chatham Daylight Time': 'CHADT', 'Chatham Standard Time': 'CHAST', 'Chile Standard Time': 'CLT',
473
+ 'Chile Summer Time': 'CLST', 'China Daylight Time': 'CDT', 'China Standard Time': 'CST',
474
+ 'Choibalsan Standard Time': 'CHOT', 'Choibalsan Summer Time': 'CHOST', 'Christmas Island Time': 'CXT',
475
+ 'Chuuk Time': 'CHUT', 'Cocos Islands Time': 'CCT', 'Colombia Standard Time': 'COT',
476
+ 'Colombia Summer Time': 'COST', 'Cook Islands Half Summer Time': 'CKHST', 'Cook Islands Standard Time': 'CKT',
477
+ 'Coordinated Universal Time': 'UTC', 'Cuba Daylight Time': 'CDT', 'Cuba Standard Time': 'CST',
478
+ 'Davis Time': 'DAVT', 'Dumont-d’Urville Time': 'DDUT', 'East Africa Time': 'EAT',
479
+ 'East Greenland Standard Time': 'EGST', 'East Greenland Summer Time': 'EGST', 'East Kazakhstan Time': 'ALMT',
480
+ 'East Timor Time': 'TLT', 'Easter Island Standard Time': 'EAST', 'Easter Island Summer Time': 'EASST',
481
+ 'Eastern Daylight Time': 'EDT', 'Eastern European Standard Time': 'EET', 'Eastern European Summer Time': 'EEST',
482
+ 'Eastern Indonesia Time': 'WIT', 'Eastern Standard Time': 'EST', 'Ecuador Time': 'ECT',
483
+ 'Falkland Islands Standard Time': 'FKST', 'Falkland Islands Summer Time': 'FKDT', 'Fernando de Noronha Standard Time': 'FNT',
484
+ 'Fernando de Noronha Summer Time': 'FNST', 'Fiji Standard Time': 'FJT', 'Fiji Summer Time': 'FJST',
485
+ 'French Guiana Time': 'GFT', 'French Southern & Antarctic Time': 'TFT', 'Further-eastern European Time': 'FET',
486
+ 'GMT': 'GMT', 'Galapagos Time': 'GALT', 'Gambier Time': 'GAMT',
487
+ 'Georgia Standard Time': 'GET', 'Georgia Summer Time': 'GEST', 'Gilbert Islands Time': 'GILT',
488
+ 'Greenwich Mean Time': 'GMT', 'Guam Standard Time': 'ChST', 'Gulf Standard Time': 'GST',
489
+ 'Guyana Time': 'GYT', 'Hawaii-Aleutian Daylight Time': 'HADT', 'Hawaii-Aleutian Standard Time': 'HAST',
490
+ 'Hong Kong Standard Time': 'HKT', 'Hong Kong Summer Time': 'HKST', 'Hovd Standard Time': 'HOVT',
491
+ 'Hovd Summer Time': 'HOVST', 'India Standard Time': 'IST', 'Indian Ocean Time': 'IOT',
492
+ 'Indochina Time': 'ICT', 'Iran Daylight Time': 'IRDT', 'Iran Standard Time': 'IRST',
493
+ 'Irish Standard Time': 'IST', 'Irkutsk Standard Time': 'IRKT', 'Irkutsk Summer Time': 'IRKST',
494
+ 'Israel Daylight Time': 'IDT', 'Israel Standard Time': 'IST', 'Japan Standard Time': 'JST',
495
+ 'Korean Daylight Time': 'KDT', 'Korean Standard Time': 'KST', 'Kosrae Time': 'KOST',
496
+ 'Krasnoyarsk Standard Time': 'KRAT', 'Krasnoyarsk Summer Time': 'KRAST', 'Kyrgyzstan Time': 'KGT',
497
+ 'Lanka Time': 'LKT', 'Line Islands Time': 'LINT', 'Lord Howe Daylight Time': 'LHDT',
498
+ 'Lord Howe Standard Time': 'LHST', 'Macao Standard Time': 'CST', 'Macao Summer Time': 'CDST',
499
+ 'Magadan Standard Time': 'MAGT', 'Magadan Summer Time': 'MAGST', 'Malaysia Time': 'MYT',
500
+ 'Maldives Time': 'MVT', 'Marquesas Time': 'MART', 'Marshall Islands Time': 'MHT',
501
+ 'Mauritius Standard Time': 'MUT', 'Mauritius Summer Time': 'MUST', 'Mawson Time': 'MAWT',
502
+ 'Mexican Pacific Daylight Time': 'PDT', 'Mexican Pacific Standard Time': 'PST', 'Moscow Standard Time': 'MSK',
503
+ 'Moscow Summer Time': 'MSD', 'Mountain Daylight Time': 'MDT', 'Mountain Standard Time': 'MST',
504
+ 'Myanmar Time': 'MMT', 'Nauru Time': 'NRT', 'Nepal Time': 'NPT',
505
+ 'New Caledonia Standard Time': 'NCT', 'New Caledonia Summer Time': 'NCST', 'New Zealand Daylight Time': 'NZDT',
506
+ 'New Zealand Standard Time': 'NZST', 'Newfoundland Daylight Time': 'NDT', 'Newfoundland Standard Time': 'NST',
507
+ 'Niue Time': 'NUT', 'Norfolk Island Daylight Time': 'NFDT', 'Norfolk Island Standard Time': 'NFT',
508
+ 'North Mariana Islands Time': 'ChST', 'Novosibirsk Standard Time': 'NOVT', 'Novosibirsk Summer Time': 'NOVST',
509
+ 'Omsk Standard Time': 'OMST', 'Omsk Summer Time': 'OMSST', 'Pacific Daylight Time': 'PDT',
510
+ 'Pacific Standard Time': 'PST', 'Pakistan Standard Time': 'PKT', 'Pakistan Summer Time': 'PKST',
511
+ 'Palau Time': 'PWT', 'Papua New Guinea Time': 'PGT', 'Paraguay Standard Time': 'PYST',
512
+ 'Paraguay Summer Time': 'PYST', 'Peru Standard Time': 'PET', 'Peru Summer Time': 'PEST',
513
+ 'Petropavlovsk-Kamchatski Standard Time': 'PETT', 'Petropavlovsk-Kamchatski Summer Time': 'PETST', 'Philippine Standard Time': 'PST',
514
+ 'Philippine Summer Time': 'PHST', 'Phoenix Islands Time': 'PHOT', 'Pitcairn Time': 'PIT',
515
+ 'Ponape Time': 'PONT', 'Pyongyang Time': 'KST', 'Qyzylorda Standard Time': 'QYZT',
516
+ 'Qyzylorda Summer Time': 'QYZST', 'Rothera Time': 'ROOTT', 'Réunion Time': 'RET',
517
+ 'Sakhalin Standard Time': 'SAKT', 'Sakhalin Summer Time': 'SAKST', 'Samara Standard Time': 'SAMT',
518
+ 'Samara Summer Time': 'SAMST', 'Samoa Standard Time': 'SST', 'Seychelles Time': 'SCT',
519
+ 'Singapore Standard Time': 'SGT', 'Solomon Islands Time': 'SBT', 'South Africa Standard Time': 'SAST',
520
+ 'South Georgia Time': 'GST', 'St. Pierre & Miquelon Daylight Time': 'PMDT', 'St. Pierre & Miquelon Standard Time': 'PMST',
521
+ 'Suriname Time': 'SRT', 'Syowa Time': 'SYOT', 'Tahiti Time': 'TAHT',
522
+ 'Taipei Daylight Time': 'TDT', 'Taipei Standard Time': 'CST', 'Tajikistan Time': 'TJT',
523
+ 'Tokelau Time': 'TKT', 'Tonga Standard Time': 'TOT', 'Tonga Summer Time': 'TOST',
524
+ 'Turkmenistan Standard Time': 'TMT', 'Tuvalu Time': 'TVT', 'Ulaanbaatar Standard Time': 'ULAT',
525
+ 'Ulaanbaatar Summer Time': 'ULAST', 'Uruguay Standard Time': 'UYT', 'Uruguay Summer Time': 'UYST',
526
+ 'Uzbekistan Standard Time': 'UZT', 'Uzbekistan Summer Time': 'UZST', 'Vanuatu Standard Time': 'VUT',
527
+ 'Vanuatu Summer Time': 'VUST', 'Venezuela Time': 'VET', 'Vladivostok Standard Time': 'VLAT',
528
+ 'Vladivostok Summer Time': 'VLAST', 'Volgograd Standard Time': 'VOLT', 'Volgograd Summer Time': 'VOLST',
529
+ 'Vostok Time': 'VOST', 'Wake Island Time': 'WAKT', 'Wallis & Futuna Time': 'WFT',
530
+ 'West Africa Standard Time': 'WAT', 'West Africa Summer Time': 'WAST', 'West Greenland Standard Time': 'WGST',
531
+ 'West Greenland Summer Time': 'WGST', 'West Kazakhstan Time': 'AQTT', 'Western Argentina Standard Time': 'ART',
532
+ 'Western Argentina Summer Time': 'ARST', 'Western European Standard Time': 'WET', 'Western European Summer Time': 'WEST',
533
+ 'Western Indonesia Time': 'WIB', 'Yakutsk Standard Time': 'YAKT', 'Yakutsk Summer Time': 'YAKST',
534
+ 'Yekaterinburg Standard Time': 'YEKT', 'Yekaterinburg Summer Time': 'YEKST', 'Yukon Time': 'YT'
535
+ };
536
+ var options = {
537
+ hour12: false, weekday: 'short', year: 'numeric', month: 'numeric', day: 'numeric',
538
+ hour: 'numeric', minute: 'numeric', second: 'numeric', fractionalSecondDigits: 3
539
+ };
458
540
  var formatTZ = function (dateObj, arg, timeZone) {
459
- options.timeZone = 'UTC';
460
- var utcObj = date.parse(new Intl.DateTimeFormat('en-US', options).format(dateObj), pattern);
461
- utcObj.setMilliseconds(dateObj.getMilliseconds());
541
+ var parts = (function () {
542
+ options.timeZone = timeZone || undefined;
543
+ var array = new Intl.DateTimeFormat('en-US', options).formatToParts(dateObj);
544
+ var values = {};
462
545
 
463
- options.timeZone = timeZone;
464
- var dateObj2 = date.parse(new Intl.DateTimeFormat('en-US', options).format(dateObj), pattern);
465
- dateObj2.setMilliseconds(dateObj.getMilliseconds());
546
+ for (var i = 0, len = array.length; i < len; i++) {
547
+ var type = array[i].type;
548
+ var value = array[i].value;
466
549
 
467
- dateObj2.getTimezoneOffset = function () { return (utcObj.getTime() - dateObj2.getTime()) / 60000 | 0; };
550
+ switch (type) {
551
+ case 'weekday':
552
+ values[type] = 'SunMonTueWedThuFriSat'.indexOf(value) / 3;
553
+ break;
554
+ case 'year':
555
+ case 'month':
556
+ case 'day':
557
+ case 'hour':
558
+ case 'minute':
559
+ case 'second':
560
+ case 'fractionalSecond':
561
+ values[type] = value | 0;
562
+ }
563
+ }
564
+ return values;
565
+ }());
468
566
 
469
- return localized_date.format(dateObj2, arg);
567
+ return date.format({
568
+ getFullYear: function () { return parts.year; },
569
+ getMonth: function () { return parts.month - 1; },
570
+ getDate: function () { return parts.day; },
571
+ getHours: function () { return parts.hour; },
572
+ getMinutes: function () { return parts.minute; },
573
+ getSeconds: function () { return parts.second; },
574
+ getMilliseconds: function () { return parts.fractionalSecond; },
575
+ getDay: function () { return parts.weekday; },
576
+ getTime: function () { return dateObj.getTime(); },
577
+ getTimezoneOffset: function () {
578
+ return (dateObj.getTime() - Date.UTC(
579
+ parts.year, parts.month - (parts.year < 100 ? 1900 * 12 + 1 : 1), parts.day,
580
+ parts.hour, parts.minute, parts.second, parts.fractionalSecond
581
+ )) / 60000 | 0;
582
+ },
583
+ getTimezoneName: function () { return timeZone || undefined; }
584
+ }, arg);
470
585
  };
471
586
  var parseTZ = function (dateString, arg, timeZone) {
472
- var pattern2 = typeof arg === 'string' ? date.compile(arg) : arg;
473
- var dateObj = localized_date.parse(dateString, pattern2, !!timeZone);
587
+ var pattern = typeof arg === 'string' ? date.compile(arg) : arg;
588
+ var dateObj = date.parse(dateString, pattern, !!timeZone);
589
+
590
+ var hasZ = function (array) {
591
+ for (var i = 1, len = array.length; i < len; i++) {
592
+ if (!array[i].indexOf('Z')) {
593
+ return true;
594
+ }
595
+ }
596
+ return false;
597
+ };
474
598
 
475
- if (!timeZone || ~date._parser.find(pattern2, 'ZZ').value || timeZone.toLowerCase() === 'utc') {
599
+ if (!timeZone || hasZ(pattern) || timeZone.toUpperCase() === 'UTC') {
476
600
  return dateObj;
477
601
  }
478
602
 
479
- options.timeZone = timeZone;
480
- var dateTimeFormat = new Intl.DateTimeFormat('en-US', options);
481
- var dateString2 = date.format(dateObj, pattern, true);
482
- var offset = (function () {
483
- var keys = timeZone.toLowerCase().split('/');
603
+ var getOffset = function (timeZoneName) {
604
+ var keys = (timeZoneName || '').toLowerCase().split('/');
484
605
  var value = timeZones[keys[0]] || {};
485
606
 
486
607
  for (var i = 1, len = keys.length; i < len; i++) {
487
608
  value = value[keys[i]] || {};
488
609
  }
489
610
  return Array.isArray(value) ? value : [];
490
- })();
611
+ };
612
+
613
+ options.timeZone = 'UTC';
614
+ var dateString2 = new Intl.DateTimeFormat('en-US', options).format(dateObj);
615
+ options.timeZone = timeZone || undefined;
616
+ var dateTimeFormat = new Intl.DateTimeFormat('en-US', options);
617
+ var offset = getOffset(timeZone);
491
618
  var comparer = function (d) {
492
- return dateString2 === dateTimeFormat.format(d).replace(/[\u202f]/, ' ');
619
+ return dateString2 === dateTimeFormat.format(d);
493
620
  };
494
621
 
495
622
  for (var j = 0, len2 = offset.length; j < len2; j++) {
@@ -501,12 +628,36 @@ var plugin = function (date, localized_date) {
501
628
  return new Date(NaN);
502
629
  };
503
630
  var transformTZ = function (dateString, arg1, arg2, timeZone) {
504
- return formatTZ(localized_date.parse(dateString, arg1), arg2, timeZone);
631
+ return formatTZ(date.parse(dateString, arg1), arg2, timeZone);
505
632
  };
506
633
 
507
634
  var name = 'timezone';
508
635
 
509
- date.plugin(name, {
636
+ var getName = function (d) {
637
+ var parts = new Intl.DateTimeFormat('en-US', {
638
+ timeZone: typeof d.getTimezoneName === 'function' ? d.getTimezoneName() : undefined,
639
+ timeZoneName: 'long'
640
+ }).formatToParts(d.getTime());
641
+
642
+ for (var i = 0, len = parts.length; i < len; i++) {
643
+ if (parts[i].type === 'timeZoneName') {
644
+ return parts[i].value;
645
+ }
646
+ }
647
+ return '';
648
+ };
649
+
650
+ proto.plugin(name, {
651
+ formatter: {
652
+ z: function (d) {
653
+ var name = getName(d);
654
+ return timeZoneNames[name] || '';
655
+ },
656
+ zz: function (d) {
657
+ var name = getName(d);
658
+ return /^GMT[+-].+$/.test(name) ? '' : name;
659
+ }
660
+ },
510
661
  extender: {
511
662
  formatTZ: formatTZ,
512
663
  parseTZ: parseTZ,
@@ -3,12 +3,7 @@
3
3
  * @preserve timezone
4
4
  */
5
5
 
6
- var plugin = function (date, localized_date) {
7
- var options = {
8
- year: 'numeric', month: 'numeric', day: 'numeric',
9
- hour: 'numeric', minute: 'numeric', second: 'numeric'
10
- };
11
- var pattern = date.compile('M/D/Y, h:mm:ss A');
6
+ var plugin = function (proto, date) {
12
7
  var timeZones = {
13
8
  africa: {
14
9
  abidjan: [0, -968],
@@ -455,41 +450,173 @@ var plugin = function (date, localized_date) {
455
450
  wallis: [43200, 41524]
456
451
  }
457
452
  };
453
+ var timeZoneNames = {
454
+ 'Acre Standard Time': 'ACT', 'Acre Summer Time': 'ACST', 'Afghanistan Time': 'AFT',
455
+ 'Alaska Daylight Time': 'AKDT', 'Alaska Standard Time': 'AKST', 'Almaty Standard Time': 'ALMT',
456
+ 'Almaty Summer Time': 'ALMST', 'Amazon Standard Time': 'AMT', 'Amazon Summer Time': 'AMST',
457
+ 'Anadyr Standard Time': 'ANAT', 'Anadyr Summer Time': 'ANAST', 'Apia Daylight Time': 'WSDT',
458
+ 'Apia Standard Time': 'WSST', 'Aqtau Standard Time': 'AQTT', 'Aqtau Summer Time': 'AQTT',
459
+ 'Aqtobe Standard Time': 'AQTT', 'Aqtobe Summer Time': 'AQST', 'Arabian Daylight Time': 'ADT',
460
+ 'Arabian Standard Time': 'AST', 'Argentina Standard Time': 'ART', 'Argentina Summer Time': 'ARST',
461
+ 'Armenia Standard Time': 'AMT', 'Armenia Summer Time': 'AMST', 'Atlantic Daylight Time': 'ADT',
462
+ 'Atlantic Standard Time': 'AST', 'Australian Central Daylight Time': 'ACDT', 'Australian Central Standard Time': 'ACST',
463
+ 'Australian Central Western Daylight Time': 'ACWDT', 'Australian Central Western Standard Time': 'ACWST', 'Australian Eastern Daylight Time': 'AEDT',
464
+ 'Australian Eastern Standard Time': 'AEST', 'Australian Western Daylight Time': 'AWDT', 'Australian Western Standard Time': 'AWST',
465
+ 'Azerbaijan Standard Time': 'AZT', 'Azerbaijan Summer Time': 'AZST', 'Azores Standard Time': 'AZOT',
466
+ 'Azores Summer Time': 'AZOST', 'Bangladesh Standard Time': 'BST', 'Bangladesh Summer Time': 'BDST',
467
+ 'Bhutan Time': 'BTT', 'Bolivia Time': 'BOT', 'Brasilia Standard Time': 'BRT',
468
+ 'Brasilia Summer Time': 'BRST', 'British Summer Time': 'BST', 'Brunei Darussalam Time': 'BNT',
469
+ 'Cape Verde Standard Time': 'CVT', 'Casey Time': 'CAST', 'Central Africa Time': 'CAT',
470
+ 'Central Daylight Time': 'CDT', 'Central European Standard Time': 'CET', 'Central European Summer Time': 'CEST',
471
+ 'Central Indonesia Time': 'WITA', 'Central Standard Time': 'CST', 'Chamorro Standard Time': 'ChST',
472
+ 'Chatham Daylight Time': 'CHADT', 'Chatham Standard Time': 'CHAST', 'Chile Standard Time': 'CLT',
473
+ 'Chile Summer Time': 'CLST', 'China Daylight Time': 'CDT', 'China Standard Time': 'CST',
474
+ 'Choibalsan Standard Time': 'CHOT', 'Choibalsan Summer Time': 'CHOST', 'Christmas Island Time': 'CXT',
475
+ 'Chuuk Time': 'CHUT', 'Cocos Islands Time': 'CCT', 'Colombia Standard Time': 'COT',
476
+ 'Colombia Summer Time': 'COST', 'Cook Islands Half Summer Time': 'CKHST', 'Cook Islands Standard Time': 'CKT',
477
+ 'Coordinated Universal Time': 'UTC', 'Cuba Daylight Time': 'CDT', 'Cuba Standard Time': 'CST',
478
+ 'Davis Time': 'DAVT', 'Dumont-d’Urville Time': 'DDUT', 'East Africa Time': 'EAT',
479
+ 'East Greenland Standard Time': 'EGST', 'East Greenland Summer Time': 'EGST', 'East Kazakhstan Time': 'ALMT',
480
+ 'East Timor Time': 'TLT', 'Easter Island Standard Time': 'EAST', 'Easter Island Summer Time': 'EASST',
481
+ 'Eastern Daylight Time': 'EDT', 'Eastern European Standard Time': 'EET', 'Eastern European Summer Time': 'EEST',
482
+ 'Eastern Indonesia Time': 'WIT', 'Eastern Standard Time': 'EST', 'Ecuador Time': 'ECT',
483
+ 'Falkland Islands Standard Time': 'FKST', 'Falkland Islands Summer Time': 'FKDT', 'Fernando de Noronha Standard Time': 'FNT',
484
+ 'Fernando de Noronha Summer Time': 'FNST', 'Fiji Standard Time': 'FJT', 'Fiji Summer Time': 'FJST',
485
+ 'French Guiana Time': 'GFT', 'French Southern & Antarctic Time': 'TFT', 'Further-eastern European Time': 'FET',
486
+ 'GMT': 'GMT', 'Galapagos Time': 'GALT', 'Gambier Time': 'GAMT',
487
+ 'Georgia Standard Time': 'GET', 'Georgia Summer Time': 'GEST', 'Gilbert Islands Time': 'GILT',
488
+ 'Greenwich Mean Time': 'GMT', 'Guam Standard Time': 'ChST', 'Gulf Standard Time': 'GST',
489
+ 'Guyana Time': 'GYT', 'Hawaii-Aleutian Daylight Time': 'HADT', 'Hawaii-Aleutian Standard Time': 'HAST',
490
+ 'Hong Kong Standard Time': 'HKT', 'Hong Kong Summer Time': 'HKST', 'Hovd Standard Time': 'HOVT',
491
+ 'Hovd Summer Time': 'HOVST', 'India Standard Time': 'IST', 'Indian Ocean Time': 'IOT',
492
+ 'Indochina Time': 'ICT', 'Iran Daylight Time': 'IRDT', 'Iran Standard Time': 'IRST',
493
+ 'Irish Standard Time': 'IST', 'Irkutsk Standard Time': 'IRKT', 'Irkutsk Summer Time': 'IRKST',
494
+ 'Israel Daylight Time': 'IDT', 'Israel Standard Time': 'IST', 'Japan Standard Time': 'JST',
495
+ 'Korean Daylight Time': 'KDT', 'Korean Standard Time': 'KST', 'Kosrae Time': 'KOST',
496
+ 'Krasnoyarsk Standard Time': 'KRAT', 'Krasnoyarsk Summer Time': 'KRAST', 'Kyrgyzstan Time': 'KGT',
497
+ 'Lanka Time': 'LKT', 'Line Islands Time': 'LINT', 'Lord Howe Daylight Time': 'LHDT',
498
+ 'Lord Howe Standard Time': 'LHST', 'Macao Standard Time': 'CST', 'Macao Summer Time': 'CDST',
499
+ 'Magadan Standard Time': 'MAGT', 'Magadan Summer Time': 'MAGST', 'Malaysia Time': 'MYT',
500
+ 'Maldives Time': 'MVT', 'Marquesas Time': 'MART', 'Marshall Islands Time': 'MHT',
501
+ 'Mauritius Standard Time': 'MUT', 'Mauritius Summer Time': 'MUST', 'Mawson Time': 'MAWT',
502
+ 'Mexican Pacific Daylight Time': 'PDT', 'Mexican Pacific Standard Time': 'PST', 'Moscow Standard Time': 'MSK',
503
+ 'Moscow Summer Time': 'MSD', 'Mountain Daylight Time': 'MDT', 'Mountain Standard Time': 'MST',
504
+ 'Myanmar Time': 'MMT', 'Nauru Time': 'NRT', 'Nepal Time': 'NPT',
505
+ 'New Caledonia Standard Time': 'NCT', 'New Caledonia Summer Time': 'NCST', 'New Zealand Daylight Time': 'NZDT',
506
+ 'New Zealand Standard Time': 'NZST', 'Newfoundland Daylight Time': 'NDT', 'Newfoundland Standard Time': 'NST',
507
+ 'Niue Time': 'NUT', 'Norfolk Island Daylight Time': 'NFDT', 'Norfolk Island Standard Time': 'NFT',
508
+ 'North Mariana Islands Time': 'ChST', 'Novosibirsk Standard Time': 'NOVT', 'Novosibirsk Summer Time': 'NOVST',
509
+ 'Omsk Standard Time': 'OMST', 'Omsk Summer Time': 'OMSST', 'Pacific Daylight Time': 'PDT',
510
+ 'Pacific Standard Time': 'PST', 'Pakistan Standard Time': 'PKT', 'Pakistan Summer Time': 'PKST',
511
+ 'Palau Time': 'PWT', 'Papua New Guinea Time': 'PGT', 'Paraguay Standard Time': 'PYST',
512
+ 'Paraguay Summer Time': 'PYST', 'Peru Standard Time': 'PET', 'Peru Summer Time': 'PEST',
513
+ 'Petropavlovsk-Kamchatski Standard Time': 'PETT', 'Petropavlovsk-Kamchatski Summer Time': 'PETST', 'Philippine Standard Time': 'PST',
514
+ 'Philippine Summer Time': 'PHST', 'Phoenix Islands Time': 'PHOT', 'Pitcairn Time': 'PIT',
515
+ 'Ponape Time': 'PONT', 'Pyongyang Time': 'KST', 'Qyzylorda Standard Time': 'QYZT',
516
+ 'Qyzylorda Summer Time': 'QYZST', 'Rothera Time': 'ROOTT', 'Réunion Time': 'RET',
517
+ 'Sakhalin Standard Time': 'SAKT', 'Sakhalin Summer Time': 'SAKST', 'Samara Standard Time': 'SAMT',
518
+ 'Samara Summer Time': 'SAMST', 'Samoa Standard Time': 'SST', 'Seychelles Time': 'SCT',
519
+ 'Singapore Standard Time': 'SGT', 'Solomon Islands Time': 'SBT', 'South Africa Standard Time': 'SAST',
520
+ 'South Georgia Time': 'GST', 'St. Pierre & Miquelon Daylight Time': 'PMDT', 'St. Pierre & Miquelon Standard Time': 'PMST',
521
+ 'Suriname Time': 'SRT', 'Syowa Time': 'SYOT', 'Tahiti Time': 'TAHT',
522
+ 'Taipei Daylight Time': 'TDT', 'Taipei Standard Time': 'CST', 'Tajikistan Time': 'TJT',
523
+ 'Tokelau Time': 'TKT', 'Tonga Standard Time': 'TOT', 'Tonga Summer Time': 'TOST',
524
+ 'Turkmenistan Standard Time': 'TMT', 'Tuvalu Time': 'TVT', 'Ulaanbaatar Standard Time': 'ULAT',
525
+ 'Ulaanbaatar Summer Time': 'ULAST', 'Uruguay Standard Time': 'UYT', 'Uruguay Summer Time': 'UYST',
526
+ 'Uzbekistan Standard Time': 'UZT', 'Uzbekistan Summer Time': 'UZST', 'Vanuatu Standard Time': 'VUT',
527
+ 'Vanuatu Summer Time': 'VUST', 'Venezuela Time': 'VET', 'Vladivostok Standard Time': 'VLAT',
528
+ 'Vladivostok Summer Time': 'VLAST', 'Volgograd Standard Time': 'VOLT', 'Volgograd Summer Time': 'VOLST',
529
+ 'Vostok Time': 'VOST', 'Wake Island Time': 'WAKT', 'Wallis & Futuna Time': 'WFT',
530
+ 'West Africa Standard Time': 'WAT', 'West Africa Summer Time': 'WAST', 'West Greenland Standard Time': 'WGST',
531
+ 'West Greenland Summer Time': 'WGST', 'West Kazakhstan Time': 'AQTT', 'Western Argentina Standard Time': 'ART',
532
+ 'Western Argentina Summer Time': 'ARST', 'Western European Standard Time': 'WET', 'Western European Summer Time': 'WEST',
533
+ 'Western Indonesia Time': 'WIB', 'Yakutsk Standard Time': 'YAKT', 'Yakutsk Summer Time': 'YAKST',
534
+ 'Yekaterinburg Standard Time': 'YEKT', 'Yekaterinburg Summer Time': 'YEKST', 'Yukon Time': 'YT'
535
+ };
536
+ var options = {
537
+ hour12: false, weekday: 'short', year: 'numeric', month: 'numeric', day: 'numeric',
538
+ hour: 'numeric', minute: 'numeric', second: 'numeric', fractionalSecondDigits: 3
539
+ };
458
540
  var formatTZ = function (dateObj, arg, timeZone) {
459
- options.timeZone = 'UTC';
460
- var utcObj = date.parse(new Intl.DateTimeFormat('en-US', options).format(dateObj), pattern);
461
- utcObj.setMilliseconds(dateObj.getMilliseconds());
541
+ var parts = (function () {
542
+ options.timeZone = timeZone || undefined;
543
+ var array = new Intl.DateTimeFormat('en-US', options).formatToParts(dateObj);
544
+ var values = {};
462
545
 
463
- options.timeZone = timeZone;
464
- var dateObj2 = date.parse(new Intl.DateTimeFormat('en-US', options).format(dateObj), pattern);
465
- dateObj2.setMilliseconds(dateObj.getMilliseconds());
546
+ for (var i = 0, len = array.length; i < len; i++) {
547
+ var type = array[i].type;
548
+ var value = array[i].value;
466
549
 
467
- dateObj2.getTimezoneOffset = function () { return (utcObj.getTime() - dateObj2.getTime()) / 60000 | 0; };
550
+ switch (type) {
551
+ case 'weekday':
552
+ values[type] = 'SunMonTueWedThuFriSat'.indexOf(value) / 3;
553
+ break;
554
+ case 'year':
555
+ case 'month':
556
+ case 'day':
557
+ case 'hour':
558
+ case 'minute':
559
+ case 'second':
560
+ case 'fractionalSecond':
561
+ values[type] = value | 0;
562
+ }
563
+ }
564
+ return values;
565
+ }());
468
566
 
469
- return localized_date.format(dateObj2, arg);
567
+ return date.format({
568
+ getFullYear: function () { return parts.year; },
569
+ getMonth: function () { return parts.month - 1; },
570
+ getDate: function () { return parts.day; },
571
+ getHours: function () { return parts.hour; },
572
+ getMinutes: function () { return parts.minute; },
573
+ getSeconds: function () { return parts.second; },
574
+ getMilliseconds: function () { return parts.fractionalSecond; },
575
+ getDay: function () { return parts.weekday; },
576
+ getTime: function () { return dateObj.getTime(); },
577
+ getTimezoneOffset: function () {
578
+ return (dateObj.getTime() - Date.UTC(
579
+ parts.year, parts.month - (parts.year < 100 ? 1900 * 12 + 1 : 1), parts.day,
580
+ parts.hour, parts.minute, parts.second, parts.fractionalSecond
581
+ )) / 60000 | 0;
582
+ },
583
+ getTimezoneName: function () { return timeZone || undefined; }
584
+ }, arg);
470
585
  };
471
586
  var parseTZ = function (dateString, arg, timeZone) {
472
- var pattern2 = typeof arg === 'string' ? date.compile(arg) : arg;
473
- var dateObj = localized_date.parse(dateString, pattern2, !!timeZone);
587
+ var pattern = typeof arg === 'string' ? date.compile(arg) : arg;
588
+ var dateObj = date.parse(dateString, pattern, !!timeZone);
589
+
590
+ var hasZ = function (array) {
591
+ for (var i = 1, len = array.length; i < len; i++) {
592
+ if (!array[i].indexOf('Z')) {
593
+ return true;
594
+ }
595
+ }
596
+ return false;
597
+ };
474
598
 
475
- if (!timeZone || ~date._parser.find(pattern2, 'ZZ').value || timeZone.toLowerCase() === 'utc') {
599
+ if (!timeZone || hasZ(pattern) || timeZone.toUpperCase() === 'UTC') {
476
600
  return dateObj;
477
601
  }
478
602
 
479
- options.timeZone = timeZone;
480
- var dateTimeFormat = new Intl.DateTimeFormat('en-US', options);
481
- var dateString2 = date.format(dateObj, pattern, true);
482
- var offset = (function () {
483
- var keys = timeZone.toLowerCase().split('/');
603
+ var getOffset = function (timeZoneName) {
604
+ var keys = (timeZoneName || '').toLowerCase().split('/');
484
605
  var value = timeZones[keys[0]] || {};
485
606
 
486
607
  for (var i = 1, len = keys.length; i < len; i++) {
487
608
  value = value[keys[i]] || {};
488
609
  }
489
610
  return Array.isArray(value) ? value : [];
490
- })();
611
+ };
612
+
613
+ options.timeZone = 'UTC';
614
+ var dateString2 = new Intl.DateTimeFormat('en-US', options).format(dateObj);
615
+ options.timeZone = timeZone || undefined;
616
+ var dateTimeFormat = new Intl.DateTimeFormat('en-US', options);
617
+ var offset = getOffset(timeZone);
491
618
  var comparer = function (d) {
492
- return dateString2 === dateTimeFormat.format(d).replace(/[\u202f]/, ' ');
619
+ return dateString2 === dateTimeFormat.format(d);
493
620
  };
494
621
 
495
622
  for (var j = 0, len2 = offset.length; j < len2; j++) {
@@ -501,12 +628,36 @@ var plugin = function (date, localized_date) {
501
628
  return new Date(NaN);
502
629
  };
503
630
  var transformTZ = function (dateString, arg1, arg2, timeZone) {
504
- return formatTZ(localized_date.parse(dateString, arg1), arg2, timeZone);
631
+ return formatTZ(date.parse(dateString, arg1), arg2, timeZone);
505
632
  };
506
633
 
507
634
  var name = 'timezone';
508
635
 
509
- date.plugin(name, {
636
+ var getName = function (d) {
637
+ var parts = new Intl.DateTimeFormat('en-US', {
638
+ timeZone: typeof d.getTimezoneName === 'function' ? d.getTimezoneName() : undefined,
639
+ timeZoneName: 'long'
640
+ }).formatToParts(d.getTime());
641
+
642
+ for (var i = 0, len = parts.length; i < len; i++) {
643
+ if (parts[i].type === 'timeZoneName') {
644
+ return parts[i].value;
645
+ }
646
+ }
647
+ return '';
648
+ };
649
+
650
+ proto.plugin(name, {
651
+ formatter: {
652
+ z: function (d) {
653
+ var name = getName(d);
654
+ return timeZoneNames[name] || '';
655
+ },
656
+ zz: function (d) {
657
+ var name = getName(d);
658
+ return /^GMT[+-].+$/.test(name) ? '' : name;
659
+ }
660
+ },
510
661
  extender: {
511
662
  formatTZ: formatTZ,
512
663
  parseTZ: parseTZ,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "date-and-time",
3
- "version": "3.3.0",
3
+ "version": "3.4.0",
4
4
  "description": "A Minimalist DateTime utility for Node.js and the browser",
5
5
  "main": "date-and-time.js",
6
6
  "module": "esm/date-and-time.es.js",
@@ -51,8 +51,8 @@
51
51
  "devDependencies": {
52
52
  "@rollup/plugin-terser": "^0.4.4",
53
53
  "expect.js": "^0.3.1",
54
- "mocha": "^10.4.0",
55
- "rollup": "^4.17.2",
56
- "tsd": "^0.31.0"
54
+ "mocha": "^10.6.0",
55
+ "rollup": "^4.18.0",
56
+ "tsd": "^0.31.1"
57
57
  }
58
58
  }
@@ -1 +1 @@
1
- export default function (date: unknown, localized_date?: unknown): string;
1
+ export default function (proto: unknown, date?: unknown): string;
@@ -1 +1 @@
1
- export default function (date: unknown, localized_date?: unknown): string;
1
+ export default function (proto: unknown, date?: unknown): string;
@@ -1 +1 @@
1
- export default function (date: unknown, localized_date?: unknown): string;
1
+ export default function (proto: unknown, date?: unknown): string;
@@ -1 +1 @@
1
- export default function (date: unknown, localized_date?: unknown): string;
1
+ export default function (proto: unknown, date?: unknown): string;
@@ -21,4 +21,4 @@ declare module '../date-and-time' {
21
21
  export function timeSpan(date1: Date, date2: Date): TimeSpanResult;
22
22
  }
23
23
 
24
- export default function (date: unknown, localized_date?: unknown): string;
24
+ export default function (proto: unknown, date?: unknown): string;
@@ -76,4 +76,4 @@ declare module '../date-and-time' {
76
76
  export function transformTZ(dateString: string, compiledObj1: string[], compiledObj2: string[], timeZone?: string): string;
77
77
  }
78
78
 
79
- export default function (date: unknown, localized_date?: unknown): string;
79
+ export default function (proto: unknown, date?: unknown): string;
@@ -9,12 +9,7 @@
9
9
  * @preserve timezone
10
10
  */
11
11
 
12
- var plugin = function (date, localized_date) {
13
- var options = {
14
- year: 'numeric', month: 'numeric', day: 'numeric',
15
- hour: 'numeric', minute: 'numeric', second: 'numeric'
16
- };
17
- var pattern = date.compile('M/D/Y, h:mm:ss A');
12
+ var plugin = function (proto, date) {
18
13
  var timeZones = {
19
14
  africa: {
20
15
  abidjan: [0, -968],
@@ -461,41 +456,173 @@
461
456
  wallis: [43200, 41524]
462
457
  }
463
458
  };
459
+ var timeZoneNames = {
460
+ 'Acre Standard Time': 'ACT', 'Acre Summer Time': 'ACST', 'Afghanistan Time': 'AFT',
461
+ 'Alaska Daylight Time': 'AKDT', 'Alaska Standard Time': 'AKST', 'Almaty Standard Time': 'ALMT',
462
+ 'Almaty Summer Time': 'ALMST', 'Amazon Standard Time': 'AMT', 'Amazon Summer Time': 'AMST',
463
+ 'Anadyr Standard Time': 'ANAT', 'Anadyr Summer Time': 'ANAST', 'Apia Daylight Time': 'WSDT',
464
+ 'Apia Standard Time': 'WSST', 'Aqtau Standard Time': 'AQTT', 'Aqtau Summer Time': 'AQTT',
465
+ 'Aqtobe Standard Time': 'AQTT', 'Aqtobe Summer Time': 'AQST', 'Arabian Daylight Time': 'ADT',
466
+ 'Arabian Standard Time': 'AST', 'Argentina Standard Time': 'ART', 'Argentina Summer Time': 'ARST',
467
+ 'Armenia Standard Time': 'AMT', 'Armenia Summer Time': 'AMST', 'Atlantic Daylight Time': 'ADT',
468
+ 'Atlantic Standard Time': 'AST', 'Australian Central Daylight Time': 'ACDT', 'Australian Central Standard Time': 'ACST',
469
+ 'Australian Central Western Daylight Time': 'ACWDT', 'Australian Central Western Standard Time': 'ACWST', 'Australian Eastern Daylight Time': 'AEDT',
470
+ 'Australian Eastern Standard Time': 'AEST', 'Australian Western Daylight Time': 'AWDT', 'Australian Western Standard Time': 'AWST',
471
+ 'Azerbaijan Standard Time': 'AZT', 'Azerbaijan Summer Time': 'AZST', 'Azores Standard Time': 'AZOT',
472
+ 'Azores Summer Time': 'AZOST', 'Bangladesh Standard Time': 'BST', 'Bangladesh Summer Time': 'BDST',
473
+ 'Bhutan Time': 'BTT', 'Bolivia Time': 'BOT', 'Brasilia Standard Time': 'BRT',
474
+ 'Brasilia Summer Time': 'BRST', 'British Summer Time': 'BST', 'Brunei Darussalam Time': 'BNT',
475
+ 'Cape Verde Standard Time': 'CVT', 'Casey Time': 'CAST', 'Central Africa Time': 'CAT',
476
+ 'Central Daylight Time': 'CDT', 'Central European Standard Time': 'CET', 'Central European Summer Time': 'CEST',
477
+ 'Central Indonesia Time': 'WITA', 'Central Standard Time': 'CST', 'Chamorro Standard Time': 'ChST',
478
+ 'Chatham Daylight Time': 'CHADT', 'Chatham Standard Time': 'CHAST', 'Chile Standard Time': 'CLT',
479
+ 'Chile Summer Time': 'CLST', 'China Daylight Time': 'CDT', 'China Standard Time': 'CST',
480
+ 'Choibalsan Standard Time': 'CHOT', 'Choibalsan Summer Time': 'CHOST', 'Christmas Island Time': 'CXT',
481
+ 'Chuuk Time': 'CHUT', 'Cocos Islands Time': 'CCT', 'Colombia Standard Time': 'COT',
482
+ 'Colombia Summer Time': 'COST', 'Cook Islands Half Summer Time': 'CKHST', 'Cook Islands Standard Time': 'CKT',
483
+ 'Coordinated Universal Time': 'UTC', 'Cuba Daylight Time': 'CDT', 'Cuba Standard Time': 'CST',
484
+ 'Davis Time': 'DAVT', 'Dumont-d’Urville Time': 'DDUT', 'East Africa Time': 'EAT',
485
+ 'East Greenland Standard Time': 'EGST', 'East Greenland Summer Time': 'EGST', 'East Kazakhstan Time': 'ALMT',
486
+ 'East Timor Time': 'TLT', 'Easter Island Standard Time': 'EAST', 'Easter Island Summer Time': 'EASST',
487
+ 'Eastern Daylight Time': 'EDT', 'Eastern European Standard Time': 'EET', 'Eastern European Summer Time': 'EEST',
488
+ 'Eastern Indonesia Time': 'WIT', 'Eastern Standard Time': 'EST', 'Ecuador Time': 'ECT',
489
+ 'Falkland Islands Standard Time': 'FKST', 'Falkland Islands Summer Time': 'FKDT', 'Fernando de Noronha Standard Time': 'FNT',
490
+ 'Fernando de Noronha Summer Time': 'FNST', 'Fiji Standard Time': 'FJT', 'Fiji Summer Time': 'FJST',
491
+ 'French Guiana Time': 'GFT', 'French Southern & Antarctic Time': 'TFT', 'Further-eastern European Time': 'FET',
492
+ 'GMT': 'GMT', 'Galapagos Time': 'GALT', 'Gambier Time': 'GAMT',
493
+ 'Georgia Standard Time': 'GET', 'Georgia Summer Time': 'GEST', 'Gilbert Islands Time': 'GILT',
494
+ 'Greenwich Mean Time': 'GMT', 'Guam Standard Time': 'ChST', 'Gulf Standard Time': 'GST',
495
+ 'Guyana Time': 'GYT', 'Hawaii-Aleutian Daylight Time': 'HADT', 'Hawaii-Aleutian Standard Time': 'HAST',
496
+ 'Hong Kong Standard Time': 'HKT', 'Hong Kong Summer Time': 'HKST', 'Hovd Standard Time': 'HOVT',
497
+ 'Hovd Summer Time': 'HOVST', 'India Standard Time': 'IST', 'Indian Ocean Time': 'IOT',
498
+ 'Indochina Time': 'ICT', 'Iran Daylight Time': 'IRDT', 'Iran Standard Time': 'IRST',
499
+ 'Irish Standard Time': 'IST', 'Irkutsk Standard Time': 'IRKT', 'Irkutsk Summer Time': 'IRKST',
500
+ 'Israel Daylight Time': 'IDT', 'Israel Standard Time': 'IST', 'Japan Standard Time': 'JST',
501
+ 'Korean Daylight Time': 'KDT', 'Korean Standard Time': 'KST', 'Kosrae Time': 'KOST',
502
+ 'Krasnoyarsk Standard Time': 'KRAT', 'Krasnoyarsk Summer Time': 'KRAST', 'Kyrgyzstan Time': 'KGT',
503
+ 'Lanka Time': 'LKT', 'Line Islands Time': 'LINT', 'Lord Howe Daylight Time': 'LHDT',
504
+ 'Lord Howe Standard Time': 'LHST', 'Macao Standard Time': 'CST', 'Macao Summer Time': 'CDST',
505
+ 'Magadan Standard Time': 'MAGT', 'Magadan Summer Time': 'MAGST', 'Malaysia Time': 'MYT',
506
+ 'Maldives Time': 'MVT', 'Marquesas Time': 'MART', 'Marshall Islands Time': 'MHT',
507
+ 'Mauritius Standard Time': 'MUT', 'Mauritius Summer Time': 'MUST', 'Mawson Time': 'MAWT',
508
+ 'Mexican Pacific Daylight Time': 'PDT', 'Mexican Pacific Standard Time': 'PST', 'Moscow Standard Time': 'MSK',
509
+ 'Moscow Summer Time': 'MSD', 'Mountain Daylight Time': 'MDT', 'Mountain Standard Time': 'MST',
510
+ 'Myanmar Time': 'MMT', 'Nauru Time': 'NRT', 'Nepal Time': 'NPT',
511
+ 'New Caledonia Standard Time': 'NCT', 'New Caledonia Summer Time': 'NCST', 'New Zealand Daylight Time': 'NZDT',
512
+ 'New Zealand Standard Time': 'NZST', 'Newfoundland Daylight Time': 'NDT', 'Newfoundland Standard Time': 'NST',
513
+ 'Niue Time': 'NUT', 'Norfolk Island Daylight Time': 'NFDT', 'Norfolk Island Standard Time': 'NFT',
514
+ 'North Mariana Islands Time': 'ChST', 'Novosibirsk Standard Time': 'NOVT', 'Novosibirsk Summer Time': 'NOVST',
515
+ 'Omsk Standard Time': 'OMST', 'Omsk Summer Time': 'OMSST', 'Pacific Daylight Time': 'PDT',
516
+ 'Pacific Standard Time': 'PST', 'Pakistan Standard Time': 'PKT', 'Pakistan Summer Time': 'PKST',
517
+ 'Palau Time': 'PWT', 'Papua New Guinea Time': 'PGT', 'Paraguay Standard Time': 'PYST',
518
+ 'Paraguay Summer Time': 'PYST', 'Peru Standard Time': 'PET', 'Peru Summer Time': 'PEST',
519
+ 'Petropavlovsk-Kamchatski Standard Time': 'PETT', 'Petropavlovsk-Kamchatski Summer Time': 'PETST', 'Philippine Standard Time': 'PST',
520
+ 'Philippine Summer Time': 'PHST', 'Phoenix Islands Time': 'PHOT', 'Pitcairn Time': 'PIT',
521
+ 'Ponape Time': 'PONT', 'Pyongyang Time': 'KST', 'Qyzylorda Standard Time': 'QYZT',
522
+ 'Qyzylorda Summer Time': 'QYZST', 'Rothera Time': 'ROOTT', 'Réunion Time': 'RET',
523
+ 'Sakhalin Standard Time': 'SAKT', 'Sakhalin Summer Time': 'SAKST', 'Samara Standard Time': 'SAMT',
524
+ 'Samara Summer Time': 'SAMST', 'Samoa Standard Time': 'SST', 'Seychelles Time': 'SCT',
525
+ 'Singapore Standard Time': 'SGT', 'Solomon Islands Time': 'SBT', 'South Africa Standard Time': 'SAST',
526
+ 'South Georgia Time': 'GST', 'St. Pierre & Miquelon Daylight Time': 'PMDT', 'St. Pierre & Miquelon Standard Time': 'PMST',
527
+ 'Suriname Time': 'SRT', 'Syowa Time': 'SYOT', 'Tahiti Time': 'TAHT',
528
+ 'Taipei Daylight Time': 'TDT', 'Taipei Standard Time': 'CST', 'Tajikistan Time': 'TJT',
529
+ 'Tokelau Time': 'TKT', 'Tonga Standard Time': 'TOT', 'Tonga Summer Time': 'TOST',
530
+ 'Turkmenistan Standard Time': 'TMT', 'Tuvalu Time': 'TVT', 'Ulaanbaatar Standard Time': 'ULAT',
531
+ 'Ulaanbaatar Summer Time': 'ULAST', 'Uruguay Standard Time': 'UYT', 'Uruguay Summer Time': 'UYST',
532
+ 'Uzbekistan Standard Time': 'UZT', 'Uzbekistan Summer Time': 'UZST', 'Vanuatu Standard Time': 'VUT',
533
+ 'Vanuatu Summer Time': 'VUST', 'Venezuela Time': 'VET', 'Vladivostok Standard Time': 'VLAT',
534
+ 'Vladivostok Summer Time': 'VLAST', 'Volgograd Standard Time': 'VOLT', 'Volgograd Summer Time': 'VOLST',
535
+ 'Vostok Time': 'VOST', 'Wake Island Time': 'WAKT', 'Wallis & Futuna Time': 'WFT',
536
+ 'West Africa Standard Time': 'WAT', 'West Africa Summer Time': 'WAST', 'West Greenland Standard Time': 'WGST',
537
+ 'West Greenland Summer Time': 'WGST', 'West Kazakhstan Time': 'AQTT', 'Western Argentina Standard Time': 'ART',
538
+ 'Western Argentina Summer Time': 'ARST', 'Western European Standard Time': 'WET', 'Western European Summer Time': 'WEST',
539
+ 'Western Indonesia Time': 'WIB', 'Yakutsk Standard Time': 'YAKT', 'Yakutsk Summer Time': 'YAKST',
540
+ 'Yekaterinburg Standard Time': 'YEKT', 'Yekaterinburg Summer Time': 'YEKST', 'Yukon Time': 'YT'
541
+ };
542
+ var options = {
543
+ hour12: false, weekday: 'short', year: 'numeric', month: 'numeric', day: 'numeric',
544
+ hour: 'numeric', minute: 'numeric', second: 'numeric', fractionalSecondDigits: 3
545
+ };
464
546
  var formatTZ = function (dateObj, arg, timeZone) {
465
- options.timeZone = 'UTC';
466
- var utcObj = date.parse(new Intl.DateTimeFormat('en-US', options).format(dateObj), pattern);
467
- utcObj.setMilliseconds(dateObj.getMilliseconds());
547
+ var parts = (function () {
548
+ options.timeZone = timeZone || undefined;
549
+ var array = new Intl.DateTimeFormat('en-US', options).formatToParts(dateObj);
550
+ var values = {};
468
551
 
469
- options.timeZone = timeZone;
470
- var dateObj2 = date.parse(new Intl.DateTimeFormat('en-US', options).format(dateObj), pattern);
471
- dateObj2.setMilliseconds(dateObj.getMilliseconds());
552
+ for (var i = 0, len = array.length; i < len; i++) {
553
+ var type = array[i].type;
554
+ var value = array[i].value;
472
555
 
473
- dateObj2.getTimezoneOffset = function () { return (utcObj.getTime() - dateObj2.getTime()) / 60000 | 0; };
556
+ switch (type) {
557
+ case 'weekday':
558
+ values[type] = 'SunMonTueWedThuFriSat'.indexOf(value) / 3;
559
+ break;
560
+ case 'year':
561
+ case 'month':
562
+ case 'day':
563
+ case 'hour':
564
+ case 'minute':
565
+ case 'second':
566
+ case 'fractionalSecond':
567
+ values[type] = value | 0;
568
+ }
569
+ }
570
+ return values;
571
+ }());
474
572
 
475
- return localized_date.format(dateObj2, arg);
573
+ return date.format({
574
+ getFullYear: function () { return parts.year; },
575
+ getMonth: function () { return parts.month - 1; },
576
+ getDate: function () { return parts.day; },
577
+ getHours: function () { return parts.hour; },
578
+ getMinutes: function () { return parts.minute; },
579
+ getSeconds: function () { return parts.second; },
580
+ getMilliseconds: function () { return parts.fractionalSecond; },
581
+ getDay: function () { return parts.weekday; },
582
+ getTime: function () { return dateObj.getTime(); },
583
+ getTimezoneOffset: function () {
584
+ return (dateObj.getTime() - Date.UTC(
585
+ parts.year, parts.month - (parts.year < 100 ? 1900 * 12 + 1 : 1), parts.day,
586
+ parts.hour, parts.minute, parts.second, parts.fractionalSecond
587
+ )) / 60000 | 0;
588
+ },
589
+ getTimezoneName: function () { return timeZone || undefined; }
590
+ }, arg);
476
591
  };
477
592
  var parseTZ = function (dateString, arg, timeZone) {
478
- var pattern2 = typeof arg === 'string' ? date.compile(arg) : arg;
479
- var dateObj = localized_date.parse(dateString, pattern2, !!timeZone);
593
+ var pattern = typeof arg === 'string' ? date.compile(arg) : arg;
594
+ var dateObj = date.parse(dateString, pattern, !!timeZone);
595
+
596
+ var hasZ = function (array) {
597
+ for (var i = 1, len = array.length; i < len; i++) {
598
+ if (!array[i].indexOf('Z')) {
599
+ return true;
600
+ }
601
+ }
602
+ return false;
603
+ };
480
604
 
481
- if (!timeZone || ~date._parser.find(pattern2, 'ZZ').value || timeZone.toLowerCase() === 'utc') {
605
+ if (!timeZone || hasZ(pattern) || timeZone.toUpperCase() === 'UTC') {
482
606
  return dateObj;
483
607
  }
484
608
 
485
- options.timeZone = timeZone;
486
- var dateTimeFormat = new Intl.DateTimeFormat('en-US', options);
487
- var dateString2 = date.format(dateObj, pattern, true);
488
- var offset = (function () {
489
- var keys = timeZone.toLowerCase().split('/');
609
+ var getOffset = function (timeZoneName) {
610
+ var keys = (timeZoneName || '').toLowerCase().split('/');
490
611
  var value = timeZones[keys[0]] || {};
491
612
 
492
613
  for (var i = 1, len = keys.length; i < len; i++) {
493
614
  value = value[keys[i]] || {};
494
615
  }
495
616
  return Array.isArray(value) ? value : [];
496
- })();
617
+ };
618
+
619
+ options.timeZone = 'UTC';
620
+ var dateString2 = new Intl.DateTimeFormat('en-US', options).format(dateObj);
621
+ options.timeZone = timeZone || undefined;
622
+ var dateTimeFormat = new Intl.DateTimeFormat('en-US', options);
623
+ var offset = getOffset(timeZone);
497
624
  var comparer = function (d) {
498
- return dateString2 === dateTimeFormat.format(d).replace(/[\u202f]/, ' ');
625
+ return dateString2 === dateTimeFormat.format(d);
499
626
  };
500
627
 
501
628
  for (var j = 0, len2 = offset.length; j < len2; j++) {
@@ -507,12 +634,36 @@
507
634
  return new Date(NaN);
508
635
  };
509
636
  var transformTZ = function (dateString, arg1, arg2, timeZone) {
510
- return formatTZ(localized_date.parse(dateString, arg1), arg2, timeZone);
637
+ return formatTZ(date.parse(dateString, arg1), arg2, timeZone);
511
638
  };
512
639
 
513
640
  var name = 'timezone';
514
641
 
515
- date.plugin(name, {
642
+ var getName = function (d) {
643
+ var parts = new Intl.DateTimeFormat('en-US', {
644
+ timeZone: typeof d.getTimezoneName === 'function' ? d.getTimezoneName() : undefined,
645
+ timeZoneName: 'long'
646
+ }).formatToParts(d.getTime());
647
+
648
+ for (var i = 0, len = parts.length; i < len; i++) {
649
+ if (parts[i].type === 'timeZoneName') {
650
+ return parts[i].value;
651
+ }
652
+ }
653
+ return '';
654
+ };
655
+
656
+ proto.plugin(name, {
657
+ formatter: {
658
+ z: function (d) {
659
+ var name = getName(d);
660
+ return timeZoneNames[name] || '';
661
+ },
662
+ zz: function (d) {
663
+ var name = getName(d);
664
+ return /^GMT[+-].+$/.test(name) ? '' : name;
665
+ }
666
+ },
516
667
  extender: {
517
668
  formatTZ: formatTZ,
518
669
  parseTZ: parseTZ,
@@ -1 +1 @@
1
- export default function (date: unknown, localized_date?: unknown): string;
1
+ export default function (proto: unknown, date?: unknown): string;