encore un pb de date

Eléphant du PHP | 331 Messages

22 déc. 2009, 13:38

Bonjour,

Jusqu'à présent, j'enlevais un jour à la date système et ça m'allait très bien.
Je faisais ainsi :
$DebutJourneeMoins1_Timestamp = strtotime("-1 days");
Sauf que maintenant je voudrais enlever un jour à une date donnée.
Ma date donnée est ainsi récupérée :
$DateSyst =$_GET['DateSyst'];
	
// découpage
$annee = substr($DateSyst, 0, 4);
$mois = substr($DateSyst, 5, 2);
$jour = substr($DateSyst, 8, 2);
$heures = substr($DateSyst, 11, 2);
$minutes = substr($DateSyst, 14, 2);
	
$MaDate = $annee."-".$mois."-".$jour." ".$heures.":".$minutes.":00";
Comment je peux faire pour appliquer ma fonction strtotime comme précedemment mais sur la variable $MaDate pour lui enlever un jour ?

Merci d'avance !

Eléphant du PHP | 168 Messages

22 déc. 2009, 13:47

dans $jour tu récupère le jour du mois et tu fé -1;
je connais pas les fonctions que tu utilises mais php manual est ton ami.

Eléphant du PHP | 331 Messages

22 déc. 2009, 16:11

faire -1 au jour ce n'est pas bon.
La veille d'un 1er du mois c'est le 30 ou 31 (sauf février bien sur)

Je continue à chercher ...

Eléphant du PHP | 168 Messages

22 déc. 2009, 16:21

Eh ben tu fais une condition if($jour == 1) if($mois == 'janvier' || $mois == 'mars') $jour=31; else if($mois="février" && annéebissextile) $jour = 29;else if($mois="février" && !annéebissextile) $jour = 28; else $jour = 30;
Par contre vaudra que tu te crée une fonction qui regarde si ton année est bissextile ou pas. :non:

Mammouth du PHP | 672 Messages

22 déc. 2009, 16:49

Ta date, tu la récupères dans quel format au juste ? Il y a des séparateurs, non ?

Sinon, à partir de tes variables :
echo mktime($heures, $minutes, $secondes, $mois, $jour, $annee); //retourne le timestamp de la date
echo mktime($heures, $minutes, $secondes, $mois, $jour - 1, $annee); //retourne le timestamp de la veille
echo date ( 'Y-m-d H:i:s' mktime($heures, $minutes, $secondes, $mois, $jour - 1, $annee)); //retourne la date de la veille formatée comme souhaité.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

22 déc. 2009, 16:52

Bonjour,

Ouh là pas besoin de réinventer la roue, PHP a une fonction qui fait ça très bien toute seule : mktime
http://fr.php.net/mktime

Exemple:
$DateSyst =$_GET['DateSyst'];
	
// découpage
$annee = substr($DateSyst, 0, 4);
$mois = substr($DateSyst, 5, 2);
$jour = substr($DateSyst, 8, 2);
$heures = substr($DateSyst, 11, 2);
$minutes = substr($DateSyst, 14, 2);

$MaDate = $annee."-".$mois."-".$jour." ".$heures.":".$minutes.":00";


$timestamp_veille=mktime($heures, $minutes, 0, $mois, $jour-1, $annee);
$date_veille=date("Y-m-d H:i:s",$timestamp_veille);

print $date_veille;
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 331 Messages

22 déc. 2009, 17:06

J'ai finalement fait, et plus simplement sans tests à faire :
$date = "2009/12/14 10:55:25";

$JPrec = strtotime(date("Y-m-d", strtotime("$date")) . " -1 days");

$dateTo=date('Y-m-d',$JPrec);

echo $dateTo;

Merci !

Eléphant du PHP | 331 Messages

22 déc. 2009, 17:08

Bonjour,

Ouh là pas besoin de réinventer la roue, PHP a une fonction qui fait ça très bien toute seule : mktime
http://fr.php.net/mktime

Exemple:
$DateSyst =$_GET['DateSyst'];
	
// découpage
$annee = substr($DateSyst, 0, 4);
$mois = substr($DateSyst, 5, 2);
$jour = substr($DateSyst, 8, 2);
$heures = substr($DateSyst, 11, 2);
$minutes = substr($DateSyst, 14, 2);

$MaDate = $annee."-".$mois."-".$jour." ".$heures.":".$minutes.":00";


$timestamp_veille=mktime($heures, $minutes, 0, $mois, $jour-1, $annee);
$date_veille=date("Y-m-d H:i:s",$timestamp_veille);

print $date_veille;
Merci mais $jour-1 ne marche pas à tous les coups, on est bien d'accord ? Enlever un jour au 1er décembre c'est compliqué sinon ... à moins de faire des tests ...

Mammouth du PHP | 672 Messages

22 déc. 2009, 17:28

Merci mais $jour-1 ne marche pas à tous les coups, on est bien d'accord ? Enlever un jour au 1er décembre c'est compliqué sinon ... à moins de faire des tests ...
RTFM.

Manuel PHP :
Le dernier jour d'un mois peut être décrit comme le jour "0" du mois suivant, et non pas le jour -1. Les deux exemples suivants vont donner : "Le dernier jour de Février 2000 est: 29".
Rien de compliqué, pas de test...
D'ailleurs, quand tu fais "-1 days", tu fais la même chose que nous (pour la fonction).

Mammouth du PHP | 568 Messages

22 déc. 2009, 17:37

Merci mais $jour-1 ne marche pas à tous les coups, on est bien d'accord ? Enlever un jour au 1er décembre c'est compliqué sinon ... à moins de faire des tests ...
Sauf si tu utilise le mktime (CF. post de @rthur) qui va se baser sur le timestamp UNIX