diff --git a/htdocs/comm/action/peruser.php b/htdocs/comm/action/peruser.php index 04353190adb..831a019d04e 100644 --- a/htdocs/comm/action/peruser.php +++ b/htdocs/comm/action/peruser.php @@ -205,6 +205,8 @@ if ($action == 'show_day' || $action == 'show_week' || $action == 'show_month' | $param.="&maxprint=".$maxprint; $prev = dol_get_first_day_week($day, $month, $year); +//print "day=".$day." month=".$month." year=".$year; +//var_dump($prev); exit; $prev_year = $prev['prev_year']; $prev_month = $prev['prev_month']; $prev_day = $prev['prev_day']; @@ -223,6 +225,7 @@ $next_day = $next['day']; // Define firstdaytoshow and lastdaytoshow (warning: lastdaytoshow is last second to show + 1) $firstdaytoshow=dol_mktime(0,0,0,$first_month,$first_day,$first_year); $lastdaytoshow=dol_time_plus_duree($firstdaytoshow, 7, 'd'); +//print $firstday.'-'.$first_month.'-'.$first_year; //print dol_print_date($firstdaytoshow,'dayhour'); //print dol_print_date($lastdaytoshow,'dayhour'); @@ -534,12 +537,16 @@ echo '' ; echo ''; -// Table : +// Line header with list of days + +//print "begin_d=".$begin_d." end_d=".$end_d; + + echo ''; echo ''; echo ''; -$i=0; +$i=0; // 0 = sunday, while ($i < 7) { if (($i + 1) < $begin_d || ($i + 1) > $end_d) @@ -679,7 +686,7 @@ foreach ($usernames as $username) // Lopp on each day of week $i = 0; - for ($iter_day = 0; $iter_day < 7; $iter_day++) + for ($iter_day = 0; $iter_day < 8; $iter_day++) { if (($i + 1) < $begin_d || ($i + 1) > $end_d) { diff --git a/htdocs/core/datepicker.php b/htdocs/core/datepicker.php index 7c5c4898fce..03264601624 100644 --- a/htdocs/core/datepicker.php +++ b/htdocs/core/datepicker.php @@ -26,17 +26,18 @@ * \brief File to manage popup date selector */ -if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER','1'); // Not disabled cause need to load personalized language -if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1'); // Not disabled cause need to load personalized language +//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER','1'); // Not disabled cause need to load personalized language +//if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1'); // Not disabled cause need to load personalized language if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC','1'); //if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1'); // Not disabled cause need to do translations if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK',1); if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL',1); if (! defined('NOLOGIN')) define('NOLOGIN',1); // Not disabled cause need to load personalized language -if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU',1); -if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML',1); +if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU',1); +if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML',1); require_once '../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; if (GETPOST('lang')) $langs->setDefaultLang(GETPOST('lang')); // If language was forced on URL by the main.inc.php $langs->load("main"); @@ -195,9 +196,9 @@ function displayBox($selectedDate,$month,$year) - + + }else {?> @@ -209,28 +210,36 @@ function displayBox($selectedDate,$month,$year) }?> "; + //echo $conf->global->MAIN_START_WEEK.' '.$firstdate["wday"].' '.$startday; $cols=0; - for($i=0;$i< $mydate["wday"];$i++) + for ($i = 0; $i < 7; $i++) { + $w = ($i + $startday) % 7; + if ($w == $firstdate["wday"]) + { + $mydate = $firstdate; + break; + } echo ""; $cols++; } } else { - if ($mydate["wday"]==0) + if ($mydate["wday"] == $startday) { echo ""; $cols=0; @@ -254,7 +263,7 @@ function displayBox($selectedDate,$month,$year) echo ">".sprintf("%02s",$mydate["mday"]).""; $cols++; - if ($mydate["wday"]==6) echo "\n"; + if (($mydate["wday"] + 1) % 7 == $startday) echo "\n"; //$thedate=strtotime("tomorrow",$thedate); $day++; diff --git a/htdocs/core/lib/date.lib.php b/htdocs/core/lib/date.lib.php index d2c6ce4bd4f..072db988dc1 100644 --- a/htdocs/core/lib/date.lib.php +++ b/htdocs/core/lib/date.lib.php @@ -479,34 +479,36 @@ function dol_get_last_day($year,$month=12,$gm=false) return $datelim; } -/** Return first day of week for a date +/** Return first day of week for a date. First day of week may be monday if option MAIN_START_WEEK is 1. * * @param int $day Day * @param int $month Month * @param int $year Year * @param int $gm False or 0 or 'server' = Return date to compare with server TZ, True or 1 to compare with GM date. - * @return array year,month,week,first_day,prev_year,prev_month,prev_day + * @return array year,month,week,first_day,first_month,first_year,prev_day,prev_month,prev_year */ function dol_get_first_day_week($day,$month,$year,$gm=false) { global $conf; + //$day=2; $month=2; $year=2015; $date = dol_mktime(0,0,0,$month,$day,$year,$gm); //Checking conf of start week $start_week = (isset($conf->global->MAIN_START_WEEK)?$conf->global->MAIN_START_WEEK:1); - $tmparray = dol_getdate($date,true); + $tmparray = dol_getdate($date,true); // detail of current day - //Calculate days to count + //Calculate days = offset from current day $days = $start_week - $tmparray['wday']; if ($days>=1) $days=7-$days; $days = abs($days); $seconds = $days*24*60*60; + //print 'start_week='.$start_week.' tmparray[wday]='.$tmparray['wday'].' day offset='.$days.' seconds offset='.$seconds.'
'; //Get first day of week - $tmpday = date($tmparray[0])-$seconds; - $tmpday = date("d",$tmpday); + $tmpdaytms = date($tmparray[0])-$seconds; // $tmparray[0] is day of parameters + $tmpday = date("d",$tmpdaytms); //Check first day of week is in same month than current day or not if ($tmpday>$day) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 372d2f67373..c3446eb7b15 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -999,8 +999,9 @@ function dol_print_date($time,$format='',$tzoutput='tzserver',$outputlangs='',$e /** * Return an array with locale date info. * PHP getdate is restricted to the years 1901-2038 on Unix and 1970-2038 on Windows - * WARNING: This function always use PHP server timezone to return locale informations. + * WARNING: This function always use PHP server timezone to return locale informations !!! * Usage must be avoid. + * FIXME: Replace this with PHP date function and a parameter $gm * * @param int $timestamp Timestamp * @param boolean $fast Fast mode @@ -1010,7 +1011,7 @@ function dol_print_date($time,$format='',$tzoutput='tzserver',$outputlangs='',$e * 'minutes' => $min, * 'hours' => $hour, * 'mday' => $day, - * 'wday' => $dow, + * 'wday' => $dow, 0=sunday, 6=saturday * 'mon' => $month, * 'year' => $year, * 'yday' => floor($secsInYear/$_day_power), @@ -1044,7 +1045,7 @@ function dol_getdate($timestamp,$fast=false) { $arrayinfo=getdate($timestamp); - $startday=isset($conf->global->MAIN_START_WEEK)?$conf->global->MAIN_START_WEEK:1; + /*$startday=isset($conf->global->MAIN_START_WEEK)?$conf->global->MAIN_START_WEEK:1; if($startday==1) { if ($arrayinfo["wday"]==0) @@ -1055,7 +1056,7 @@ function dol_getdate($timestamp,$fast=false) { $arrayinfo["wday"]=$arrayinfo["wday"]-1; } - } + }*/ } return $arrayinfo; diff --git a/test/phpunit/DateLibTest.php b/test/phpunit/DateLibTest.php index f5d9e7d0cc4..f6f94e8b201 100644 --- a/test/phpunit/DateLibTest.php +++ b/test/phpunit/DateLibTest.php @@ -341,4 +341,24 @@ class DateLibTest extends PHPUnit_Framework_TestCase return $result; } + /** + * testDolGetFirstDayWeek + * + * @return int + */ + public function testDolGetFirstDayWeek() + { + global $conf; + + $day=3; $month=2; $year=2015; + $conf->global->MAIN_START_WEEK = 1; // start on monday + $prev = dol_get_first_day_week($day, $month, $year); + $this->assertEquals(2, (int) $prev['first_day']); // monday for month 2, year 2014 is the 2 + + $day=3; $month=2; $year=2015; + $conf->global->MAIN_START_WEEK = 0; // start on sunday + $prev = dol_get_first_day_week($day, $month, $year); + $this->assertEquals(1, (int) $prev['first_day']); // sunday for month 2, year 2015 is the 1st + } + } diff --git a/test/phpunit/FunctionsLibTest.php b/test/phpunit/FunctionsLibTest.php index f1b06bbbf4c..001ac0b1dec 100755 --- a/test/phpunit/FunctionsLibTest.php +++ b/test/phpunit/FunctionsLibTest.php @@ -888,4 +888,32 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase return true; } + /** + * testDolGetDate + * + * @return boolean + */ + public function testDolGetDate() + { + global $conf; + + $conf->global->MAIN_START_WEEK = 0; + + $tmp=dol_getdate(1); // 1/1/1970 and 1 second = thirday + $this->assertEquals(4, $tmp['wday']); + + $tmp=dol_getdate(24*60*60+1); // 2/1/1970 and 1 second = friday + $this->assertEquals(5, $tmp['wday']); + + $conf->global->MAIN_START_WEEK = 1; + + $tmp=dol_getdate(1); // 1/1/1970 and 1 second = thirday + $this->assertEquals(4, $tmp['wday']); + + $tmp=dol_getdate(24*60*60+1); // 2/1/1970 and 1 second = friday + $this->assertEquals(5, $tmp['wday']); + + return true; + } + }
trans("ShortThursday") ?> trans("ShortFriday") ?> trans("ShortSaturday") ?>trans("ShortSunday") ?>trans("ShortSunday") ?> trans("ShortSunday") ?> trans("ShortMonday") ?> trans("ShortTuesday") ?>