Général

Les PCRE

Les POSIX

Pratique

Linux

Spécial php

Les billets de fred

Date MySQL en francais Posté par Fabrice Lezoray

Cette expression regulière vous permettra de fomater une date venant de MySQL (ou autre) dans un format francais. La date d'entrée peut être soit un Timestamp UNIX, soit une date au format DATE de MySQL (YYYY-MM-DD) ou soit une date au format DATETIME de MySQL (YYYY-MM-DD HH-MM-SS). La date de sortie est au format francais DD-MM-YYYY (HH-MM-SS).

<?php

// Format datetime
$date ='2002-12-25 16:00:00';

// Format date
// $date = '2003-12-25';

// Un timestamp
// $date = time();

function callback_date($match) {

if(is_numeric($match[1]))
return date('d-m-Y H:i:s', $match[1]);
else
return $match[4] . '-' . $match[3] . '-' . $match[2] . $match[5];

}

echo preg_replace_callback('`^(\d+|(\d{4})-(\d{2})-(\d{2})(.*))$`', 'callback_date', $date);

?>
Formater une date Posté par Frédéric Bouchery

Dans les expressions pour formater une date, j'utilise ereg_replace. Pour info, une solution est aussi donnée avec explode.

Vérifie la validité d'une date Posté par Yves Maistriaux

On vérifie dans une chaine et on accepte les dates en français sous cette forme : 03/05/2003 03/05/2003 14:58 03/05/2003 14:58:59 Pour la date en anglais, on inverse la première partie de la regex pour obtenir MM/DD/YYYY On peut encore créer des masques supplémentaires pour réaliser contrôler sur d'autres formes.

<?php
date="03/05/2003 14:58:27";

if(!preg_match('`^(((0[1-9])|(1\d)|(2\d)|(3[0-1]))\/((0[1-9])|(1[0-2]))\/(\d{4})(((([[:space:]]?)(([0-1][0-9])|([2][0-3]))(:[0-5][0-9]))((:[0-5][0-9])?))?))$`',$date1))
{
echo 'pas bon';
}
else
{
echo 'la date est '.$date1;
}

?>
Formater une date (V1) Posté par Yves Maistriaux

Deux fonctions, ereg et preg_match, pour un résultat identique. De nouveau, une regex n'est pas forcément nécessaire pour obtenir le résultat voulu. Une version avec substr est fournie en complément d'information.

Saisie de date Posté par Frédéric Bouchery

Pour proposer à vos utilisateur une saisie de date sans trop de contraite, voici deux fonctions TRES tolérantes. On peut commencer par "le" avec la date puis "à" et l'heure. Si on ne saisie pas le mois et/ou l'année, il fait le rapprochement par rapport à la date du jour. C'est à dire, si l'on saisie "le 3" alors que nous le 5 novembre, il déduit que l'on parle du 3 décembre. D'ailleurs, on peut saisir les mois en toutes lettres ...

Et encore un formatage de date... Posté par Yves Maistriaux

Une autre approche avec preg_replace en utilisant le délimiteur de classe \d (chiffres uniquement)

<?php
$madate="2003-06-19";
$motif='`(\d{4})-(\d{1,2})-(\d{1,2})`';
$afficher='$3-$2-$1';
echo preg_replace($motif,$afficher,$madate);

// pour info, sans regex avec explode

$madate=explode('-',$madate);
echo $madate[2].'-'.$madate[1].'-'.$madate[0];
?>
Fonction pour une date en français... Posté par Yves Maistriaux

Un autre regex de formatage de date en français avec utilisation d'une fonction, d'un tableau, de substr...

Un affichage simplisime Posté par Yves Maistriaux

Grâce à strftime() et setlocale(), voilà un affichage simplisime de la date en français. Vraiment archi simple.

<?php
setlocale(LC_TIME, 'french');
echo strftime('Nous sommes le %A %d %B %Y, il est %Hh%M', time() );
?>
Les samedis du mois Posté par Yves Maistriaux

Petite portion permettant de déterminer les dates des samedis d'un mois et d'une année donnée. Exemple : mois = 1 et année = 2006 donnera les dates des samedi du mois de janvier 2006.

Affichage du jour de la semaine Posté par Yves Maistriaux

Un affichage simple du jour de la semaine.

<?php
$date=time();

function semaine($date)
{
$jour=date("z",$date);
$num_sem=($jour/7)+1;
$num=intval($num_sem);
return $num
}
echo semaine($date);
?>
Une date en français Posté par Yves Maistriaux

Une méthode pour un affichage de date en français. Il existe d'autres fonctions qui permet de le faire facilement, mais il est intéressant de voir comment fonctionne les array() et option de date en php.

Est-ce une année bissextile ? Posté par Yves Maistriaux

Plusieurs tests simples pour savoir si une année est bissextile.

<?php
// test 1
function bissextile($annee){
return checkdate(2,29,$annee);
}

// test 2
$an='2006';

if ($an % 4 == 0 && ($an % 100 != 0 || $an % 400 == 0))
{
echo 'bissextile';
}
else
{
echo 'pas bissextile';
}

// test 3
function bissextile($annee)
{
return (($annee % 4 == 0) && ($annee % 100 != 0 || $annee % 400 == 0));
}
echo bissextile($an);
?>
Dans X jours nous serons le... Posté par Yves Maistriaux

Une petite portion très simple permettant de connaître une date dans le futur.

<?php
$nb_jours = 10;
$madate = getdate(($nb_jours*24*3600)+mktime());
// $madate retourne un array
echo 'Dans ',$nb_jours,' jours nous serons le :
',$madate['mday'],'/',$madate['mon'],'/',$madate['year'];

?>
Dans X jours nous serons le... Version 2 Posté par Yves Maistriaux

La même que la précédente, mais ici on s'amuse avec une fonction. J'y ai ajouté la notion de d'époque "futur ou passé" symboliser respectivement par le signe + ou - Le texte est bien évidemment adapté en sortie

Gérer les semaines dans une liste select Posté par Yves Maistriaux

Une petite fonction permettant de gérer un calendrier par semaine dans un formulaire. Affichera une liste de ce genre (pour les 52 semaines bien évidemment):

<?php
echo '<form><select name="mes_semaines">';

$semaine = 60*60*24*7;
$j1 = mktime(0,0,0,date('m'),date('d')-date('w')+1,date('Y'));

for ($i = 0; $i < 52; $i++)
{
echo '<option value="',date('d-m-Y',$j1),'">
du ',date('d-m-y',$j1),' au ',date('d-m-y', $j1 + $semaine),'</option>';

$j1 += $semaine;
}

echo '</select></form>';
?>
Calcul de l'age Posté par Yves Maistriaux

Une petite fonction qui permet de calculer et d'afficher l'âge d'un membre en rapport avec sa date de naissance extraite d'une base de données. La date passée en argument est au format Mysql soit YYYY-MM-DD Les facteurs de multiplication ont été choisi en gardant une certaine logique temporelle, mais vous pouvez en choisir d'autres de manière totalement arbitraire sans que cela ne gêne le calcul. Cette fonction est bien évidement adaptable à vos diverses situations

<?php
function age($ladate) {
$madate = explode('-',$ladate);

$j = 86400; //sec par jour
$m = 86400*30; // sec par mois (30 est un choix arbitraire)
$an = 86400*365.25; // sec par an

$madate_sec = $madate[0]*$an + $madate[1]*$m + $madate[2]*$j;
$today_sec = date('Y')*$an + date('m')*$m + date('d')*$j;

$age = floor(($today_sec-$madate_sec)/$an);

return $age;
}
$date='1959-04-12';
echo age($date);
?>
Trouver le jour... Posté par Yves Maistriaux

Petite fonction permettant de retourner le jour précis d'une semaine et d'une année au départ du nom du jour. Donc 3 arguments : - nom du jour - numéro de la semaine - année

<?php
function monjour($jour,$sem,$an)
{
$nom_jour=array('lundi','mardi','mercredi','jeudi','vendredi','samedi','dimanche');
$jj=array_search($jour,$nom_jour);

$an = date('Y');
$j_deb = ((($sem-1)*7)+8)-6;

return date('d-m-Y',mktime(0,0,0,1,$j_deb+$jj,$an));
}

echo monjour('mardi',31,2006);
?>
Nombre de jours entre deux dates Posté par Yves Maistriaux

Fonction librement inspirée d'une source "facteur de date" de Rémy BAEGERT. Exprime en jours la différence qu'il existe entre deux dates données.

<?php
function facteur_date($date_entree)
{
$date=explode('-',$date_entree);
$an=365*$date[2];
$m=31*($date[1]-1);
if (($date[1]==1) || ($date[1]==2))
{
$d= 0;
$e = intval(($date[2] -1)/4);
$h = intval(0.75*(intval(($date[2]-1)/100)+1));
}
else
{
$d= intval(0.4*$date[1]+2.3);
$e = intval($date[2]/4);
$h = intval(0.75*(intval($date[2]/100)+1));
}
$resultat = $date[0] + $an+ $m - $d +$e -$h;

return $resultat;
}

function diff_dates($date1,$date2)
{
$diff = facteur_date($date2)-facteur_date($date1);
return $diff;
}
$datedeb='10-1-2005';
$datefin='1-1-2100';
echo diff_dates($datedeb,$datefin);
?>
Une image... du jour Posté par Yves Maistriaux

Un système simplissime pour afficher une image en fonction du jour de la semaine. Il faudra bien entendu mettre la balise <img src="..." /> dans l'echo

<?php
$imgjour=array(
'image_dimanche',
'image_lundi',
'image_mardi',
'image_mercredi',
'image_jeudi',
'image_vendredi',
'image_samedi'
);
echo $imgjour[date('w')];
?>
N'oblige pas à avoir le zéro en début du jour ou du mois Posté par jy

preg_match('`^(((0[1-9])|([1-9])|(1\d)|(2\d)|(3[0-1]))\/((0[1-9])|([1-9])|(1[0-2]))\/(\d{4}))$`',$date)

ADAM Benjamin 2008 | Admin