Médiaforma

All posts tagged date

Lorsque vous créez une table MySQL, vous devez définir le type de données des champs de la table. Il existe trois grands types de données :

  • Numérique
  • Chaine de caractères
  • Date et heure

Les champs numériques peuvent être du type

Type Signification
tinyint Occupe 1 octet. Peut stocker des nombres entiers compris entre -128 à 127 si l’attribut UNSIGNED n’est pas spécifié, ou compris entre 0 et 255 dans le cas contraire.
smallint Occupe 2 octets. Ce type de données peut stocker des nombres entiers compris entre -32 768 à 32 767 si l’attribut UNSIGNED n’est pas spécifié, ou compris entre 0 et 65 535 dans le cas contraire.
mediumint Occupe 3 octets. Ce type de données peut stocker des nombres entiers compris entre -8 388 608 et 8 388 607 si l’attribut UNSIGNED n’est pas spécifié, ou compris entre 0 et 16 777 215 dans le cas contraire.
int Occupe 4 octets. Ce type de données peut stocker des nombres entiers compris entre -2 147 483 648 et 2 147 483 647 si l’attribut UNSIGNED n’est pas spécifié, ou compris entre 0 à 4 294 967 295 dans le cas contraire.
bigint Occupe 8 octets. Ce type de données stocke les nombres entiers compris entre -9 223 372 036 854 775 808 et 9 223 372 036 854 775 807 si l’attribut UNSIGNED n’est pas spécifié, ou compris entre 0 à 18 446 744 073 709 551 615 dans le cas contraire.
float Occupe 4 octets. Ce type de données permet de stocker des nombres flottants à précision simple, compris entre -1.175494351E-38 et 3.402823466E+38 (non UNSIGNED) ou entre 0 et 3.402823466E+38 (UNSIGNED).
double ou real Occupe 8 octets. Stocke des nombres flottants à double précision compris entre -1.7976931348623157E+308 et -2.2250738585072014E-308, et entre 2.2250738585072014E-308 et 1.7976931348623157E+308 (non UNSIGNED). Si l’attribut UNSIGNED est précisé, les nombres négatifs sont retirés.

 

Les champs chaines de caractères peuvent être du type

Type Signification
Char Chaîne de caractères de taille fixe
Varchar Chaîne de caractères de longueur variable comprise entre 1 et 255 caractères
tinyblob Chaîne de 0 à 255 caractères (sensible à la casse)
tinytext Chaîne de 0 à 255 caractères (insensible à la casse)
Blob Chaîne de 0 à 65 535 caractères (sensible à la casse)
Text Chaîne de 0 à 65 535 caractères (insensible à la casse)
mediumblob Chaîne de 0 à 16 777 215 caractères (sensible à la casse)
mediumtext Chaîne de 0 à 16 777 215 caractères (insensible à la casse)
longblob Chaîne de 0 à 4 294 967 295 caractères (sensible à la casse)
longtext Chaîne de 0 à 4 294 967 295 caractères maximum (insensible à la casse)

 

Les champs date et heure peuvent être du type

Type Signification
date Occupe 3 octets. Date au format AAAA-MM-JJ, entre 1000-01-01 et 9999-12-31
time Occupe 3 octets. Date au format AAAA-MM-JJ  entre1000-01-01 et 9999-12-31
datetime Occupe 8 octets. Date et heure au format AAAA-MM-JJ HH:MM:SS entre 1000-01-01 00:00:00 et 9999-12-31 23:59:59
year Occupe 1 octet. Année à 2 ou 4 chiffres entre 1901 et 2155 ( 4 chiffres) ou entre 1970 et 2069 (2 chiffres)
timestamp Occupe 4 octets. Date codée sous une forme numérique et comprise entre 1970-01-01 00:00:00 et l’année 2037

 


Dans une rubrique précédente (https://www.mediaforma.com/un-message-vocal-au-demarrage-du-pc/), vous avez appris à émettre un message vocal au démarrage du PC. Un internaute m’a demandé s’il serait possible de dire la date et l’heure au démarrage du PC. Eh bien oui : il suffit pour cela d’utiliser les fonctions VBScript date() et heure(). Si vous avez créé le fichier bonjour.vbs, comme indiqué dans la rubrique “Un message vocal au démarrage du PC”, cliquez sur Démarrer, sur Tous les programmes puis sur Démarrage. Cliquez du bouton droit sur le fichier Bonjour.vbs et sélectionnez Modifier dans le menu. Modifiez le fichier comme ceci :

Dim speaks, speech
speaks="Nous sommes le " & date()
Set speech=CreateObject("sapi.spvoice")
speech.Speak speaks
speaks="Il est "& time()
speech.Speak speaks

Sauvegardez ce fichier, puis exécutez-le à partir du menu Démarrer, pour avoir un aperçu de ce que va dire Windows au démarrage.

Bluffant non ?

 

Pour aller plus loin
Toutes les techniques permettant de faire parler votre PC et de lui donner des ordres vocaux sont traitées dans un eBook Mediaforma Learning.

Cliquez ici pour vous le procurer


Utilisez les fonctions setlocale(), strftime() et strtotime() pour afficher le nom du jour qui correspond à une date quelconque. Par exemple, si la date passée est 10/01/2013, affichez quelque chose comme ceci :

Solution

Faites une pause dans la vidéo et rédigez le code de l’exercice. Vous pourrez poursuivre pour comparer votre code et celui de la solution.

La première instruction récupère la locale correspondant à la France.

La deuxième instruction modifie (si cela est nécessaire) les informations de localisation pour qu’elles correspondent à la France.

Enfin, la troisième instruction utilise la fonction strftime pour afficher les données mises en forme concernant la date fournie en deuxième argument. Ce deuxième argument doit être un timestamp UNIX. Pour obtenir ce type d’encodage, on utilise la fonction strtotime et on lui fournit la date au format chaine.

<?php
  $sl = setlocale(LC_TIME, "FRA");
  setlocale(LC_TIME,$sl);
  echo strftime("Le %#d %B %Y est un %A", strtotime("10/01/2013"));
?>

Exécutez ce code dans WAMP Server. Comme vous le voyez, la date du 1er Octobre 2013 est bien prise en compte dans l’affichage du strftime.


Bien entendu, il est possible de travailler avec une date différente de la date du jour. Pour cela, vous devez passer un deuxième paramètre à la fonction strftime() :

$dateEtHeure = strftime(ch, d);

Où ch est une chaîne de formatage et d est la date (timestamp UNIX) à formater.

Remarque

Vous pouvez utiliser la fonction strtotime() pour convertir une chaîne contenant une date au format MM/JJ/AAAA en un timestamp UNIX.

 


Pour connaître la locale à utiliser en fonction de la langue souhaitée, interrogez la fonction setlocale() :

$sl = setlocale(LC_TIME, code);

Où code est le code du pays sur trois lettres : “FRA”, “USA”, “DEU”, etc.

Initialisez alors la locale avec la valeur retournée par setlocale() :

setlocale(LC_TIME, $sl);

Vous pouvez maintenant utiliser la fonction strftime() pour obtenir une date en accord avec la locale spécifiée :

$dateEtHeure = strftime(ch);

Où ch est une chaîne de formatage qui reprend les valeurs listées sur la page http://www.php.net/manual/fr/function.strftime.php

 

 

Par exemple, pour afficher une date en français, utilisez le code suivant :

<?php
  $sl = setlocale(LC_TIME, "FRA");
  echo "setlocale retourne ".$sl."<br>";
  setlocale(LC_TIME,$sl);
  echo strftime("Nous sommes le %A %#d %B %Y");
?>

Exécutez ce code dans WAMP Server. Comme vous le voyez, la date est bien affichée en français :

A titre d’exemple, nous allons afficher cette date en américain. Pour cela, il suffit de remplacer FRA par USA dans le deuxième paramètre de la fonction setlocale.

<?php
  $sl = setlocale(LC_TIME, "USA");
  echo "setlocale retourne ".$sl."<br>";
  setlocale(LC_TIME,$sl);
  echo strftime("Nous sommes le %A %#d %B %Y");
?>

Exécutez ce code dans WAMP Server. Comme vous le voyez, la date est bien affichée en Américain. Il reste juste à mettre un peu d’ordre dans les composantes de la date.


Affichez la date selon ce format :

C'est le 1er jour du mois

ou

C'est le xème jour du mois

Solution

Faites une pause dans la vidéo et rédigez le code de l’exercice. Vous pourrez poursuivre pour comparer votre code et celui de la solution.

<?php
  if (date("j") ==1)
    echo date("\C\'\\e\s\\t \l\\e j\\e\\r \j\o\u\\r \d\u \m\o\i\s.");
  else
    echo date("\C\'\\e\s\\t \l\\e j\è\m\\e \j\o\u\\r \d\u \m\o\i\s.");
?>

Ici, nous testons si le jour est égal à 1. Dans l’affirmative, on affiche la chaîne C’est le premier jour du mois. S’il ne s’agit pas du premier jour du mois, on affiche C’est le énième jour du mois.

Bien entendu, nous arions pu faire plus simple avec quelque chose comme ceci :

<?php
  if (date("j") ==1)
    echo "C'est le premier jour du mois";
  else
    echo "C'est le date('j')ème jour du mois";
?>

Mais dans ce cas, vous n’auriez pas fait autant de recherche pour savoir quels caractères doivent être échappés dans la fonction date.

 

 


Les fonctions de traitement des dates et heures de PHP sont résumées sur cette page : http://php.net/manual/fr/ref.datetime.php.

Nous allons passer en revue quelques fonctions dignes d’intérêt.

Commençons par La fonction date()

Cette fonction retourne une date sous la forme d’une chaîne, en se conformant à la mise en forme demandée dans le paramètre :

laDate = date(format);

Où format est une chaîne qui indique les informations de date souhaitées et laDate est la chaîne contenant les éléments demandés.

De très nombreuses options de formatage peuvent être utilisées. Vous les trouverez sur la page http://www.php.net/manual/fr/function.date.php

Par exemple, pour afficher la date au format JJ/MM/AAAA hh:mm:ss, vous utiliserez l’instruction suivante :

echo date("d/m/Y H:i:s");

Il est parfois nécessaire d’afficher du texte dans la chaîne de formatage passée à la fonction date(). Pour ce faire, vous devez échapper tous les caractères à afficher en utilisant le caractère “\”. Utilisez un double échappement si le caractère est une commande de formatage (\\) :

Par exemple, pour afficher :

Il est 10 heures 5 minutes et 14 secondes

Utilisez l’instruction suivante :

echo date("\I\l \\e\s\\t H \h\\e\u\\r\\e\s i \m\i\\n\u\\t\\e\s \s\\e\c\o\\n\d\\e\s");

Ici, les caractères e, t, r et n sont doublement échappés car ils correspondent à des commandes de formatage.