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() {