diff --git a/app/helpers/DateHelper.php b/app/helpers/DateHelper.php index d52002901..41982e64f 100644 --- a/app/helpers/DateHelper.php +++ b/app/helpers/DateHelper.php @@ -57,18 +57,18 @@ function prepareDate($time, $hours = true) { $reldays = ($time - $today)/86400; - if ($reldays >= 0 && $reldays < 1) { + if ($reldays >= 0 && $reldays < 1) { //$reldays == 0 ? $date = __('date.today'); - } else if ($reldays >= 1 && $reldays < 2) { + } else if ($reldays >= 1 && $reldays < 2) { //$reldays == 1 ? $date = __('date.tomorrow'); - } else if ($reldays >= -1 && $reldays < 0) { + } else if ($reldays >= -1 && $reldays < 0) { //$reldays == -1 ? $date = __('date.yesterday'); } else { if (abs($reldays) < 7) { - if ($reldays > 0) { + if ($reldays > 0) { //=> $reldays > 1 $reldays = floor($reldays); - $date = 'In ' . $reldays . ' '.__('date.day') . ($reldays != 1 ? 's' : ''); + $date = 'In ' . $reldays . ' '.__('date.day') . ($reldays != 1 ? 's' : ''); //you always have s } else { $reldays = abs(floor($reldays)); $date = __('date.ago', $reldays); diff --git a/app/helpers/TimezoneHelper.php b/app/helpers/TimezoneHelper.php index 45d1cae25..fcdbfbe7f 100644 --- a/app/helpers/TimezoneHelper.php +++ b/app/helpers/TimezoneHelper.php @@ -5,42 +5,51 @@ */ function getTimezoneList() { - return array( - 'Etc/GMT+12' => -12.00, - 'Etc/GMT+11' => -11.00, - 'Etc/GMT+10' => -10.00, - 'Etc/GMT+9' => -9.00, - 'Etc/GMT+8' => -8.00, - 'Etc/GMT+7' => -7.00, - 'Etc/GMT+6' => -6.00, - 'Etc/GMT+5' => -5.00, - 'America/Caracas' => -4.30, - 'Etc/GMT+4' => -4.00, - 'America/St_Johns' => -3.30, - 'Etc/GMT+3' => -3.00, - 'Etc/GMT+2' => -2.00, - 'Etc/GMT+1' => -1.00, - 'Etc/GMT' => 0, - 'Etc/GMT-1' => 1.00, - 'Etc/GMT-2' => 2.00, - 'Etc/GMT-3' => 3.00, - 'Asia/Tehran' => 3.30, - 'Etc/GMT-4' => 4.00, - 'Etc/GMT-5' => 5.00, - 'Asia/Kolkata' => 5.30, - 'Asia/Katmandu' => 5.45, - 'Etc/GMT-6' => 6.00, - 'Asia/Rangoon' => 6.30, - 'Etc/GMT-7' => 7.00, - 'Etc/GMT-8' => 8.00, - 'Etc/GMT-9' => 9.00, - 'Australia/Darwin' => 9.30, - 'Etc/GMT-10' => 10.00, - 'Etc/GMT-11' => 11.00, - 'Etc/GMT-12' => 12.00, - 'Etc/GMT-13' => 13.00); + static $regions = array( + DateTimeZone::AFRICA, + DateTimeZone::AMERICA, + DateTimeZone::ANTARCTICA, + DateTimeZone::ASIA, + DateTimeZone::ATLANTIC, + DateTimeZone::AUSTRALIA, + DateTimeZone::EUROPE, + DateTimeZone::INDIAN, + DateTimeZone::PACIFIC, + ); + + $timezones = array(); + foreach( $regions as $region ) + { + $timezones = array_merge( $timezones, DateTimeZone::listIdentifiers( $region ) ); + } + + $timezone_offsets = array(); + foreach( $timezones as $timezone ) + { + $tz = new DateTimeZone($timezone); + $timezone_offsets[$timezone] = $tz->getOffset(new DateTime); + } + + // sort timezone by timezone name + ksort($timezone_offsets); + + $timezone_list = array(); + foreach( $timezone_offsets as $timezone => $offset ) + { + $offset_prefix = $offset < 0 ? '-' : '+'; + $offset_formatted = gmdate( 'H:i', abs($offset) ); + + $pretty_offset = "UTC${offset_prefix}${offset_formatted}"; + + $split = explode("/", $timezone); + + $timezone_list[$timezone] = "$split[1]/$split[0] (${pretty_offset})"; + } + + asort($timezone_list); + + return $timezone_list; } - /* * Get the user local timezone diff --git a/app/widgets/AdminMain/AdminMain.php b/app/widgets/AdminMain/AdminMain.php index 22881d4b7..149322f3d 100644 --- a/app/widgets/AdminMain/AdminMain.php +++ b/app/widgets/AdminMain/AdminMain.php @@ -47,9 +47,12 @@ class AdminMain extends WidgetBase return requestURL($url, 1); } - public function date() + public function date($timezone) { - return date('l jS \of F Y h:i:s A'); + $t = new DateTimeZone($timezone); + $c = new DateTime(null, $t); + $current_time = $c->format('D M j Y G:i:s'); + return $current_time; } function display() diff --git a/app/widgets/AdminMain/admin.js b/app/widgets/AdminMain/admin.js index b4dcf342d..a43870ad8 100644 --- a/app/widgets/AdminMain/admin.js +++ b/app/widgets/AdminMain/admin.js @@ -1,42 +1,43 @@ var tz_list; var original = true; +var operators = { + '+': function(a, b) { return a + b }, + '-': function(a, b) { return a - b }, +}; function update(elt){ - original = false; if (elt.selectedIndex == -1) return null; - text = elt.options[elt.selectedIndex].text; - h_m = text.split("(")[1].split(")")[0].split("."); - var today = new Date(); - if(h_m[0]<0){ - h_m[0] = h_m[0].substr(1); - today.setHours(today.getHours() - parseInt(h_m[0])); - today.setMinutes(today.getMinutes() - parseInt(h_m[1])); - } - else{ - today.setHours(today.getHours() + parseInt(h_m[0])); - today.setMinutes(today.getMinutes() + parseInt(h_m[1])); - } - return today; + //Get the offset from the selected option + text = elt.options[elt.selectedIndex].text; + //Determine if it is a positive or negative offset + sign = text.indexOf("+") > -1 ? "+" : "-"; + //Seperate hours and minutes and get the offset in ms + h_m = text.split(sign)[1].split(")")[0].split(":"); + tzOffset = parseInt(h_m[0]) * 3600000 + parseInt(h_m[1]) * 60000; + //Get the offset between your computer and UTC + pcOffset = new Date().getTimezoneOffset() * 60000; + + return new Date(operators[sign]((new Date().getTime() + pcOffset), tzOffset)); } movim_add_onload(function() { - tz_list = document.querySelector("#timezone"); - - tz_list.onchange = function(e){ - document.querySelector(".dTimezone").innerHTML = update(tz_list).toUTCString(); - } - setInterval( - function(){ - if(original){ - date = new Date(); - document.querySelector(".dTimezone").innerHTML = date.toUTCString(); - } - else{ - date = new Date(document.querySelector(".dTimezone").innerHTML); - date.setSeconds(date.getSeconds() + 1); - document.querySelector(".dTimezone").innerHTML = date.toUTCString(); - } - } - ,1000); + tz_list = document.querySelector("#timezone"); + tz_list.onchange = function(e){ + newTime = update(tz_list); + formatDate(newTime); + } + setInterval( + function(){ //increment time each second + date = new Date(document.querySelector(".dTimezone").innerHTML).getTime() + 1000; + date = formatDate(new Date(date)); + } + ,1000); + + formatDate = function (newTime){ + h = newTime.getHours()<10 ? "0" + newTime.getHours() : newTime.getHours(); + m = newTime.getMinutes()<10 ? "0" + newTime.getMinutes() : newTime.getMinutes(); + s = newTime.getSeconds()<10 ? "0" + newTime.getSeconds() : newTime.getSeconds(); + document.querySelector(".dTimezone").innerHTML = newTime.toDateString() + " " + h+ ":" + m + ":" + s; + } }); diff --git a/app/widgets/AdminMain/adminmain.tpl b/app/widgets/AdminMain/adminmain.tpl index 0b11955b0..378d5b18f 100644 --- a/app/widgets/AdminMain/adminmain.tpl +++ b/app/widgets/AdminMain/adminmain.tpl @@ -67,13 +67,13 @@ {if="$conf->timezone == $key"} selected="selected" {/if}> - {$key} ({$value|number_format:2}) + {$value} {/loop}

- {$c->date()} + {$c->date($conf->timezone)} diff --git a/bootstrap.php b/bootstrap.php index 450981d17..445f3003b 100644 --- a/bootstrap.php +++ b/bootstrap.php @@ -238,8 +238,9 @@ class Bootstrap { // We set the default timezone to the server timezone $cd = new \Modl\ConfigDAO(); $config = $cd->get(); - - date_default_timezone_set($config->timezone); + + //date_default_timezone_set($config->timezone); + date_default_timezone_set(date_default_timezone_get()); } private function setLogLevel() {