Skip to content

Instantly share code, notes, and snippets.

@jwoertink
Created February 27, 2013 04:18
Show Gist options
  • Select an option

  • Save jwoertink/5045031 to your computer and use it in GitHub Desktop.

Select an option

Save jwoertink/5045031 to your computer and use it in GitHub Desktop.
var timezones = function() {
zones = [
{ value: "Abu Dhabi", label: "Abu Dhabi" },
{ value: "Adelaide", label: "Adelaide" },
{ value: "Alaska", label: "Alaska" },
{ value: "Almaty", label: "Almaty" },
{ value: "America/Los_Angeles", label: "America/Los_Angeles" },
{ value: "American Samoa", label: "American Samoa" },
{ value: "Amsterdam", label: "Amsterdam" },
{ value: "Arizona", label: "Arizona" },
{ value: "Astana", label: "Astana" },
{ value: "Athens", label: "Athens" },
{ value: "Atlantic Time (Canada)", label: "Atlantic Time (Canada)" },
{ value: "Auckland", label: "Auckland" },
{ value: "Azores", label: "Azores" },
{ value: "Baghdad", label: "Baghdad" },
{ value: "Baku", label: "Baku" },
{ value: "Bangkok", label: "Bangkok" },
{ value: "Beijing", label: "Beijing" },
{ value: "Belgrade", label: "Belgrade" },
{ value: "Berlin", label: "Berlin" },
{ value: "Bern", label: "Bern" },
{ value: "Bogota", label: "Bogota" },
{ value: "Brasilia", label: "Brasilia" },
{ value: "Bratislava", label: "Bratislava" },
{ value: "Brisbane", label: "Brisbane" },
{ value: "Brussels", label: "Brussels" },
{ value: "Bucharest", label: "Bucharest" },
{ value: "Budapest", label: "Budapest" },
{ value: "Buenos Aires", label: "Buenos Aires" },
{ value: "Cairo", label: "Cairo" },
{ value: "Canberra", label: "Canberra" },
{ value: "Cape Verde Is.", label: "Cape Verde Is." },
{ value: "Caracas", label: "Caracas" },
{ value: "Casablanca", label: "Casablanca" },
{ value: "Central America", label: "Central America" },
{ value: "Central Time (US & Canada)", label: "Central Time (US & Canada)" },
{ value: "Chennai", label: "Chennai" },
{ value: "Chihuahua", label: "Chihuahua" },
{ value: "Chongqing", label: "Chongqing" },
{ value: "Copenhagen", label: "Copenhagen" },
{ value: "Darwin", label: "Darwin" },
{ value: "Dhaka", label: "Dhaka" },
{ value: "Dublin", label: "Dublin" },
{ value: "Eastern Time (US & Canada)", label: "Eastern Time (US & Canada)" },
{ value: "Edinburgh", label: "Edinburgh" },
{ value: "Ekaterinburg", label: "Ekaterinburg" },
{ value: "Fiji", label: "Fiji" },
{ value: "Georgetown", label: "Georgetown" },
{ value: "Greenland", label: "Greenland" },
{ value: "Guadalajara", label: "Guadalajara" },
{ value: "Guam", label: "Guam" },
{ value: "Hanoi", label: "Hanoi" },
{ value: "Harare", label: "Harare" },
{ value: "Hawaii", label: "Hawaii" },
{ value: "Helsinki", label: "Helsinki" },
{ value: "Hobart", label: "Hobart" },
{ value: "Hong Kong", label: "Hong Kong" },
{ value: "Indiana (East)", label: "Indiana (East)" },
{ value: "International Date Line West", label: "International Date Line West" },
{ value: "Irkutsk", label: "Irkutsk" },
{ value: "Islamabad", label: "Islamabad" },
{ value: "Istanbul", label: "Istanbul" },
{ value: "Jakarta", label: "Jakarta" },
{ value: "Jerusalem", label: "Jerusalem" },
{ value: "Kabul", label: "Kabul" },
{ value: "Kamchatka", label: "Kamchatka" },
{ value: "Karachi", label: "Karachi" },
{ value: "Kathmandu", label: "Kathmandu" },
{ value: "Kolkata", label: "Kolkata" },
{ value: "Krasnoyarsk", label: "Krasnoyarsk" },
{ value: "Kuala Lumpur", label: "Kuala Lumpur" },
{ value: "Kuwait", label: "Kuwait" },
{ value: "Kyiv", label: "Kyiv" },
{ value: "La Paz", label: "La Paz" },
{ value: "Lima", label: "Lima" },
{ value: "Lisbon", label: "Lisbon" },
{ value: "Ljubljana", label: "Ljubljana" },
{ value: "London", label: "London" },
{ value: "Madrid", label: "Madrid" },
{ value: "Magadan", label: "Magadan" },
{ value: "Marshall Is.", label: "Marshall Is." },
{ value: "Mazatlan", label: "Mazatlan" },
{ value: "Melbourne", label: "Melbourne" },
{ value: "Mexico City", label: "Mexico City" },
{ value: "Mid-Atlantic", label: "Mid-Atlantic" },
{ value: "Midway Island", label: "Midway Island" },
{ value: "Minsk", label: "Minsk" },
{ value: "Monrovia", label: "Monrovia" },
{ value: "Monterrey", label: "Monterrey" },
{ value: "Moscow", label: "Moscow" },
{ value: "Mountain Time (US & Canada)", label: "Mountain Time (US & Canada)" },
{ value: "Mumbai", label: "Mumbai" },
{ value: "Muscat", label: "Muscat" },
{ value: "Nairobi", label: "Nairobi" },
{ value: "New Caledonia", label: "New Caledonia" },
{ value: "New Delhi", label: "New Delhi" },
{ value: "Newfoundland", label: "Newfoundland" },
{ value: "Novosibirsk", label: "Novosibirsk" },
{ value: "Nuku'alofa", label: "Nuku'alofa" },
{ value: "Osaka", label: "Osaka" },
{ value: "Pacific Time (US & Canada)", label: "Pacific Time (US & Canada)" },
{ value: "Paris", label: "Paris" },
{ value: "Perth", label: "Perth" },
{ value: "Port Moresby", label: "Port Moresby" },
{ value: "Prague", label: "Prague" },
{ value: "Pretoria", label: "Pretoria" },
{ value: "Quito", label: "Quito" },
{ value: "Rangoon", label: "Rangoon" },
{ value: "Riga", label: "Riga" },
{ value: "Riyadh", label: "Riyadh" },
{ value: "Rome", label: "Rome" },
{ value: "Samoa", label: "Samoa" },
{ value: "Santiago", label: "Santiago" },
{ value: "Sapporo", label: "Sapporo" },
{ value: "Sarajevo", label: "Sarajevo" },
{ value: "Saskatchewan", label: "Saskatchewan" },
{ value: "Seoul", label: "Seoul" },
{ value: "Singapore", label: "Singapore" },
{ value: "Skopje", label: "Skopje" },
{ value: "Sofia", label: "Sofia" },
{ value: "Solomon Is.", label: "Solomon Is." },
{ value: "Sri Jayawardenepura", label: "Sri Jayawardenepura" },
{ value: "St. Petersburg", label: "St. Petersburg" },
{ value: "Stockholm", label: "Stockholm" },
{ value: "Sydney", label: "Sydney" },
{ value: "Taipei", label: "Taipei" },
{ value: "Tallinn", label: "Tallinn" },
{ value: "Tashkent", label: "Tashkent" },
{ value: "Tbilisi", label: "Tbilisi" },
{ value: "Tehran", label: "Tehran" },
{ value: "Tijuana", label: "Tijuana" },
{ value: "Tokelau Is.", label: "Tokelau Is." },
{ value: "Tokyo", label: "Tokyo" },
{ value: "UTC", label: "UTC" },
{ value: "Ulaan Bataar", label: "Ulaan Bataar" },
{ value: "Urumqi", label: "Urumqi" },
{ value: "Vienna", label: "Vienna" },
{ value: "Vilnius", label: "Vilnius" },
{ value: "Vladivostok", label: "Vladivostok" },
{ value: "Volgograd", label: "Volgograd" },
{ value: "Warsaw", label: "Warsaw" },
{ value: "Wellington", label: "Wellington" },
{ value: "West Central Africa", label: "West Central Africa" },
{ value: "Yakutsk", label: "Yakutsk" },
{ value: "Yerevan", label: "Yerevan" },
{ value: "Zagreb", label: "Zagreb" }
];
return zones;
};
var currentTimeZone = function() {
var date = new Date();
var offset = (date.getTimezoneOffset() / 60);
numbers = offset.toString().split('.')
hh = parseInt(numbers[0], 10);
hh = Math.abs(hh) * (hh < 0 ? 1 : -1).toString();
mm = numbers.length > 1 ? (parseInt(numbers[1], 10) * 6 / 10).toString() : '00';
zone = { value: [hh, mm].join(''), label: getTimezoneName()};
return zone;
};
var getTimezoneName = function() {
tmSummer = new Date(Date.UTC(2005, 6, 30, 0, 0, 0, 0));
so = -1 * tmSummer.getTimezoneOffset();
tmWinter = new Date(Date.UTC(2005, 12, 30, 0, 0, 0, 0));
wo = -1 * tmWinter.getTimezoneOffset();
if (-660 == so && -660 == wo) return 'Pacific/Midway';
if (-600 == so && -600 == wo) return 'Pacific/Tahiti';
if (-570 == so && -570 == wo) return 'Pacific/Marquesas';
if (-540 == so && -600 == wo) return 'America/Adak';
if (-540 == so && -540 == wo) return 'Pacific/Gambier';
if (-480 == so && -540 == wo) return 'US/Alaska';
if (-480 == so && -480 == wo) return 'Pacific/Pitcairn';
if (-420 == so && -480 == wo) return 'US/Pacific';
if (-420 == so && -420 == wo) return 'US/Arizona';
if (-360 == so && -420 == wo) return 'US/Mountain';
if (-360 == so && -360 == wo) return 'America/Guatemala';
if (-360 == so && -300 == wo) return 'Pacific/Easter';
if (-300 == so && -360 == wo) return 'US/Central';
if (-300 == so && -300 == wo) return 'America/Bogota';
if (-240 == so && -300 == wo) return 'US/Eastern';
if (-240 == so && -240 == wo) return 'America/Caracas';
if (-240 == so && -180 == wo) return 'America/Santiago';
if (-180 == so && -240 == wo) return 'Canada/Atlantic';
if (-180 == so && -180 == wo) return 'America/Montevideo';
if (-180 == so && -120 == wo) return 'America/Sao_Paulo';
if (-150 == so && -210 == wo) return 'America/St_Johns';
if (-120 == so && -180 == wo) return 'America/Godthab';
if (-120 == so && -120 == wo) return 'America/Noronha';
if (-60 == so && -60 == wo) return 'Atlantic/Cape_Verde';
if (0 == so && -60 == wo) return 'Atlantic/Azores';
if (0 == so && 0 == wo) return 'Africa/Casablanca';
if (60 == so && 0 == wo) return 'Europe/London';
if (60 == so && 60 == wo) return 'Africa/Algiers';
if (60 == so && 120 == wo) return 'Africa/Windhoek';
if (120 == so && 60 == wo) return 'Europe/Amsterdam';
if (120 == so && 120 == wo) return 'Africa/Harare';
if (180 == so && 120 == wo) return 'Europe/Athens';
if (180 == so && 180 == wo) return 'Africa/Nairobi';
if (240 == so && 180 == wo) return 'Europe/Moscow';
if (240 == so && 240 == wo) return 'Asia/Dubai';
if (270 == so && 210 == wo) return 'Asia/Tehran';
if (270 == so && 270 == wo) return 'Asia/Kabul';
if (300 == so && 240 == wo) return 'Asia/Baku';
if (300 == so && 300 == wo) return 'Asia/Karachi';
if (330 == so && 330 == wo) return 'Asia/Calcutta';
if (345 == so && 345 == wo) return 'Asia/Katmandu';
if (360 == so && 300 == wo) return 'Asia/Yekaterinburg';
if (360 == so && 360 == wo) return 'Asia/Colombo';
if (390 == so && 390 == wo) return 'Asia/Rangoon';
if (420 == so && 360 == wo) return 'Asia/Almaty';
if (420 == so && 420 == wo) return 'Asia/Bangkok';
if (480 == so && 420 == wo) return 'Asia/Krasnoyarsk';
if (480 == so && 480 == wo) return 'Australia/Perth';
if (540 == so && 480 == wo) return 'Asia/Irkutsk';
if (540 == so && 540 == wo) return 'Asia/Tokyo';
if (570 == so && 570 == wo) return 'Australia/Darwin';
if (570 == so && 630 == wo) return 'Australia/Adelaide';
if (600 == so && 540 == wo) return 'Asia/Yakutsk';
if (600 == so && 600 == wo) return 'Australia/Brisbane';
if (600 == so && 660 == wo) return 'Australia/Sydney';
if (630 == so && 660 == wo) return 'Australia/Lord_Howe';
if (660 == so && 600 == wo) return 'Asia/Vladivostok';
if (660 == so && 660 == wo) return 'Pacific/Guadalcanal';
if (690 == so && 690 == wo) return 'Pacific/Norfolk';
if (720 == so && 660 == wo) return 'Asia/Magadan';
if (720 == so && 720 == wo) return 'Pacific/Fiji';
if (720 == so && 780 == wo) return 'Pacific/Auckland';
if (765 == so && 825 == wo) return 'Pacific/Chatham';
if (780 == so && 780 == wo) return 'Pacific/Enderbury'
if (840 == so && 840 == wo) return 'Pacific/Kiritimati';
return 'US/Pacific';
};
var offsetByDate = function(date) {
if(typeof date == 'undefined' || date == '') {
offset = "+0000";
} else {
var d = Date.parse(date);
var offset = d.getUTCOffset();
}
return offset;
};
var tzMap = function() {
hash = {
"+0400": "Abu Dhabi",
"+0930": "Adelaide",
"-0900": "Alaska",
"+0600": "Almaty",
"-0800": "America/Los_Angeles",
"-1100": "American Samoa",
"+0100": "Amsterdam",
"-0700": "Arizona",
"+0600": "Astana",
"+0200": "Athens",
"-0400": "Atlantic Time (Canada)",
"+1200": "Auckland",
"-0100": "Azores",
"+0300": "Baghdad",
"+0400": "Baku",
"+0700": "Bangkok",
"+0800": "Beijing",
"+0100": "Belgrade",
"+0100": "Berlin",
"+0100": "Bern",
"-0500": "Bogota",
"-0300": "Brasilia",
"+0100": "Bratislava",
"+1000": "Brisbane",
"+0100": "Brussels",
"+0200": "Bucharest",
"+0100": "Budapest",
"-0300": "Buenos Aires",
"+0200": "Cairo",
"+1000": "Canberra",
"-0100": "Cape Verde Is.",
"-0430": "Caracas",
"+0000": "Casablanca",
"-0600": "Central America",
"-0600": "Central Time (US & Canada)",
"+0530": "Chennai",
"-0700": "Chihuahua",
"+0800": "Chongqing",
"+0100": "Copenhagen",
"+0930": "Darwin",
"+0600": "Dhaka",
"+0000": "Dublin",
"-0500": "Eastern Time (US & Canada)",
"+0000": "Edinburgh",
"+0600": "Ekaterinburg",
"+1200": "Fiji",
"-0400": "Georgetown",
"-0300": "Greenland",
"-0600": "Guadalajara",
"+1000": "Guam",
"+0700": "Hanoi",
"+0200": "Harare",
"-1000": "Hawaii",
"+0200": "Helsinki",
"+1000": "Hobart",
"+0800": "Hong Kong",
"-0500": "Indiana (East)",
"-1100": "International Date Line West",
"+0900": "Irkutsk",
"+0500": "Islamabad",
"+0200": "Istanbul",
"+0700": "Jakarta",
"+0200": "Jerusalem",
"+0430": "Kabul",
"+1200": "Kamchatka",
"+0500": "Karachi",
"+0545": "Kathmandu",
"+0530": "Kolkata",
"+0800": "Krasnoyarsk",
"+0800": "Kuala Lumpur",
"+0300": "Kuwait",
"+0200": "Kyiv",
"-0400": "La Paz",
"-0500": "Lima",
"+0000": "Lisbon",
"+0100": "Ljubljana",
"+0000": "London",
"+0100": "Madrid",
"+1200": "Magadan",
"+1200": "Marshall Is.",
"-0700": "Mazatlan",
"+1000": "Melbourne",
"-0600": "Mexico City",
"-0200": "Mid-Atlantic",
"-1100": "Midway Island",
"+0300": "Minsk",
"+0000": "Monrovia",
"-0600": "Monterrey",
"+0400": "Moscow",
"-0700": "Mountain Time (US & Canada)",
"+0530": "Mumbai",
"+0400": "Muscat",
"+0300": "Nairobi",
"+1100": "New Caledonia",
"+0530": "New Delhi",
"-0330": "Newfoundland",
"+0700": "Novosibirsk",
"+1300": "Nuku'alofa",
"+0900": "Osaka",
"-0800": "Pacific Time (US & Canada)",
"+0100": "Paris",
"+0800": "Perth",
"+1000": "Port Moresby",
"+0100": "Prague",
"+0200": "Pretoria",
"-0500": "Quito",
"+0630": "Rangoon",
"+0200": "Riga",
"+0300": "Riyadh",
"+0100": "Rome",
"+1300": "Samoa",
"-0400": "Santiago",
"+0900": "Sapporo",
"+0100": "Sarajevo",
"-0600": "Saskatchewan",
"+0900": "Seoul",
"+0800": "Singapore",
"+0100": "Skopje",
"+0200": "Sofia",
"+1200": "Solomon Is.",
"+0530": "Sri Jayawardenepura",
"+0400": "St. Petersburg",
"+0100": "Stockholm",
"+1000": "Sydney",
"+0800": "Taipei",
"+0200": "Tallinn",
"+0500": "Tashkent",
"+0400": "Tbilisi",
"+0330": "Tehran",
"-0800": "Tijuana",
"+1300": "Tokelau Is.",
"+0900": "Tokyo",
"+0000": "UTC",
"+0800": "Ulaan Bataar",
"+0800": "Urumqi",
"+0100": "Vienna",
"+0200": "Vilnius",
"+1100": "Vladivostok",
"+0400": "Volgograd",
"+0100": "Warsaw",
"+1200": "Wellington",
"+0100": "West Central Africa",
"+1000": "Yakutsk",
"+0400": "Yerevan",
"+0100": "Zagreb",
};
return hash;
};
(function() {
var datetimePicker;
$(function() {
return datetimePicker();
});
datetimePicker = function() {
var end_zone, ends, start_zone, starts;
starts = $('.datetime.starts_at');
start_zone = tzMap()[offsetByDate(starts.val())];
ends = $('.datetime.ends_at');
end_zone = tzMap()[offsetByDate(ends.val())];
starts.datetimepicker({
timeFormat: 'HH:mm z',
dateFormat: 'yy-mm-dd',
showTimezone: true,
timezone: start_zone,
timezoneList: timezones(),
stepMinute: 15,
onClose: function(dateText, inst) {
var end_date, start_date;
if (ends.val() !== '') {
start_date = starts.datetimepicker('getDate');
end_date = ends.datetimepicker('getDate');
if (start_date > end_date) {
return ends.datetimepicker('setDate', start_date);
}
} else {
}
},
onSelect: function(selectedDateTime) {
return ends.datetimepicker('option', 'minDate', starts.datetimepicker('getDate'));
}
});
return ends.datetimepicker({
timeFormat: 'HH:mm z',
dateFormat: 'yy-mm-dd',
showTimezone: true,
timezone: end_zone,
timezoneList: timezones(),
stepMinute: 15,
onClose: function(dateText, inst) {
var end_date, start_date;
if (starts.val() !== '') {
start_date = starts.datetimepicker('getDate');
end_date = ends.datetimepicker('getDate');
if (start_date > end_date) {
return starts.datetimepicker('setDate', end_date);
}
} else {
return starts.val(dateText);
}
},
onSelect: function(selectedDateTime) {
return starts.datetimepicker('option', 'maxDate', ends.datetimepicker('getDate'));
}
});
};
}).call(this);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment