diff --git a/locale.json b/locale.json index 8b9851770..c0aad5462 100644 --- a/locale.json +++ b/locale.json @@ -1 +1 @@ -[{"key":"af","name":"Afrikaans"},{"key":"am","name":"Amharic"},{"key":"ar-kw","name":"Arabic (Kuwait)"},{"key":"ar-ly","name":"Arabic (Lybia)"},{"key":"ar-dz","name":"Arabic (Algeria)"},{"key":"ar-tn","name":" Arabic (Tunisia)"},{"key":"ar-sa","name":"Arabic (Saudi Arabia)"},{"key":"ar-ma","name":"Arabic (Morocco)"},{"key":"ar-iq","name":" Arabic (Iraq)"},{"key":"ar","name":"Arabic"},{"key":"az","name":"Azerbaijani"},{"key":"bg","name":"Bulgarian"},{"key":"bi","name":"Bislama"},{"key":"bm","name":"Bambara"},{"key":"be","name":"Belarusian"},{"key":"br","name":"Breton"},{"key":"bn-bd","name":"Bengali (Bangladesh)"},{"key":"ca","name":"Catalan"},{"key":"cs","name":"Czech"},{"key":"bs","name":"Bosnian"},{"key":"bn","name":"Bengali"},{"key":"cy","name":"Welsh"},{"key":"cv","name":"Chuvash"},{"key":"bo","name":"Tibetan"},{"key":"da","name":"Danish"},{"key":"de-ch","name":"German (Switzerland)"},{"key":"dv","name":"Maldivian"},{"key":"de-at","name":"German (Austria)"},{"key":"el","name":"Greek"},{"key":"en-au","name":"English (Australia)"},{"key":"de","name":"German"},{"key":"en-ca","name":"English (Canada)"},{"key":"en-ie","name":"English (Ireland)"},{"key":"en-in","name":"English (India)"},{"key":"en-il","name":"English (Israel)"},{"key":"en-nz","name":"English (New Zealand)"},{"key":"en-gb","name":"English (United Kingdom)"},{"key":"en-sg","name":"English (Singapore)"},{"key":"en-tt","name":"English (Trinidad & Tobago)"},{"key":"es-mx","name":"Spanish (Mexico)"},{"key":"es-us","name":"Spanish (United States)"},{"key":"eo","name":"Esperanto"},{"key":"es-pr","name":"Spanish (Puerto Rico)"},{"key":"es","name":"Spanish"},{"key":"en","name":"English"},{"key":"es-do","name":"Spanish (Dominican Republic)"},{"key":"fi","name":"Finnish"},{"key":"fr-ca","name":"French (Canada)"},{"key":"fr-ch","name":"French (Switzerland)"},{"key":"et","name":"Estonian"},{"key":"eu","name":"Basque"},{"key":"fa","name":"Persian"},{"key":"fr","name":"French"},{"key":"gd","name":"Scottish Gaelic"},{"key":"fy","name":"Frisian"},{"key":"gom-latn","name":"Konkani Latin script"},{"key":"gu","name":"Gujarati"},{"key":"he","name":"Hebrew"},{"key":"ga","name":"Irish or Irish Gaelic"},{"key":"hi","name":"Hindi"},{"key":"gl","name":"Galician"},{"key":"hy-am","name":"Armenian"},{"key":"hu","name":"Hungarian"},{"key":"fo","name":"Faroese"},{"key":"is","name":"Icelandic"},{"key":"hr","name":"Croatian"},{"key":"ht","name":"Haitian Creole (Haiti)"},{"key":"it-ch","name":"Italian (Switzerland)"},{"key":"id","name":"Indonesian"},{"key":"kk","name":"Kazakh"},{"key":"jv","name":"Javanese"},{"key":"it","name":"Italian"},{"key":"kn","name":"Kannada"},{"key":"km","name":"Cambodian"},{"key":"ku","name":"Kurdish"},{"key":"lb","name":"Luxembourgish"},{"key":"ky","name":"Kyrgyz"},{"key":"lo","name":"Lao"},{"key":"ka","name":"Georgian"},{"key":"mi","name":"Maori"},{"key":"ko","name":"Korean"},{"key":"lt","name":"Lithuanian"},{"key":"mn","name":"Mongolian"},{"key":"ml","name":"Malayalam"},{"key":"mk","name":"Macedonian"},{"key":"ms-my","name":"Malay"},{"key":"ms","name":"Malay"},{"key":"mt","name":"Maltese (Malta)"},{"key":"nb","name":"Norwegian Bokmål"},{"key":"nl-be","name":"Dutch (Belgium)"},{"key":"ja","name":"Japanese"},{"key":"ne","name":"Nepalese"},{"key":"me","name":"Montenegrin"},{"key":"nl","name":"Dutch"},{"key":"oc-lnc","name":"Occitan, lengadocian dialecte"},{"key":"pl","name":"Polish"},{"key":"mr","name":"Marathi"},{"key":"lv","name":"Latvian"},{"key":"rw","name":"Kinyarwanda (Rwanda)"},{"key":"pa-in","name":"Punjabi (India)"},{"key":"pt","name":"Portuguese"},{"key":"ro","name":"Romanian"},{"key":"nn","name":"Nynorsk"},{"key":"ru","name":"Russian"},{"key":"sd","name":"Sindhi"},{"key":"se","name":"Northern Sami"},{"key":"sl","name":"Slovenian"},{"key":"sq","name":"Albanian"},{"key":"my","name":"Burmese"},{"key":"rn","name":"Kirundi"},{"key":"sk","name":"Slovak"},{"key":"sr","name":"Serbian"},{"key":"ss","name":"siSwati"},{"key":"si","name":"Sinhalese"},{"key":"sv-fi","name":"Finland Swedish"},{"key":"sw","name":"Swahili"},{"key":"sv","name":"Swedish"},{"key":"ta","name":"Tamil"},{"key":"te","name":"Telugu"},{"key":"tet","name":"Tetun Dili (East Timor)"},{"key":"th","name":"Thai"},{"key":"tg","name":"Tajik"},{"key":"tlh","name":"Klingon"},{"key":"pt-br","name":"Portuguese (Brazil)"},{"key":"tzm-latn","name":"Central Atlas Tamazight Latin"},{"key":"tl-ph","name":"Tagalog (Philippines)"},{"key":"tzm","name":"Central Atlas Tamazight"},{"key":"sr-cyrl","name":"Serbian Cyrillic"},{"key":"tr","name":"Turkish"},{"key":"ug-cn","name":"Uyghur (China)"},{"key":"uz","name":"Uzbek"},{"key":"uz-latn","name":"Uzbek Latin"},{"key":"ur","name":"Urdu"},{"key":"yo","name":"Yoruba Nigeria"},{"key":"x-pseudo","name":"Pseudo"},{"key":"zh-cn","name":"Chinese (China)"},{"key":"zh-hk","name":"Chinese (Hong Kong)"},{"key":"zh-tw","name":"Chinese (Taiwan)"},{"key":"zh","name":"Chinese"},{"key":"vi","name":"Vietnamese"},{"key":"uk","name":"Ukrainian"},{"key":"tk","name":"Turkmen"},{"key":"tzl","name":"Talossan"}] \ No newline at end of file +[{"key":"af","name":"Afrikaans"},{"key":"am","name":"Amharic"},{"key":"ar-dz","name":"Arabic (Algeria)"},{"key":"ar-iq","name":" Arabic (Iraq)"},{"key":"ar-sa","name":"Arabic (Saudi Arabia)"},{"key":"ar-ly","name":"Arabic (Lybia)"},{"key":"ar-ma","name":"Arabic (Morocco)"},{"key":"ar","name":"Arabic"},{"key":"ar-tn","name":" Arabic (Tunisia)"},{"key":"az","name":"Azerbaijani"},{"key":"bg","name":"Bulgarian"},{"key":"be","name":"Belarusian"},{"key":"bi","name":"Bislama"},{"key":"bm","name":"Bambara"},{"key":"bn-bd","name":"Bengali (Bangladesh)"},{"key":"bn","name":"Bengali"},{"key":"bo","name":"Tibetan"},{"key":"br","name":"Breton"},{"key":"bs","name":"Bosnian"},{"key":"cs","name":"Czech"},{"key":"ar-kw","name":"Arabic (Kuwait)"},{"key":"ca","name":"Catalan"},{"key":"cv","name":"Chuvash"},{"key":"cy","name":"Welsh"},{"key":"da","name":"Danish"},{"key":"de-at","name":"German (Austria)"},{"key":"de-ch","name":"German (Switzerland)"},{"key":"dv","name":"Maldivian"},{"key":"de","name":"German"},{"key":"en-au","name":"English (Australia)"},{"key":"en-ca","name":"English (Canada)"},{"key":"en-gb","name":"English (United Kingdom)"},{"key":"en","name":"English"},{"key":"en-ie","name":"English (Ireland)"},{"key":"en-il","name":"English (Israel)"},{"key":"en-in","name":"English (India)"},{"key":"en-nz","name":"English (New Zealand)"},{"key":"en-sg","name":"English (Singapore)"},{"key":"en-tt","name":"English (Trinidad & Tobago)"},{"key":"eo","name":"Esperanto"},{"key":"es-mx","name":"Spanish (Mexico)"},{"key":"el","name":"Greek"},{"key":"es-do","name":"Spanish (Dominican Republic)"},{"key":"es-pr","name":"Spanish (Puerto Rico)"},{"key":"es","name":"Spanish"},{"key":"es-us","name":"Spanish (United States)"},{"key":"eu","name":"Basque"},{"key":"fr-ca","name":"French (Canada)"},{"key":"fo","name":"Faroese"},{"key":"et","name":"Estonian"},{"key":"fr-ch","name":"French (Switzerland)"},{"key":"fa","name":"Persian"},{"key":"fi","name":"Finnish"},{"key":"fr","name":"French"},{"key":"ga","name":"Irish or Irish Gaelic"},{"key":"fy","name":"Frisian"},{"key":"gl","name":"Galician"},{"key":"gu","name":"Gujarati"},{"key":"gd","name":"Scottish Gaelic"},{"key":"hi","name":"Hindi"},{"key":"he","name":"Hebrew"},{"key":"hr","name":"Croatian"},{"key":"gom-latn","name":"Konkani Latin script"},{"key":"ht","name":"Haitian Creole (Haiti)"},{"key":"hy-am","name":"Armenian"},{"key":"is","name":"Icelandic"},{"key":"id","name":"Indonesian"},{"key":"it-ch","name":"Italian (Switzerland)"},{"key":"hu","name":"Hungarian"},{"key":"ja","name":"Japanese"},{"key":"it","name":"Italian"},{"key":"ka","name":"Georgian"},{"key":"kk","name":"Kazakh"},{"key":"kn","name":"Kannada"},{"key":"km","name":"Cambodian"},{"key":"ko","name":"Korean"},{"key":"jv","name":"Javanese"},{"key":"ku","name":"Kurdish"},{"key":"ky","name":"Kyrgyz"},{"key":"lt","name":"Lithuanian"},{"key":"lo","name":"Lao"},{"key":"me","name":"Montenegrin"},{"key":"mi","name":"Maori"},{"key":"mk","name":"Macedonian"},{"key":"ml","name":"Malayalam"},{"key":"mn","name":"Mongolian"},{"key":"mr","name":"Marathi"},{"key":"lv","name":"Latvian"},{"key":"mt","name":"Maltese (Malta)"},{"key":"nb","name":"Norwegian Bokmål"},{"key":"ne","name":"Nepalese"},{"key":"nl-be","name":"Dutch (Belgium)"},{"key":"nl","name":"Dutch"},{"key":"nn","name":"Nynorsk"},{"key":"ms","name":"Malay"},{"key":"my","name":"Burmese"},{"key":"oc-lnc","name":"Occitan, lengadocian dialecte"},{"key":"pa-in","name":"Punjabi (India)"},{"key":"ms-my","name":"Malay"},{"key":"pl","name":"Polish"},{"key":"pt-br","name":"Portuguese (Brazil)"},{"key":"pt","name":"Portuguese"},{"key":"rn","name":"Kirundi"},{"key":"ro","name":"Romanian"},{"key":"ru","name":"Russian"},{"key":"lb","name":"Luxembourgish"},{"key":"sd","name":"Sindhi"},{"key":"sq","name":"Albanian"},{"key":"sr-cyrl","name":"Serbian Cyrillic"},{"key":"si","name":"Sinhalese"},{"key":"sk","name":"Slovak"},{"key":"sr","name":"Serbian"},{"key":"rw","name":"Kinyarwanda (Rwanda)"},{"key":"ss","name":"siSwati"},{"key":"sv-fi","name":"Finland Swedish"},{"key":"sw","name":"Swahili"},{"key":"sv","name":"Swedish"},{"key":"ta","name":"Tamil"},{"key":"te","name":"Telugu"},{"key":"se","name":"Northern Sami"},{"key":"tet","name":"Tetun Dili (East Timor)"},{"key":"tg","name":"Tajik"},{"key":"tlh","name":"Klingon"},{"key":"th","name":"Thai"},{"key":"tr","name":"Turkish"},{"key":"tk","name":"Turkmen"},{"key":"tzl","name":"Talossan"},{"key":"tzm-latn","name":"Central Atlas Tamazight Latin"},{"key":"ug-cn","name":"Uyghur (China)"},{"key":"uk","name":"Ukrainian"},{"key":"ur","name":"Urdu"},{"key":"tzm","name":"Central Atlas Tamazight"},{"key":"uz-latn","name":"Uzbek Latin"},{"key":"uz","name":"Uzbek"},{"key":"vi","name":"Vietnamese"},{"key":"x-pseudo","name":"Pseudo"},{"key":"yo","name":"Yoruba Nigeria"},{"key":"zh-tw","name":"Chinese (Taiwan)"},{"key":"zh","name":"Chinese"},{"key":"zh-cn","name":"Chinese (China)"},{"key":"tl-ph","name":"Tagalog (Philippines)"},{"key":"sl","name":"Slovenian"},{"key":"zh-hk","name":"Chinese (Hong Kong)"}] \ No newline at end of file diff --git a/plugin/timezone.js b/plugin/timezone.js index b778bef4d..c83877fd6 100644 --- a/plugin/timezone.js +++ b/plugin/timezone.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).dayjs_plugin_timezone=e()}(this,(function(){"use strict";var t={year:0,month:1,day:2,hour:3,minute:4,second:5},e={};return function(n,i,o){var r,a=function(t,n,i){void 0===i&&(i={});var o=new Date(t),r=function(t,n){void 0===n&&(n={});var i=n.timeZoneName||"short",o=t+"|"+i,r=e[o];return r||(r=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:i}),e[o]=r),r}(n,i);return r.formatToParts(o)},u=function(e,n){for(var i=a(e,n),r=[],u=0;u=0&&(r[c]=parseInt(m,10))}var d=r[3],l=24===d?0:d,h=r[0]+"-"+r[1]+"-"+r[2]+" "+l+":"+r[4]+":"+r[5]+":000",v=+e;return(o.utc(h).valueOf()-(v-=v%1e3))/6e4},f=i.prototype;f.tz=function(t,e){void 0===t&&(t=r);var n=this.utcOffset(),i=this.toDate(),a=i.toLocaleString("en-US",{timeZone:t}),u=Math.round((i-new Date(a))/1e3/60),f=o(a,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(15*-Math.round(i.getTimezoneOffset()/15)-u,!0);if(e){var s=f.utcOffset();f=f.add(n-s,"minute")}return f.$x.$timezone=t,f},f.offsetName=function(t){var e=this.$x.$timezone||o.tz.guess(),n=a(this.valueOf(),e,{timeZoneName:t}).find((function(t){return"timezonename"===t.type.toLowerCase()}));return n&&n.value};var s=f.startOf;f.startOf=function(t,e){if(!this.$x||!this.$x.$timezone)return s.call(this,t,e);var n=o(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return s.call(n,t,e).tz(this.$x.$timezone,!0)},o.tz=function(t,e,n){var i=n&&e,a=n||e||r,f=u(+o(),a);if("string"!=typeof t)return o(t).tz(a);var s=function(t,e,n){var i=t-60*e*1e3,o=u(i,n);if(e===o)return[i,e];var r=u(i-=60*(o-e)*1e3,n);return o===r?[i,o]:[t-60*Math.min(o,r)*1e3,Math.max(o,r)]}(o.utc(t,i).valueOf(),f,a),m=s[0],c=s[1],d=o(m).utcOffset(c);return d.$x.$timezone=a,d},o.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},o.tz.setDefault=function(t){r=t}}})); \ No newline at end of file +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).dayjs_plugin_timezone=e()}(this,(function(){"use strict";var t={year:0,month:1,day:2,hour:3,minute:4,second:5},e={};return function(n,i,o){var r,a=function(t,n,i){void 0===i&&(i={});var o=new Date(t),r=function(t,n){void 0===n&&(n={});var i=n.timeZoneName||"short",o=t+"|"+i,r=e[o];return r||(r=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:i}),e[o]=r),r}(n,i);return r.formatToParts(o)},u=function(e,n){for(var i=a(e,n),r=[],u=0;u=0&&(r[c]=parseInt(m,10))}var d=r[3],l=24===d?0:d,h=r[0]+"-"+r[1]+"-"+r[2]+" "+l+":"+r[4]+":"+r[5]+":000",v=+e;return(o.utc(h).valueOf()-(v-=v%1e3))/6e4},f=i.prototype;f.tz=function(t,e){void 0===t&&(t=r);var n=this.utcOffset(),i=this.toDate(),a=i.toLocaleString("en-US",{timeZone:t}),u=Math.round((i-new Date(a))/1e3/60),f=o(a,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(15*-Math.round(i.getTimezoneOffset()/15)-u,!0,"UTC"!==t);if(e){var s=f.utcOffset();f=f.add(n-s,"minute")}return f.$x.$timezone=t,f},f.offsetName=function(t){var e=this.$x.$timezone||o.tz.guess(),n=a(this.valueOf(),e,{timeZoneName:t}).find((function(t){return"timezonename"===t.type.toLowerCase()}));return n&&n.value};var s=f.startOf;f.startOf=function(t,e){if(!this.$x||!this.$x.$timezone)return s.call(this,t,e);var n=o(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return s.call(n,t,e).tz(this.$x.$timezone,!0)},o.tz=function(t,e,n){var i=n&&e,a=n||e||r,f=u(+o(),a);if("string"!=typeof t)return o(t).tz(a);var s=function(t,e,n){var i=t-60*e*1e3,o=u(i,n);if(e===o)return[i,e];var r=u(i-=60*(o-e)*1e3,n);return o===r?[i,o]:[t-60*Math.min(o,r)*1e3,Math.max(o,r)]}(o.utc(t,i).valueOf(),f,a),m=s[0],c=s[1],d=o(m).utcOffset(c,!1,"UTC"!==a);return d.$x.$timezone=a,d},o.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},o.tz.setDefault=function(t){r=t}}})); \ No newline at end of file diff --git a/plugin/utc.js b/plugin/utc.js index af07564f0..36ff017a9 100644 --- a/plugin/utc.js +++ b/plugin/utc.js @@ -1 +1 @@ -!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):(t="undefined"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){"use strict";var t="minute",i=/[+-]\d\d(?::?\d\d)?/g,e=/([+-]|\d\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var o=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),o.call(this,t)};var r=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else r.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if("string"==typeof s&&(s=function(t){void 0===t&&(t="");var s=t.match(i);if(!s)return null;var f=(""+s[0]).match(e)||["-",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:"+"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s,o=this;if(f)return o.$offset=u,o.$u=0===s,o;if(0!==s){var r=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(o=this.local().add(u+r,t)).$offset=u,o.$x.$localOffset=r}else o=this.utc();return o};var h=u.format;u.format=function(t){var i=t||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return"s"===t&&this.$offset?n(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}})); \ No newline at end of file +!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):(t="undefined"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){"use strict";var t="minute",i=/[+-]\d\d(?::?\d\d)?/g,e=/([+-]|\d\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var o=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),o.call(this,t)};var r=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else r.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f,n){var u=this.$utils().u;if(u(s))return this.$u?0:u(this.$offset)?a.call(this):this.$offset;if("string"==typeof s&&(s=function(t){void 0===t&&(t="");var s=t.match(i);if(!s)return null;var f=(""+s[0]).match(e)||["-",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:"+"===n?u:-u}(s),null===s))return this;var o=Math.abs(s)<=16?60*s:s,r=this;if(f)return r.$offset=o,r.$u=0===s&&!n,r;if(0!==s||n){var h=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(r=this.local().add(o+h,t)).$offset=o,r.$x.$localOffset=h,r.$u=0===s&&!n}else r=this.utc();return r};var h=u.format;u.format=function(t){var i=t||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return"s"===t&&this.$offset?n(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}})); \ No newline at end of file diff --git a/src/plugin/timezone/index.js b/src/plugin/timezone/index.js index 832fb4a73..7520f7240 100644 --- a/src/plugin/timezone/index.js +++ b/src/plugin/timezone/index.js @@ -98,7 +98,7 @@ export default (o, c, d) => { const target = date.toLocaleString('en-US', { timeZone: timezone }) const diff = Math.round((date - new Date(target)) / 1000 / 60) let ins = d(target, { locale: this.$L }).$set(MS, this.$ms) - .utcOffset((-Math.round(date.getTimezoneOffset() / 15) * 15) - diff, true) + .utcOffset((-Math.round(date.getTimezoneOffset() / 15) * 15) - diff, true, timezone !== 'UTC') if (keepLocalTime) { const newOffset = ins.utcOffset() ins = ins.add(oldOffset - newOffset, MIN) @@ -135,7 +135,7 @@ export default (o, c, d) => { } const localTs = d.utc(input, parseFormat).valueOf() const [targetTs, targetOffset] = fixOffset(localTs, previousOffset, timezone) - const ins = d(targetTs).utcOffset(targetOffset) + const ins = d(targetTs).utcOffset(targetOffset, false, timezone !== 'UTC') ins.$x.$timezone = timezone return ins } diff --git a/src/plugin/utc/index.js b/src/plugin/utc/index.js index f1473570b..0d7bce687 100644 --- a/src/plugin/utc/index.js +++ b/src/plugin/utc/index.js @@ -69,7 +69,7 @@ export default (option, Dayjs, dayjs) => { } const oldUtcOffset = proto.utcOffset - proto.utcOffset = function (input, keepLocalTime) { + proto.utcOffset = function (input, keepLocalTime, keepTimezone) { const { u } = this.$utils() if (u(input)) { if (this.$u) { @@ -90,15 +90,16 @@ export default (option, Dayjs, dayjs) => { let ins = this if (keepLocalTime) { ins.$offset = offset - ins.$u = input === 0 + ins.$u = input === 0 && !keepTimezone return ins } - if (input !== 0) { + if (input !== 0 || keepTimezone) { const localTimezoneOffset = this.$u ? this.toDate().getTimezoneOffset() : -1 * this.utcOffset() ins = this.local().add(offset + localTimezoneOffset, MIN) ins.$offset = offset ins.$x.$localOffset = localTimezoneOffset + ins.$u = input === 0 && !keepTimezone } else { ins = this.utc() } diff --git a/test/timezone.test.js b/test/timezone.test.js index 42cab8934..881990b93 100644 --- a/test/timezone.test.js +++ b/test/timezone.test.js @@ -80,3 +80,32 @@ it('UTC diff in DST', () => { expect(day1.diff(day2, 'd')) .toBe(-3) }) + +it('clone retains date and timezone for timezone with offset', () => { + const instance = dayjs('2022-01-01T03:00:00.000Z').tz('Europe/Amsterdam') + const another = instance.clone() + expect(another.format()).toEqual(instance.format()) +}) + +it('clone retains date and timezone for timezone with offset', () => { + const instance = dayjs.tz('2022-01-01T03:00:00.000Z', 'Europe/Amsterdam') + const another = instance.clone() + expect(another.format()).toEqual(instance.format()) +}) + +it('clone retains date and timezone for timezone without offset', () => { + const instance = dayjs('2022-01-01T03:00:00.000Z').tz('Europe/London') + const another = instance.clone() + expect(another.format()).toEqual(instance.format()) + // This test would fail before in the following way: + // Expected value to equal: + // "2022-01-01T03:00:00Z" + // Received: + // "2021-12-31T14:00:00Z" +}) + +it('clone retains date and timezone for timezone without offset', () => { + const instance = dayjs.tz('2022-01-01T03:00:00.000Z', 'Europe/London') + const another = instance.clone() + expect(another.format()).toEqual(instance.format()) +})