IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

FAQ PHP

FAQ PHPConsultez toutes les FAQ

Nombre d'auteurs : 68, nombre de questions : 580, dernière mise à jour : 18 septembre 2021 

 
OuvrirSommaireDates

Étape 1 : extraction du $jour, $moi et $annee de la $date (avec explode()).
Étape 2 : création du timestamp unix (le nombre de secondes écoulées depuis le 1er janvier 1970) avec mktime().
Étape 3 : obtenir le jour de la semaine correspondant à ce timestamp avec date() utilisé avec le format "w" et le $timestamp qui retourne le chiffre du jour de la semaine : 0 pour dimanche, 1 pour lundi...

Exemple:

 
Sélectionnez
// date du jour
echo $date = date("d/m/Y");
// tableau des jours de la semaine
$joursem = array('dim', 'lun', 'mar', 'mer', 'jeu', 'ven', 'sam');
// extraction des jour, mois, an de la date
list($jour, $mois, $annee) = explode('/', $date);
// calcul du timestamp
$timestamp = mktime (0, 0, 0, $mois, $jour, $annee);
// affichage du jour de la semaine
echo $joursem[date("w",$timestamp)];
Mis à jour le 8 mars 2011  par Cyberzoide

Nous avons deux solutions :

  • En utilisant strftime :

Nous avons besoin pour cela de deux fonctions : strftime() pour formater la date et setlocale() pour préciser les informations de localisation.

 
Sélectionnez
echo "date du jour en français : " ;
// selon le serveur c'est fr ou fr_FR ou fr_FR.ISO8859-1 qui est correct.
setlocale(LC_TIME, 'fr', 'fr_FR', 'fr_FR.ISO8859-1');
echo strftime("%A %d %B %Y."); //Affichera par exemple "date du jour en français : samedi 24 juin 2006."

LC_TIME est une constante prédéfinie utilisée pour formater les dates et heures avec la fonction strftime()

  • En utilisant date :

Nous avons besoin de deux fonctions : date() pour obtenir la date du jour et explode() pour extraire les différentes composantes de cette date.

 
Sélectionnez
//Voici les deux tableaux des jours et des mois traduits en français
$nom_jour_fr = array("dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi");
$mois_fr = Array("", "janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", 
        "septembre", "octobre", "novembre", "décembre");
// on extrait la date du jour
list($nom_jour, $jour, $mois, $annee) = explode('/', date("w/d/n/Y"));
echo "date du jour en français : " ;
echo $nom_jour_fr[$nom_jour].' '.$jour.' '.$mois_fr[$mois].' '.$annee; 
//Affichera par exemple : "date du jour en français : samedi 24 juin 2006."

Attention : pour les jours, il faut bien commencer par Dimanche, et pour les mois il faut laisser la première case de vide car janvier = 1

Mis à jour le 4 août 2008  par Maxoo

Lien : Comment récupérer le jour, le mois et l'année d'une date ?

Etudions l'exemple complet de la conversion d'une date au format anglophone MySQL en format francophone.

Une date MySQL se présente ainsi : "YYYY-DD-MM hh:mm:ss"

YYYY : l'année numérique avec 4 chiffres, DD : le jour numérique, MM : le mois numérique, hh : heures, mm : minutes, ss : secondes

Tous les nombres sur 2 chiffres prennent un zéro devant si nécessaire.

Par exemple : "2002-20-04 15:08:20" correspond au 20 avril 2002 à 15h08 et 20 secondes.

Ce format correspond au type DATETIME. Soit lastmodified un attribut d'une table MySQL.

La requête suivante permet d'extraire la date de dernière modification d'un enregistrement.

 
Sélectionnez
SELECT lastmodified
FROM citations
WHERE id=$id;

Étape 1 : extraction de la date d'une base de données MySQL

 
Sélectionnez
$requet = "SELECT lastmodified FROM citations WHERE id=$id";
if($result = mysql_query($requet)) 
{
    if($ligne = mysql_fetch_row($result)) 
    {
        $lastmodifed = $ligne[0];
    } 
    else 
        die("Erreur base de données");
} 
else 
    die("Erreur base de données");

Étape 2 : séparation de la date et de l'heure Le seul espace de la chaîne de caractères qui constitue la variable $lastmodified est un séparateur entre la date et l'heure. On va donc la scinder en ses deux morceaux grâce à la fonction explode() qui renvoie les sous chaînes dans un tableau dont est extrait, via list(), les deux variables $date et $time.

 
Sélectionnez
list($date, $time) = explode(" ", $lastmodified);

Étape 3 : extraction des jour, mois, année On procède selon le même schéma que précédemment sauf qu'ici c'est le tiret qui est séparateur dans la date.

 
Sélectionnez
list($year, $month, $day) = explode("-", $date);

Étape 4 : extraction facultative des heures, minutes, secondes Ici, le séparateur sont les deux points.

 
Sélectionnez
list($hour, $min, $sec) = explode(":", $time);

Étape 5 : affichage au format francophone

 
Sélectionnez
echo $lastmodified = "$day/$month/$year $time";

Affiche "20/04/2002 15:08:20".

On a donc transcrit en français notre date anglaise.

On peut aller encore plus loin en affichant les mois en toutes lettres et en français.

Étape 6 : affichage en toutes lettres du mois On crée d'abord le tableau des mois de l'année.

 
Sélectionnez
$months = array("janvier", "février", "mars", "avril", "mai", "juin",
    "juillet", "août", "septembre", "octobre", "novembre", "décembre");

Ensuite, on affiche l'élément du tableau des mois de l'année dont l'indice est égal au numéro du mois. Comme l'indice du tableau commence à zéro, il faut soustraire 1 à $month, cela aura aussi pour effet de caster cette chaîne en entier (et de supprimer le zéro éventuel en première position).

 
Sélectionnez
echo $lastmodified = "le $day ".$months[$month-1]." $year à ${hour}h${min}m${sec}s";

Affiche "le 20 avril 2002 à 15h08m20s".

Et voilà !

Mis à jour le 4 août 2008  par Cyberzoide

Lien : Comment convertir une date MySQL au format francophone ?

Une date au format MySQL est sous la forme suivante "YYYY-DD-MM hh:mm:ss". Par conséquent, pour la convertir au format francophone "jour/mois/annee hh:mm:ss", il nous faut utiliser la fonction strtotime() qui essaye de lire une date au format anglophone, et de la transformer en timestamp Unix.

Cette fonction renverra donc, en cas de succès, un nombre entier qui correspondra au timestamp et FALSE sinon.

 
Sélectionnez
$dateMySQL = "2006-28-12 22:45:34";
echo date("d/m/Y H:i:s", strtotime($dateMySQL)); //Affiche 28/12/2006 22:45:34
Il est aussi possible de le faire en SML :
Sélectionnez
-- Format date
SELECT *, DATE_FORMAT(mon_champ_date, '%d/%m/%Y') AS date_fr FROM ma_table;
-- Format datetime
SELECT *, DATE_FORMAT(mon_champ_datetime, '%d/%m/%Y %H:%i:%s') AS datetime_fr FROM ma_table

A partir de PHP 5.2 : On peut utiliser les objets DateTime pour l'affichage :

 
Sélectionnez
$dateMySQL = "2006-28-12 22:45:34";
//objet DateTime correspondant :
$date = new DateTime($dateMySQL);

//affichage de la date au format francophone:
echo $date->format('d/m/Y H:i:s');
Mis à jour le 8 mars 2011  par Forum PHP, Julp, Kerod

Lien : Comment afficher une date MySQL en français ?

 
Sélectionnez
function datefr2en($mydate){
   @list($jour,$mois,$annee)=explode('/',$mydate);
   return @date('Y-m-d',mktime(0,0,0,$mois,$jour,$annee));
}

L'intérêt d'utiliser la fonction mktime est qu'elle va transformer automatiquement les dates invalides en dates valides.

Il est aussi possible de le faire en SQL :
Sélectionnez
$date = '23/12/2006';
$sql = mysql_query("INSERT INTO ma_table SET mon_champ_date = STR_TO_DATE('$date', '%d/%m/%Y'), ...");
Mis à jour le 4 août 2008  par Sub0, Julp

Le "timestamp" ou "timestamp Unix" est le nombre de secondes qui se sont écoulées entre un moment donnée et le 1er janvier 1970 à 0h0min0s GMT.
Cela veut dire que le timestamp ne change pas en fonction du fuseau horaire. C'est la fonction "date", par exemple, qui utilisera le fuseau horaire en cours pour afficher correctement l'heure.

Vous trouverez un grand nombre d'explications sur l'utilisation des dates à l'adresse suivante :
http://php.net/datetime

Mis à jour le 4 août 2008  par Forum PHP

Pour vérifier qu'une date est valide on utilise la fonction checkdate() qui retourne TRUE si la date est valide, FALSE sinon

Exemple 1 :
Sélectionnez
$date = "17/06/2006";
list($jour, $mois, $annee) = explode('/', $date);
if(checkdate($mois,$jour,$annee))
{
  echo "date valide";
}
else
{
  echo "date non valide";
}
Exemple 2 :
Sélectionnez
if(preg_match('~^(\d{2})([/-])(\d{2})\2(\d{4})$~D', $date, $m) && checkdate($m[3], $m[1], $m[4]))
{
  echo 'date valide';
}
else
{
  echo 'date non valide';
}
Mis à jour le 4 août 2008  par Julp, Kerod

Lien : Initiation aux expressions régulières en PHP

Étant donné que PHP 5.2 n'est plus maintenu, je vais travailler avec un objet DateTime. En PHP 5.3, vous devez abolument définir dans votre php.ini la locale que vous désirez utiliser dans la directive date.timezone. Si cela n'est pas fait, il faut l'initialiser au début de votre script.

 
Sélectionnez
ini_set('date.timezone', 'Europe/Brussels');
//Instanciation d'un objet DateTime à une date Donnée
$date = new DateTime('25-02-2011');
//Récupération de l'année
echo $date->format('Y');
//Récupération du mois
echo $date->format('m');
//Récupération du jours
echo $date->format('d');
Mis à jour le 8 mars 2011  par Gérard Ernaelsten
 
Sélectionnez
$datetime1 = new DateTime('27-02-2011 20:30:00');
$datetime2 = new DateTime('28-02-2013 22:30:00');
$interval = $datetime1->diff($datetime2);
 
//le nombre de jours d'écarts
echo $interval->format('%a');
//le nombre d'année de mois et de jours
echo $interval->format('%y ans,%m mois, %d jour');

Pour plus de formalisme, la documentation de PHP.

DateTime ne permet que de faire la différence avec les éléments créer lors de l'intsanciation. Vous n'obtiendrez que la différence des années ou des mois, la différence entre le 1er janvier 2010 et 2011 sera de 1 an et 0 mois, vous ne pourrez obtenir 12 mois.

Pour ce genre de calcul, vous devez transformer en secondes, via une fonction ou extension de classe.

 
Sélectionnez
function to_seconds($diff) {
    return  ($diff->y * 365 * 24 * 60 * 60) +
            ($diff->m * 30 * 24 * 60 * 60) +
            ($diff->d * 24 * 60 * 60) +
            ($diff->h * 60 * 60) +
            $diff->s;
}
//nombres de secondes entre deux dates
echo to_seconds($interval);

Ainsi, pour calculer la différence d'heures entre deux dates :

 
Sélectionnez
echo to_seconds($interval)/3600;
Mis à jour le 8 mars 2011  par Gérard Ernaelsten

Lien : Qu'est ce qu'un timestamp ?
Lien : Comment récupérer le jour, le mois et l'année d'une date ?

 
Sélectionnez
// date du jour
$date = new DateTime('now');
//date de demain
$date->modify('+1 days');
 
//date aujourd'hui + 5 heures
 
$date = new DateTime('now +5 Hours');
 
//création date aujourd'hui + 7 jours
$date = new DateTime('now +7 days');
 
//création date hier
$date = new DateTime('now -1 days');
 
//date du prochain Lundi
$date = new DateTime('next monday');
Mis à jour le 8 mars 2011  par Gérard Ernaelsten

Si on dispose d'un objet DateTime :

 
Sélectionnez
$datetime1 = new DateTime('27-02-2011 20:30:00');
echo $num = $datetime1->format('t');

Une autre possibilité est de calculer le nombre de jours avec la function cal_days_in_month() :

 
Sélectionnez
echo $num = cal_days_in_month(CAL_GREGORIAN, 2, 2012);
Créé le 8 mars 2011  par Gérard Ernaelsten

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2003 Developpez.com Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.