$dateto) { $years_difference--; } if (mktime(date("H", $dateto), date("i", $dateto), date("s", $dateto), date("n", $dateto), date("j", $dateto), date("Y", $dateto) - ($years_difference + 1)) > $datefrom) { $years_difference++; } $datediff = $years_difference; break; case "q": // Number of full quarters $quarters_difference = floor($difference / 8035200); while (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom) + ($quarters_difference * 3), date("j", $dateto), date("Y", $datefrom)) < $dateto) { $months_difference++; } $quarters_difference--; $datediff = $quarters_difference; break; case "m": // Number of full months $months_difference = floor($difference / 2678400); while (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom) + ($months_difference), date("j", $dateto), date("Y", $datefrom)) < $dateto) { $months_difference++; } $months_difference--; $datediff = $months_difference; break; case 'y': // Difference between day numbers $datediff = date("z", $dateto) - date("z", $datefrom); break; case "d": // Number of full days $datediff = floor($difference / 86400); break; case "w": // Number of full weekdays $days_difference = floor($difference / 86400); $weeks_difference = floor($days_difference / 7); // Complete weeks $first_day = date("w", $datefrom); $days_remainder = floor($days_difference % 7); $odd_days = $first_day + $days_remainder; // Do we have a Saturday or Sunday in the remainder? if ($odd_days > 7) { // Sunday $days_remainder--; } if ($odd_days > 6) { // Saturday $days_remainder--; } $datediff = ($weeks_difference * 5) + $days_remainder; break; case "ww": // Number of full weeks $datediff = floor($difference / 604800); break; case "h": // Number of full hours $datediff = floor($difference / 3600); break; case "n": // Number of full minutes $datediff = floor($difference / 60); break; default: // Number of full seconds (default) $datediff = $difference; break; } return $return_absolute_diff ? abs($datediff) : $datediff; } function GetTimestamp($data, $add_days = 0, $debug = false) { if (strpos($data, " ") === false) { $a_data = $data; $a_time = "00:00"; } else { $a_data = substr($data, 0, strpos($data, " ")); $a_time = substr($data, strpos($data, " ") + 1, 8); } $a_data = explode("/", str_replace("-", "/", $a_data)); $a_time = explode(":", str_replace(".", ":", $a_time)); if (strlen($a_data[0]) == 4) { // Arriva in formato ISO $timestamp = mktime($a_time[0], $a_time[1], $a_time[2], $a_data[1], $add_days + $a_data[2], $a_data[0]); } else { // Arriva in formato ITA $timestamp = mktime($a_time[0], $a_time[1], $a_time[2], $a_data[1], $add_days + $a_data[0], $a_data[2]); } return $timestamp; } /** * Data una stringa, ne restituisce la data corrispondente nel formato richiesto. * * @param string $data La stringa contenente la data in formato italiano * @param mixed $format Deve essere DATE_FORMAT_ITA oppure DATE_FORMAT_ISO * @return string */ public static function FormatDate($data = null, $format = DATE_FORMAT_ITA) { if ($data == '') return ""; if ($data == null) $data = date("d/m/Y"); $len = strlen($data); if ($len != 10 && $len != 16 && $len != 19) return $data; if ($len == 10) { list($d1, $d2, $d3) = explode("/", str_replace("-", "/", $data)); if (strlen($d1) == 4) { $year = $d1; $month = $d2; $day = $d3; } else { $day = $d1; $month = $d2; $year = $d3; } //echo "F: ".$format; exit; switch ($format) { case DATE_FORMAT_ITA: return sprintf("%s/%s/%s", $day, $month, $year); case DATE_FORMAT_ISO: return sprintf("%s-%s-%s", $year, $month, $day); case DATE_FORMAT_ITA_WITHOUT_SEP: return sprintf("%s%s%s", $day, $month, $year); default: $timestamp = mktime(0, 0, 0, $month, $day, $year); return strftime($format, $timestamp); } } else { $array = explode(" ", $data); $date = $array[0]; $ora = $array[1]; list($d1, $d2, $d3) = explode("/", str_replace("-", "/", $date)); list($hour, $minute) = explode(":", str_replace(".", ":", $ora)); if (strlen($d1) == 4) { $year = $d1; $month = $d2; $day = $d3; } else { $day = $d1; $month = $d2; $year = $d3; } switch ($format) { case DATE_FORMAT_ITA: return sprintf("%s/%s/%s %s:%s:00", $day, $month, $year, $hour, $minute); case DATE_FORMAT_ISO: return sprintf("%s-%s-%s %s:%s:00", $year, $month, $day, $hour, $minute); case DATE_FORMAT_ITA_WITHOUT_SEP: return sprintf("%s%s%s", $day, $month, $year, $hour, $minute); default: $timestamp = mktime(0, 0, 0, $month, $day, $year); return strftime($format, $timestamp); } } } public static function GetInizioSettimana($Data) { $myDate = strtotime($Data); $giornoSettimana = date("w", $myDate); $differenzaGiorni = $giornoSettimana - 1; $giornoCheFu = date("Y-m-d", strtotime($Data . "-" . $differenzaGiorni . " days")); return $giornoCheFu; } public static function GetFineSettimana($Data) { //$myDate = strtotime($Data); $giornoSettimana = date("w", $Data); $giornoCheSara = date("Y-m-d", strtotime($Data . "+" . $giornoSettimana . " days")); return $giornoCheSara; } public static function AddTime($Start, $Adding, $unit, $diff = "+") { $Start = strtotime($Start); switch ($unit) { case "hours": $etime = strtotime("$diff $Adding hours", $Start); return date('H:i:s', $etime); case "minutes": $etime = strtotime("$diff $Adding minutes", $Start); return date('H:i:s', $etime); case "seconds": $etime = strtotime("$diff $Adding seconds", $Start); return date('H:i:s', $etime); } } public static function GetGiornoSettimana($data, $all = false) { if ($data == "") return ""; $giorni = array('Domenica', 'Lunedì', 'Martedì', 'Mercoledì', 'Giovedì', 'Venerdì', 'Sabato'); $data = Date::FormatDate($data, DATE_FORMAT_ISO); if ($all) return $giorni[date('w', strtotime($data))]; else return substr($giorni[date('w', strtotime($data))], 0, 3); } public static function getFormattedDataNascita($data_nascita) { if (!$data_nascita) return ''; $m = substr($data_nascita, 3, 3); $d = date("d", strtotime($data_nascita)); $months = array("Jan" => "01", "Feb" => "02", "Mar" => "03", "Apr" => "04", "May" => "05", "Jun" => "06", "Jul" => "07", "Aug" => "08", "Sept" => "09", "Oct" => "10", "Nov" => "11", "Dec" => "12"); if (array_key_exists($m, $months)) { $m = $months[$m]; } else { $m = date("m", strtotime($data_nascita)); } $y = date("Y", strtotime($data_nascita)); if ($y > date('Y')) { $y = $y - 100; } return $d . "-" . $m . "-" . $y; } public static function dateOracleTimeStamp($data = "", $format = FORMAT_TIMESTAMP_ORACLE/*'d-M-Y H:i:s.u'*/ ) { if (!$data) return ''; $converteddate = DateTime::createFromFormat("d-M-y h.i.s.u A", $data); $DateTime = $converteddate->format($format); return $DateTime; } public static function dateOracleDateNascita($data = "", $format = 'd-m-Y') { if (!$data) return ''; // $m = substr($data, 3, 3); // $months = array("Jan" => "01", "Feb" => "02", "Mar" => "03", "Apr" => "04", "May" => "05", "Jun" => "06", "Jul" => "07", "Aug" => "08", "Sept" => "09", "Oct" => "10", "Nov" => "11", "Dec" => "12"); // if (array_key_exists($m, $months)){ // $months[$m]; // } $converteddate = new DateTime($data); $y = $converteddate->format("Y"); if ($y > date('Y')) { $y = $y - 100; } $DateTime = $converteddate->format("m-d"); $DateTime = $y . "-" . $DateTime; $DateTime = date($format, strtotime($DateTime)); return $DateTime; } public static function dateOracleDate($data = "", $format = 'd-m-Y') { if (!$data) return ''; $converteddate = new DateTime($data); $DateTime = $converteddate->format($format); return $DateTime; } public static function convertiDataProtocollo(string $dataIso): string { if (empty($dataIso)) { return ''; } // Tronca eventuali microsecondi a 6 cifre $dataIso = preg_replace('/(\.\d{6})\d+/', '$1', $dataIso); $dt = DateTime::createFromFormat('Y-m-d\TH:i:s.u', $dataIso); if (!$dt) { error_log("Parsing fallito: $dataIso"); return ''; } return strtoupper($dt->format('d-M-y h:i:s')) . '.' . str_pad($dt->format('u'), 6, '0', STR_PAD_RIGHT) . ' ' . strtoupper($dt->format('A')); } }