diff --git a/htdocs/admin/system/dolibarr.php b/htdocs/admin/system/dolibarr.php
index 1dfe1eb03e7..e6c2f1f88f7 100644
--- a/htdocs/admin/system/dolibarr.php
+++ b/htdocs/admin/system/dolibarr.php
@@ -160,11 +160,12 @@ print '
| '.$langs->trans("CurrentTimeZone").'=0?'+':'').$a;
-$val.=' ('.($a>=0?'+':'').($a*3600).')';
+$val.=' ('.($a==='unknown'?'unknown':($a>=0?'+':'').($a*3600)).')';
$val.=' '.getServerTimeZoneString().' '.($b>=0?'+':'').$b.' ('.($b>=0?'+':'').($b*3600).')';
-$val.=' '.$langs->trans("DaylingSavingTime").': '.yn($daylight);
+$val.=' '.$langs->trans("DaylingSavingTime").': '.($daylight==='unknown'?'unknown':yn($daylight));
print $form->textwithtooltip($val,$txt,2,1,img_info(''));
print ' |
'."\n"; // value defined in http://fr3.php.net/manual/en/timezones.europe.php
$var=!$var;
diff --git a/htdocs/core/lib/date.lib.php b/htdocs/core/lib/date.lib.php
index f7be31e1565..2f5b983c468 100644
--- a/htdocs/core/lib/date.lib.php
+++ b/htdocs/core/lib/date.lib.php
@@ -86,25 +86,39 @@ function getServerTimeZoneInt($refgmtdate='now')
if (class_exists('DateTime') && ! empty($conf->global->MAIN_NEW_DATE))
{
// Method 1 (include daylight)
+ $gmtnow=dol_now('gmt'); $yearref=dol_print_date($gmtnow,'%Y'); $monthref=dol_print_date($gmtnow,'%m'); $dayref=dol_print_date($gmtnow,'%d');
+ if ($refgmtdate == 'now') $newrefgmtdate=$yearref.'-'.$monthref.'-'.$dayref;
+ elseif ($refgmtdate == 'summer') $newrefgmtdate=$yearref.'-05-15';
+ else $newrefgmtdate=$yearref.'-01-01';
$localtz = new DateTimeZone(getServerTimeZoneString());
- $localdt = new DateTime($refgmtdate, $localtz);
+ $localdt = new DateTime($newrefgmtdate, $localtz);
$tmp=-1*$localtz->getOffset($localdt);
+ //print $refgmtdate.'='.$tmp;
}
else
{
// Method 2 (does not include daylight, not supported by adodb)
if ($refgmtdate == 'now')
{
- $gmtnow=dol_now('gmt');
- $monthnow=dol_print_date($gmtnow,'%m'); $daynow=dol_print_date($gmtnow,'%d');
+ // We don't know server timezone string, so we don't know location, so we can't guess daylight. We assume we use same than client. Fix is to use MAIN_NEW_DATE.
+ $gmtnow=dol_now('gmt'); $yearref=dol_print_date($gmtnow,'%Y'); $monthref=dol_print_date($gmtnow,'%m'); $dayref=dol_print_date($gmtnow,'%d');
if (dol_stringtotime($_SESSION['dol_dst_first']) <= $gmtnow && $gmtnow < dol_stringtotime($_SESSION['dol_dst_second'])) $daylight=1;
else $daylight=0;
- $tmp=dol_mktime(0,0,0,$monthnow,$daynow,1970,false,0)-dol_mktime(0,0,0,$monthnow,$daynow,1970,true,0)-($daylight*3600);
+ $tmp=dol_mktime(0,0,0,$monthref,$dayref,$yearref,false,0)-dol_mktime(0,0,0,$monthref,$dayref,$yearref,true,0)-($daylight*3600);
+ return 'unknown';
+ }
+ elseif ($refgmtdate == 'summer')
+ {
+ // We don't know server timezone string, so we don't know location, so we can't guess daylight. We assume we use same than client. Fix is to use MAIN_NEW_DATE.
+ $gmtnow=dol_now('gmt'); $yearref=dol_print_date($gmtnow,'%Y'); $monthref='08'; $dayref='01';
+ if (dol_stringtotime($_SESSION['dol_dst_first']) <= dol_stringtotime($yearref.'-'.$monthref.'-'.$dayref) && dol_stringtotime($yearref.'-'.$monthref.'-'.$dayref) < dol_stringtotime($_SESSION['dol_dst_second'])) $daylight=1;
+ else $daylight=0;
+ $tmp=dol_mktime(0,0,0,$monthref,$dayref,$yearref,false,0)-dol_mktime(0,0,0,$monthref,$dayref,$yearref,true,0)-($daylight*3600);
+ return 'unknown';
}
- else if ($refgmtdate == 'summer') $tmp=-1; // TODO
else $tmp=dol_mktime(0,0,0,1,1,1970);
}
- $tz=($tmp<0?1:-1)*abs($tmp/3600);
+ $tz=round(($tmp<0?1:-1)*abs($tmp/3600));
return $tz;
}