/** * Function to return number of working days (and text of units) between two dates (working days) * * @param int $timestampStart Timestamp for start date (date must be UTC to avoid calculation errors) * @param int $timestampEnd Timestamp for end date (date must be UTC to avoid calculation errors) * @param int $inhour 0: return number of days, 1: return number of hours * @param int $lastday We include last day, 0: no, 1:yes * @param int $halfday Tag to define half day when holiday start and end * @param string $country_code Country code (company country code if not defined) * @return int Number of days or hours */ function num_open_day($timestampStart, $timestampEnd, $inhour = 0, $lastday = 0, $halfday = 0, $country_code = '') { global $langs, $mysoc; if (empty($country_code)) { $country_code = $mysoc->country_code; } dol_syslog('num_open_day timestampStart=' . $timestampStart . ' timestampEnd=' . $timestampEnd . ' bit=' . $lastday . ' country_code=' . $country_code); // Check parameters if (!is_int($timestampStart) && !is_float($timestampStart)) { return 'ErrorBadParameter_num_open_day'; } if (!is_int($timestampEnd) && !is_float($timestampEnd)) { return 'ErrorBadParameter_num_open_day'; } //print 'num_open_day timestampStart='.$timestampStart.' timestampEnd='.$timestampEnd.' bit='.$lastday; if ($timestampStart < $timestampEnd) { $numdays = num_between_day($timestampStart, $timestampEnd, $lastday); $numholidays = num_public_holiday($timestampStart, $timestampEnd, $country_code); $nbOpenDay = $numdays - $numholidays; $nbOpenDay .= " " . $langs->trans("Days"); if ($inhour == 1 && $nbOpenDay <= 3) { $nbOpenDay = $nbOpenDay * 24 . $langs->trans("HourShort"); } return $nbOpenDay - ($inhour == 1 ? 12 : 0.5) * abs($halfday); } elseif ($timestampStart == $timestampEnd) { $nbOpenDay = $lastday; if ($inhour == 1) { $nbOpenDay = $nbOpenDay * 24 . $langs->trans("HourShort"); } return $nbOpenDay - ($inhour == 1 ? 12 : 0.5) * abs($halfday); } else { return $langs->trans("Error"); } }
/** * Fonction retournant le nombre de jour entre deux dates sans les jours feries (jours ouvres) * * @param timestamp $timestampStart Timestamp de debut * @param timestamp $timestampEnd Timestamp de fin * @param int $inhour 0: sort le nombre de jour , 1: sort le nombre d'heure (72 max) * @param int $lastday On prend en compte le dernier jour, 0: non, 1:oui * @return int Nombre de jours ou d'heures */ function num_open_day($timestampStart, $timestampEnd, $inhour = 0, $lastday = 0) { global $langs; if ($timestampStart < $timestampEnd) { $bit = 0; if ($lastday == 1) { $bit = 1; } $nbOpenDay = num_between_day($timestampStart, $timestampEnd, $bit) - num_public_holiday($timestampStart, $timestampEnd); $nbOpenDay .= " " . $langs->trans("Days"); if ($inhour == 1 && $nbOpenDay <= 3) { $nbOpenDay = $nbOpenDay * 24 . $langs->trans("HourShort"); } return $nbOpenDay; } else { return $langs->trans("Error"); } }
/** * testNumPublicHoliday * * @return void */ public function testNumPublicHoliday() { global $conf, $user, $langs, $db; $conf = $this->savconf; $user = $this->savuser; $langs = $this->savlangs; $db = $this->savdb; // With same hours - Tuesday/Wednesday jan 2013 $date1 = dol_mktime(0, 0, 0, 1, 1, 2013); $date2 = dol_mktime(0, 0, 0, 1, 2, 2013); $result = num_public_holiday($date1, $date2, 'FR', 1); print __METHOD__ . " result=" . $result . "\n"; $this->assertEquals(1, $result, 'NumPublicHoliday for Tuesday/Wednesday jan 2013 for FR'); // 1 closed days $result = num_public_holiday($date1, $date2, 'XX', 1); print __METHOD__ . " result=" . $result . "\n"; $this->assertEquals(0, $result, 'NumPublicHoliday for Tuesday/Wednesday jan 2013 for XX'); // no closed days (country unknown) // With same hours - Friday/Sunday jan 2013 $date1 = dol_mktime(0, 0, 0, 1, 4, 2013); $date2 = dol_mktime(0, 0, 0, 1, 6, 2013); $result = num_public_holiday($date1, $date2, 'FR', 1); print __METHOD__ . " result=" . $result . "\n"; $this->assertEquals(2, $result, 'NumPublicHoliday for FR'); // 1 opened day, 2 closed days $result = num_public_holiday($date1, $date2, 'XX', 1); print __METHOD__ . " result=" . $result . "\n"; $this->assertEquals(2, $result, 'NumPublicHoliday for XX'); // 1 opened day, 2 closed days (even if country unknown) }