THANASOFT-HFC/gestion/lib/Helpers/DateHelpers.php
2025-03-18 10:02:56 +03:00

155 lines
5.3 KiB
PHP

<?php
namespace OCA\Gestion\Helpers;
use DateTime;
use DateTimeZone;
use Exception;
use IntlDateFormatter;
class DateHelpers
{
public static function isWeekend(string $dateString): bool
{
try {
$date = new DateTime($dateString);
$dayOfWeek = $date->format('N');
return in_array($dayOfWeek, [6, 7]);
} catch (Exception $e) {
// Handle invalid date strings
return false;
}
}
public static function getPublicHolidayText($isPublicHoliday){
return $isPublicHoliday ? "Ferie" : "J";
}
public static function isPublicHoliday(string $dateString): bool
{
try {
$date = new DateTime($dateString);
$dayOfWeek = $date->format('N');
return $dayOfWeek == 7;
} catch (Exception $e) {
// Handle invalid date strings
return false;
}
}
public static function GetMonthPlainString($month){
$formatter = new IntlDateFormatter(
'fr_FR',
IntlDateFormatter::FULL,
IntlDateFormatter::NONE,
null,
null,
'MMMM'
);
$date = DateTime::createFromFormat('!m', $month);
$monthString = strtoupper($formatter->format($date));
$normalizedMonth = mb_convert_case($monthString, MB_CASE_UPPER, "UTF-8");
return $normalizedMonth;
}
public static function GetDateWithFormatDayAndMonthPlainString(string $date){
$dateTime = new DateTime($date);
$formattedDate = $dateTime->format('d F');
$formattedDate = str_replace(
array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'),
array('JANVIER', 'FEVRIER', 'MARS', 'AVRIL', 'MAI', 'JUIN', 'JUILLET', 'AOUT', 'SEPTEMBRE', 'OCTOBRE', 'NOVEMBRE', 'DECEMBRE'),
$formattedDate
);
return $formattedDate;
}
public static function GetFullFactureOrDevisNumberByDate($date,$devisNumber,$prefix){
$year = $date->format('y');
$month = $date->format('m');
$devisNumber = str_pad($devisNumber, 2, '0', STR_PAD_LEFT);
$devisNumber = $prefix . $year . $month . $devisNumber;
return $devisNumber;
}
public static function GetLastDayOfTheMonthOfADate($datetime){
$datetime->modify('last day of this month');
$lastDay = $datetime;
return $lastDay;
}
public static function getDatesOfMonth($year, $month) {
$dates = [];
$daysInMonth = self::getDaysCountInAMonthAndYear($month, $year);
for ($day = 1; $day <= $daysInMonth; $day++) {
$dateString = sprintf("%04d-%02d-%02d", $year, $month, $day);
$dates[] = new DateTime($dateString);
}
return $dates;
}
public static function getDaysCountInAMonthAndYear($month,$year){
return $month == 2 ? ($year % 4 ? 28 : ($year % 100 ? 29 : ($year % 400 ? 28 : 29))) : (($month - 1) % 7 % 2 ? 30 : 31);
}
public static function getHoursBetweenTwoDatetime($datetimeEnd,$datetimeStart){
if($datetimeEnd == null || $datetimeStart == null){
return 0;
}
$interval = $datetimeStart->diff($datetimeEnd);
$hours = $interval->h + ($interval->days * 24) + ($interval->i / 60);
return $hours;
}
public static function GetWorkingHoursBetweenDatetimeEndAndDatetimeStart(Datetime|null $datetimeEnd,Datetime|null $datetimeStart){
if($datetimeEnd == null || $datetimeStart == null){
return 0;
}
$workingStartAM = new DateTime($datetimeStart->format('Y-m-d') . ' 08:30',$datetimeStart->getTimezone());
$workingEndAM = new DateTime($datetimeStart->format('Y-m-d') . ' 12:30',$datetimeStart->getTimezone());
$workingStartPM = new DateTime($datetimeStart->format('Y-m-d') . ' 13:30',$datetimeStart->getTimezone());
$workingEndPM = new DateTime($datetimeStart->format('Y-m-d') . ' 17:30',$datetimeStart->getTimezone());
$totalHours = 0;
if ($datetimeStart->format('N') < 7) {
$dayStartAM = max($datetimeStart, $workingStartAM);
$dayEndAM = min($datetimeEnd, $workingEndAM);
if ($dayStartAM < $dayEndAM) {
$totalHours += ($dayEndAM->getTimestamp() - $dayStartAM->getTimestamp()) / 3600;
}
$dayStartPM = max($datetimeStart, $workingStartPM);
$dayEndPM = min($datetimeEnd, $workingEndPM);
if ($dayStartPM < $dayEndPM) {
$totalHours += ($dayEndPM->getTimestamp() - $dayStartPM->getTimestamp()) / 3600;
}
}
else{
$totalHours = ($datetimeEnd->getTimestamp() - $datetimeStart->getTimestamp()) / 3600;
}
return $totalHours;
}
public static function convertInvoiceDateToMonthAndYearOnly($invoiceDate = null)
{
if (!$invoiceDate) {
return "";
}
$dateTime = new DateTime($invoiceDate);
$formatter = new IntlDateFormatter(
'fr_FR',
IntlDateFormatter::LONG,
IntlDateFormatter::NONE,
null,
null,
'MMMM yyyy'
);
return ucfirst($formatter->format($dateTime));
}
}