diff --git a/htdocs/core/js/dst.js b/htdocs/core/js/dst.js index 7276e37755c..78abe6e6c15 100644 --- a/htdocs/core/js/dst.js +++ b/htdocs/core/js/dst.js @@ -49,8 +49,8 @@ $(document).ready(function () { var dst_first=DisplayDstSwitchDates('first'); var dst_second=DisplayDstSwitchDates('second'); //alert(dst); + $('#tz_string').val(timezone.name()); // returns TZ string from jstz.determine $('#tz').val(std_time_offset); // returns TZ - $('#tz_string').val(timezone.name()); // returns TZ string $('#dst_observed').val(dst); // returns if DST is observed on summer $('#dst_first').val(dst_first); // returns DST first switch in year $('#dst_second').val(dst_second); // returns DST second switch in year diff --git a/htdocs/includes/jstz/jstz.js b/htdocs/includes/jstz/jstz.js index 89edbde6c25..f849c57fa0c 100644 --- a/htdocs/includes/jstz/jstz.js +++ b/htdocs/includes/jstz/jstz.js @@ -30,12 +30,10 @@ var jstz = (function () { MAX_SCORE: 864000000, // 10 days AMBIGUITIES: { 'America/Denver': ['America/Mazatlan'], - 'Europe/London': ['Africa/Casablanca'], 'America/Chicago': ['America/Mexico_City'], 'America/Asuncion': ['America/Campo_Grande', 'America/Santiago'], 'America/Montevideo': ['America/Sao_Paulo', 'America/Santiago'], - // Europe/Minsk should not be in this list... but Windows. - 'Asia/Beirut': ['Asia/Amman', 'Asia/Jerusalem', 'Europe/Helsinki', 'Asia/Damascus', 'Africa/Cairo', 'Asia/Gaza', 'Europe/Minsk'], + 'Asia/Beirut': ['Asia/Amman', 'Asia/Jerusalem', 'Europe/Helsinki', 'Asia/Damascus', 'Africa/Cairo', 'Asia/Gaza', 'Europe/Minsk', 'Africa/Windhoek'], 'Pacific/Auckland': ['Pacific/Fiji'], 'America/Los_Angeles': ['America/Santa_Isabel'], 'America/New_York': ['America/Havana'], @@ -47,7 +45,6 @@ var jstz = (function () { 'Australia/Sydney': ['Australia/Lord_Howe'], 'Asia/Tokyo': ['Asia/Yakutsk'], 'Asia/Dhaka': ['Asia/Omsk'], - // In the real world Yerevan is not ambigous for Baku... but Windows. 'Asia/Baku': ['Asia/Yerevan'], 'Australia/Brisbane': ['Asia/Vladivostok'], 'Pacific/Noumea': ['Asia/Vladivostok'], @@ -69,6 +66,24 @@ var jstz = (function () { return (offset !== null ? offset : 0); }, + + get_offsets = function get_offsets() { + var offsets = []; + + for (var month = 0; month <= 11; month++) { + for (var date = 1; date <= 28; date++) { + var currentOffset = get_date_offset(new Date(consts.BASELINE_YEAR, month, date)); + if (!offsets) { + offsets.push(); + } else if (offsets && offsets[offsets.length-1] !== currentOffset) { + offsets.push(currentOffset); + } + } + } + + return offsets; + }, + /** * This function does some basic calculations to create information about * the user's timezone. It uses REFERENCE_YEAR as a solid year for which @@ -81,17 +96,22 @@ var jstz = (function () { * @returns {String} */ lookup_key = function lookup_key() { - var january_offset = get_date_offset(new Date(consts.BASELINE_YEAR, 0, 2)), - june_offset = get_date_offset(new Date(consts.BASELINE_YEAR, 5, 2)), - diff = january_offset - june_offset; + var diff = 0; + var offsets = get_offsets(); - if (diff < 0) { - return january_offset + ",1"; - } else if (diff > 0) { - return june_offset + ",1," + HEMISPHERE_SOUTH; + if (offsets.length > 1) { + diff = offsets[0] - offsets[1]; } - return january_offset + ",0"; + if (offsets.length > 3) { + return offsets[0] + ",1,weird"; + } else if (diff < 0) { + return offsets[0] + ",1"; + } else if (diff > 0) { + return offsets[1] + ",1," + HEMISPHERE_SOUTH; + } + + return offsets[0] + ",0"; }, @@ -101,7 +121,7 @@ var jstz = (function () { */ get_from_internationalization_api = function get_from_internationalization_api() { var format, timezone; - if (typeof Intl === "undefined" || typeof Intl.DateTimeFormat === "undefined") { + if (!Intl || typeof Intl === "undefined" || typeof Intl.DateTimeFormat === "undefined") { return; } @@ -385,11 +405,15 @@ var jstz = (function () { * * @returns Object */ - determine = function determine() { - var preliminary_tz = get_from_internationalization_api(); + determine = function determine(using_intl) { + var preliminary_tz = false; + var needle = lookup_key(); + if (using_intl || typeof using_intl === 'undefined') { + preliminary_tz = get_from_internationalization_api(); + } if (!preliminary_tz) { - preliminary_tz = jstz.olson.timezones[lookup_key()]; + preliminary_tz = jstz.olson.timezones[needle]; if (typeof consts.AMBIGUITIES[preliminary_tz] !== 'undefined') { preliminary_tz = get_by_dst(preliminary_tz); @@ -399,7 +423,10 @@ var jstz = (function () { return { name: function () { return preliminary_tz; - } + }, + using_intl: using_intl || typeof using_intl === 'undefined', + needle: needle, + offsets: get_offsets() }; }; @@ -449,7 +476,7 @@ jstz.olson.timezones = { '-240,1,s': 'America/Asuncion', '-210,1': 'America/St_Johns', '-180,1': 'America/Godthab', - '-180,0': 'America/Argentina/Buenos_Aires', + '-180,0': 'America/Buenos_Aires', '-180,1,s': 'America/Montevideo', '-120,0': 'America/Noronha', '-120,1': 'America/Noronha', @@ -457,10 +484,12 @@ jstz.olson.timezones = { '-60,0': 'Atlantic/Cape_Verde', '0,0': 'UTC', '0,1': 'Europe/London', + '0,1,weird': 'Africa/Casablanca', '60,1': 'Europe/Berlin', '60,0': 'Africa/Lagos', - '60,1,s': 'Africa/Windhoek', + '60,1,weird': 'Africa/Casablanca', '120,1': 'Asia/Beirut', + '120,1,weird': 'Africa/Cairo', '120,0': 'Africa/Johannesburg', '180,0': 'Asia/Baghdad', '180,1': 'Europe/Moscow', @@ -470,8 +499,8 @@ jstz.olson.timezones = { '270,0': 'Asia/Kabul', '300,1': 'Asia/Yekaterinburg', '300,0': 'Asia/Karachi', - '330,0': 'Asia/Kolkata', - '345,0': 'Asia/Kathmandu', + '330,0': 'Asia/Calcutta', + '345,0': 'Asia/Katmandu', '360,0': 'Asia/Dhaka', '360,1': 'Asia/Omsk', '390,0': 'Asia/Rangoon', @@ -500,7 +529,7 @@ jstz.olson.timezones = { '840,0': 'Pacific/Kiritimati' }; -/* Build time: 2015-11-02 13:01:00Z Build by invoking python utilities/dst.py generate */ +/* Build time: 2019-09-09 11:29:41Z Build by invoking python utilities/dst.py generate */ jstz.olson.dst_rules = { "years": [ 2008, @@ -536,39 +565,6 @@ jstz.olson.dst_rules = { } ] }, - { - "name": "Africa/Casablanca", - "rules": [ - { - "e": 1220223600000, - "s": 1212278400000 - }, - { - "e": 1250809200000, - "s": 1243814400000 - }, - { - "e": 1281222000000, - "s": 1272758400000 - }, - { - "e": 1312066800000, - "s": 1301788800000 - }, - { - "e": 1348970400000, - "s": 1345428000000 - }, - { - "e": 1382839200000, - "s": 1376100000000 - }, - { - "e": 1414288800000, - "s": 1406944800000 - } - ] - }, { "name": "America/Asuncion", "rules": [ @@ -812,24 +808,24 @@ jstz.olson.dst_rules = { "s": 1238925600000 }, { - "e": 1288515600000, - "s": 1270375200000 + "e": 1289120400000, + "s": 1268560800000 }, { - "e": 1319965200000, - "s": 1301824800000 + "e": 1320570000000, + "s": 1300010400000 }, { - "e": 1351414800000, - "s": 1333274400000 + "e": 1352019600000, + "s": 1331460000000 }, { - "e": 1382864400000, - "s": 1365328800000 + "e": 1383469200000, + "s": 1362909600000 }, { - "e": 1414314000000, - "s": 1396778400000 + "e": 1414918800000, + "s": 1394359200000 } ] }, @@ -1414,6 +1410,39 @@ jstz.olson.dst_rules = { "s": 1396141200000 } ] + }, + { + "name": "Africa/Windhoek", + "rules": [ + { + "e": 1220749200000, + "s": 1207440000000 + }, + { + "e": 1252198800000, + "s": 1238889600000 + }, + { + "e": 1283648400000, + "s": 1270339200000 + }, + { + "e": 1315098000000, + "s": 1301788800000 + }, + { + "e": 1346547600000, + "s": 1333238400000 + }, + { + "e": 1377997200000, + "s": 1365292800000 + }, + { + "e": 1410051600000, + "s": 1396742400000 + } + ] } ] }; @@ -1430,4 +1459,4 @@ if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') { root.jstz = jstz; } } -}()); \ No newline at end of file +}()); diff --git a/htdocs/includes/jstz/jstz.min.js b/htdocs/includes/jstz/jstz.min.js index a6be0f665e2..a05b7e84f7e 100644 --- a/htdocs/includes/jstz/jstz.min.js +++ b/htdocs/includes/jstz/jstz.min.js @@ -1,2 +1,2 @@ -/* jstz.min.js Version: 1.0.6 Build date: 2015-11-04 */ -!function(e){var a=function(){"use strict";var e="s",s={DAY:864e5,HOUR:36e5,MINUTE:6e4,SECOND:1e3,BASELINE_YEAR:2014,MAX_SCORE:864e6,AMBIGUITIES:{"America/Denver":["America/Mazatlan"],"Europe/London":["Africa/Casablanca"],"America/Chicago":["America/Mexico_City"],"America/Asuncion":["America/Campo_Grande","America/Santiago"],"America/Montevideo":["America/Sao_Paulo","America/Santiago"],"Asia/Beirut":["Asia/Amman","Asia/Jerusalem","Europe/Helsinki","Asia/Damascus","Africa/Cairo","Asia/Gaza","Europe/Minsk"],"Pacific/Auckland":["Pacific/Fiji"],"America/Los_Angeles":["America/Santa_Isabel"],"America/New_York":["America/Havana"],"America/Halifax":["America/Goose_Bay"],"America/Godthab":["America/Miquelon"],"Asia/Dubai":["Asia/Yerevan"],"Asia/Jakarta":["Asia/Krasnoyarsk"],"Asia/Shanghai":["Asia/Irkutsk","Australia/Perth"],"Australia/Sydney":["Australia/Lord_Howe"],"Asia/Tokyo":["Asia/Yakutsk"],"Asia/Dhaka":["Asia/Omsk"],"Asia/Baku":["Asia/Yerevan"],"Australia/Brisbane":["Asia/Vladivostok"],"Pacific/Noumea":["Asia/Vladivostok"],"Pacific/Majuro":["Asia/Kamchatka","Pacific/Fiji"],"Pacific/Tongatapu":["Pacific/Apia"],"Asia/Baghdad":["Europe/Minsk","Europe/Moscow"],"Asia/Karachi":["Asia/Yekaterinburg"],"Africa/Johannesburg":["Asia/Gaza","Africa/Cairo"]}},i=function(e){var a=-e.getTimezoneOffset();return null!==a?a:0},r=function(){var a=i(new Date(s.BASELINE_YEAR,0,2)),r=i(new Date(s.BASELINE_YEAR,5,2)),n=a-r;return 0>n?a+",1":n>0?r+",1,"+e:a+",0"},n=function(){var e,a;if("undefined"!=typeof Intl&&"undefined"!=typeof Intl.DateTimeFormat&&(e=Intl.DateTimeFormat(),"undefined"!=typeof e&&"undefined"!=typeof e.resolvedOptions))return a=e.resolvedOptions().timeZone,a&&(a.indexOf("/")>-1||"UTC"===a)?a:void 0},o=function(e){for(var a=new Date(e,0,1,0,0,1,0).getTime(),s=new Date(e,12,31,23,59,59).getTime(),i=a,r=new Date(i).getTimezoneOffset(),n=null,o=null;s-864e5>i;){var t=new Date(i),A=t.getTimezoneOffset();A!==r&&(r>A&&(n=t),A>r&&(o=t),r=A),i+=864e5}return n&&o?{s:u(n).getTime(),e:u(o).getTime()}:!1},u=function l(e,a,i){"undefined"==typeof a&&(a=s.DAY,i=s.HOUR);for(var r=new Date(e.getTime()-a).getTime(),n=e.getTime()+a,o=new Date(r).getTimezoneOffset(),u=r,t=null;n-i>u;){var A=new Date(u),c=A.getTimezoneOffset();if(c!==o){t=A;break}u+=i}return a===s.DAY?l(t,s.HOUR,s.MINUTE):a===s.HOUR?l(t,s.MINUTE,s.SECOND):t},t=function(e,a,s,i){if("N/A"!==s)return s;if("Asia/Beirut"===a){if("Africa/Cairo"===i.name&&13983768e5===e[6].s&&14116788e5===e[6].e)return 0;if("Asia/Jerusalem"===i.name&&13959648e5===e[6].s&&14118588e5===e[6].e)return 0}else if("America/Santiago"===a){if("America/Asuncion"===i.name&&14124816e5===e[6].s&&1397358e6===e[6].e)return 0;if("America/Campo_Grande"===i.name&&14136912e5===e[6].s&&13925196e5===e[6].e)return 0}else if("America/Montevideo"===a){if("America/Sao_Paulo"===i.name&&14136876e5===e[6].s&&1392516e6===e[6].e)return 0}else if("Pacific/Auckland"===a&&"Pacific/Fiji"===i.name&&14142456e5===e[6].s&&13961016e5===e[6].e)return 0;return s},A=function(e,i){for(var r=function(a){for(var r=0,n=0;n=a.rules[n].s&&e[n].e<=a.rules[n].e)){r="N/A";break}if(r=0,r+=Math.abs(e[n].s-a.rules[n].s),r+=Math.abs(a.rules[n].e-e[n].e),r>s.MAX_SCORE){r="N/A";break}}return r=t(e,i,r,a)},n={},o=a.olson.dst_rules.zones,u=o.length,A=s.AMBIGUITIES[i],c=0;u>c;c++){var m=o[c],l=r(o[c]);"N/A"!==l&&(n[m.name]=l)}for(var f in n)if(n.hasOwnProperty(f))for(var d=0;d1&&(a=s[0]-s[1]),s.length>3?s[0]+",1,weird":a<0?s[0]+",1":a>0?s[1]+",1,"+e:s[0]+",0"},o=function(){var e,a;if(Intl&&"undefined"!=typeof Intl&&"undefined"!=typeof Intl.DateTimeFormat&&(e=Intl.DateTimeFormat(),"undefined"!=typeof e&&"undefined"!=typeof e.resolvedOptions))return a=e.resolvedOptions().timeZone,a&&(a.indexOf("/")>-1||"UTC"===a)?a:void 0},t=function(e){for(var a=new Date(e,0,1,0,0,1,0).getTime(),s=new Date(e,12,31,23,59,59).getTime(),i=a,r=new Date(i).getTimezoneOffset(),n=null,o=null;ir&&(o=t),r=A),i+=864e5}return!(!n||!o)&&{s:u(n).getTime(),e:u(o).getTime()}},u=function f(e,a,i){"undefined"==typeof a&&(a=s.DAY,i=s.HOUR);for(var r=new Date(e.getTime()-a).getTime(),n=e.getTime()+a,o=new Date(r).getTimezoneOffset(),t=r,u=null;t=a.rules[n].s&&e[n].e<=a.rules[n].e)){r="N/A";break}if(r=0,r+=Math.abs(e[n].s-a.rules[n].s),r+=Math.abs(a.rules[n].e-e[n].e),r>s.MAX_SCORE){r="N/A";break}}return r=A(e,i,r,a)},n={},o=a.olson.dst_rules.zones,t=o.length,u=s.AMBIGUITIES[i],c=0;c