<?php
/****************************************************************************************
SMI (Services Maintenance Interventions) est une gestion libre de maintenance et de SAV

Version 0.9.9

Copyright (C) 2006-2009  Sylvain FATOME
This program is free software; you can redistribute it and/or modify it under the terms
of the GNU General Public License as published by the Free Software Foundation; 
either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program
(in the directory docs); 
if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 
Boston, MA  02110-1301, USA.

Contact : galawa@free.fr

Web : http://smitst.homelinux.com
****************************************************************************************/


// Vérification des tentatives de hack
$pos=strpos($_SERVER['PHP_SELF'],"inc.php");
if ($pos===FALSE)
	$ok_inc=TRUE;
else
	$ok_inc=FALSE;
if ($ok_inc==FALSE) header("Location: ../index.php");

/*********************/
/* Gestion des dates */
/*********************/

// Vérifie si la chaîne est une date française correcte (format xx-xx-xxxx)
function datefrcorrecte($datef)
{
    if ($datef=="")
	{
		return FALSE;
		break;
	}
	else
	{
		if (preg_match("/(\d{2})([\/-\s])(\d{2})([\/-\s])(\d{4})/", $datef))
		{
			return TRUE;
			break;
		}
		else
		{
			return FALSE;
			break;
		}
	}
}

// Conversion des dates Français vers Anglais pour MYSQL
function datefrang($datef)
{
    if ($datef =="")
    	return "0000-00-00";
	if (preg_match("/(\d{4})([\/-\s])(\d{2})([\/-\s])(\d{2})/", $datef))$tmp = 1;
    	else if (preg_match("/(\d{2})([\/-\s])(\d{2})([\/-\s])(\d{4})/", $datef))
        	$tmp = 2;

	if (!$tmp)
	{
    	return "Date non reconnue";
    }
    else
    {
    switch ($tmp)
    	{
        case 1:
        	$ch= $datef[4];
            $date = substr($datef, 8, 2).$ch.substr($datef, 5, 2).$ch.substr($datef, 0, 4);
            return $date;
            break;

		case 2:
        	$ch= $datef[2];
            $date = substr($datef, 6, 4).$ch.substr($datef, 3, 2).$ch.substr($datef, 0, 2);
            return $date;
            break;
		}
	}
}

// Conversion des dates Anglaises MySQL vers dates Françaises
function datefr($dateang) 
	{
	$split = split("-",$dateang);
	$annee = $split[0];
	$mois = $split[1];
	$jour = $split[2];
	return "$jour"."-"."$mois"."-"."$annee";
	}

// Compare deux dates : vrai si $d1<=$d2
// Les dates sont au format anglais (aaaa-mm-jj)
function comp_date($d1,$d2)
{
	$result = FALSE;
	if (((formatedate($d1)<>"") AND (datefrcorrecte(datefr($d1))==TRUE)) AND ((formatedate($d2)<>"") AND (datefrcorrecte(datefr($d2))==TRUE)))
	{
		if (strtotime($d1) <= strtotime($d2))
			$result = TRUE;
	}
	return $result;
}

// Formate les dates MySQL Anglaises vers le format Français
function formatedate($dte)
{
		$date = "";

		if (($dte <> "") AND ($dte <> "0000-00-00"))
			$date = datefr($dte);
		else
			$date = "";
			
		return $date;
}

// Différence (en secondes) entre 2 dates (format anglais)
function diff_date_sec($debut,$fin) 
{

  $tDeb = explode("-", $debut);
  $tFin = explode("-", $fin);

  $diff = mktime(24, 0, 0, $tFin[1], $tFin[2], $tFin[0]) -
          mktime(0, 0, 0, $tDeb[1], $tDeb[2], $tDeb[0]);
  
  return $diff;

}

// Différence (en jours) entre 2 dates (format anglais)
function diff_date_jours($debut,$fin,$arrondir) 
{
	if ($arrondir==TRUE)
	  return ceil(diff_date_sec($debut,$fin)/86400);
	else
	  return diff_date_sec($debut,$fin)/86400;
}

// Donne le Timestamp d'une chaîne de type "jj-mm-aaaa hh:mm:ss"
function getTimeStamp($chaine)
{
	list($date, $temps) = explode(' ', $chaine); // Séparation date et heure
	list($jour, $mois, $annee) = explode('-', $date); // Explosion date
	list($heure, $minute, $seconde) = explode(':',$temps); // Explosion heure

	return mktime($heure, $minute, $seconde, $mois, $jour, $annee);
}

// Différence (en secondes) entre 2 dates + heures (format français)
function diff_dateheure_sec($datedebut,$datefin) 
{
	$debut = getTimeStamp($datedebut);
	$fin = getTimeStamp($datefin);
	$duree = $fin - $debut;
	return $duree;
}

// Différence (en secondes) entre 2 Timestamp
function diff_timestamp_sec($ts1,$ts2) 
{
	$duree = $ts2 - $ts1;
	return $duree;
}

// Test si date1 supérieure à date2 (Format Anglais)
function echeance_depassee_date($date1,$date2)
{
  $depasse = FALSE;

  $tDeb = explode("-", $date1);
  $tFin = explode("-", $date2);

  if (mktime(0, 0, 0, $tDeb[1], $tDeb[2], $tDeb[0]) > mktime(0, 0, 0, $tFin[1], $tFin[2], $tFin[0]))
  	$depasse = TRUE;
  
  return $depasse;

}

// Ajoute un jour à une date (format anglais)
function ajoute_un_jour_date($dte) 
{

  $tDte = explode("-", $dte);

  $DteTime = mktime(0, 0, 0, $tDte[1], $tDte[2], $tDte[0]);
  $DteTime = $DteTime + 86400;
  
  $date = date("Y-m-d",$DteTime);
  
  return $date;

}

// Calcule une date (format anglais) 'x' jours avant une date donnée (Anglaise)
function nouv_date_moins_jours($date,$jours)
{
    $tDate = explode("-", $date);
	
	return date("Y-m-d" , mktime(0, 0, 0, $tDate[1], $tDate[2]-$jours, $tDate[0]));

}

// Calcule une date (format anglais) 'x' jours après une date donnée (Anglaise)
function nouv_date_plus_jours($date,$jours)
{
    $tDate = explode("-", $date);
	
	return date("Y-m-d" , mktime(0, 0, 0, $tDate[1], $tDate[2]+$jours, $tDate[0]));

}

// Calcule une date (format anglais) 'x' mois avant une date donnée (Anglaise)
function nouv_date_moins_mois($date,$mois)
{
    $tDate = explode("-", $date);
	
	return date("Y-m-d" , mktime(0, 0, 0, $tDate[1]-$mois, $tDate[2], $tDate[0]));

}

// Calcule une date (format anglais) 'x' mois après une date donnée (Anglaise)
function nouv_date_plus_mois($date,$mois)
{
    $tDate = explode("-", $date);
	
	return date("Y-m-d" , mktime(0, 0, 0, $tDate[1]+$mois, $tDate[2], $tDate[0]));

}

// Calcule une date (format anglais) 'x' années avant une date donnée (Anglaise)
function nouv_date_moins_annees($date,$annee)
{
    $tDate = explode("-", $date);
	
	return date("Y-m-d" , mktime(0, 0, 0, $tDate[1], $tDate[2], $tDate[0]-$annees));

}

// Calcule une date (format anglais) 'x' annees après une date donnée (Anglaise)
function nouv_date_plus_annees($date,$annees)
{
    $tDate = explode("-", $date);
	
	return date("Y-m-d" , mktime(0, 0, 0, $tDate[1]+$annees, $tDate[2], $tDate[0]));

}

// Retourne le numéro de jour de la semaine (date anglaise)
function njour_semaine($date)
{
    $tDate = explode("-", $date);
	return date("w" , mktime (0, 0, 0, $tDate[1], $tDate[2], $tDate[0]));
}

// Retourne la date du lundi de la semaine d'une date donnée
function date_lundi($date = null) {

	if (is_null($date))
	{
		$date=date ("Y-m-d");
		$utime = time();
		$daynum = date('w', $utime); // 0 (Dimanche) à 6 (Samedi)
	}
	else
	{
		$utime=getTimeStamp($date." 00:00:00");
		$daynum=njour_semaine($date);
	}
	if ($daynum == 0)
		$diff = 6; // days
	else
		$diff = $daynum - 1;
	$datelundi = nouv_date_moins_jours($date,$diff);
	return $datelundi;

}

// Retourne le dernier jour du mois pour un mois et une année donnés
function lastday_month_year($mois, $annee)
{
	$lastday = 28;
	while (checkdate($mois, $lastday , $annee)) :
		$lastday++;
	endwhile;
	--$lastday; 
	return $lastday;
}

?>