Classe datetime avec traduction

Soyez le premier à donner votre avis sur cette source.

Vue 5 751 fois - Téléchargée 373 fois


Description

Début de class DateTime avec prise en charge multi-langue.

Pour le moment seul la fonction de formatage à été implenté.

Fonctionne sous php 5.1 >

Source / Exemple :


<?php
class DateTime {
	
	var $dtime;
	var $lang;
	
	public function __toString() {
		$date = $this->format(constant("DATE_TIME_FORMAT"));
		return $date;
    }
	
	public function __construct($time = NOW,$lang='fr')
	{
		$this->lang = $lang;
		$this->dtime = $time;
		
		include(dirname(__FILE__)."/lang/".$lang.".php");
	}
	
	public static function createFromFormat($format, $datetime,$lang='fr')
	{
		$j = 0;
		$dtime["year"] = 0;
		$dtime["month"] = 0;
		$dtime["day"] = 0;
		$dtime["hour"] = 0;
		$dtime["minute"] = 0;
		$dtime["second"] = 0;
		
		for($i=0;$i<mb_strlen($format);$i++)
		{
			switch(mb_substr($format,$i,1))
			{
				case "Y":
					$dtime["year"] = mb_substr($datetime, $j, 4);
					$j = $j + 4;
				break;
				case "m":
					$dtime["month"] = mb_substr($datetime, $j, 2);
					$j = $j + 2;
				break;
				case "d":
					$dtime["day"] = mb_substr($datetime, $j, 2);
					$j = $j + 2;
				break;
				case "H":
					$dtime["hour"] = mb_substr($datetime, $j, 2);
					$j = $j + 2;
				break;
				case "i":
					$dtime["minute"] = mb_substr($datetime, $j, 2);
					$j = $j + 2;
				break;
				case "s":
					$dtime["second"] = mb_substr($datetime, $j, 2);
					$j = $j + 2;
				break;
				default:
					$j++;
				break;
			}
		}
		
		
		$time = mktime  ($dtime["hour"], $dtime["minute"], $dtime["second"], $dtime["month"], $dtime["day"], $dtime["year"]);
		
		return new self($time);
	}
	
	//Reçois les paramêtre de formatage de la fonction date()
	//Gère ceux devant être traduit, et retourne la date formater
	public function format($format)
	{
		$date =  "";

		for($i=0;$i<mb_strlen($format);$i++)
		{
			switch(mb_substr($format,$i,1))
			{
				// jour de la semaine, 3 première lettre
				case "D":
					$var = date("N", $this->dtime);
					$date .= mb_substr(constant("WEEK_$var"),0,3);
				break;
				//jour de la semaine
				case "l":
					$var = date("N", $this->dtime);
					$date .= constant("WEEK_$var");
				break;
				//Suffixe ordinal d'un nombre pour le jour du mois, en anglais, sur deux lettres
				case "S":
					$var = date("S", $this->dtime);
					$date .= constant("SUFFIXE_$var");
				break;
				//Nom du mois
				case "F":
					$var = date("n", $this->dtime);
					$date .= constant("MONTH_$var");
				break;
				//Nom du mois, 3 première lettre
				case "M":
					$var = date("n", $this->dtime);
					$date .= mb_substr(constant("MONTH_$var"),0,3);
				break;
				//Le prochain caratère va être ignoré
				case "\\":
					$i++;
					$date .= mb_substr($format,$i,1);
				break;
				// Caratère ignoré, et remis dans la chaine
				case ",":
					$date .= mb_substr($format,$i,1);
				break;
				// Caratère ignoré, et remis dans la chaine
				case ":":
					$date .= mb_substr($format,$i,1);
				break;
				default:
					$date .= date(mb_substr($format,$i,1), $this->dtime);

			}
		}

		return $date;
	}
	
}
?>

Codes Sources

A voir également

Ajouter un commentaire Commentaires
cs_aKheNathOn Messages postés 575 Date d'inscription dimanche 23 décembre 2001 Statut Membre Dernière intervention 23 octobre 2012
8 mars 2010 à 12:08
Merci de ta contribution 1030, ta classe est très utile.

Quelques améliorations / corrections :

- rajout du timezone peut être intéressant (comme ça on affiche l'heure locale)
- modifier le nom de ta classe ou bien prendre en charge les conflits de nommage avec les versions futures
- avoir une version de durée entre 2 dates (permettant d'avoir un truc du style : depuis 1 heure, depuis 5 minutes, depuis 5 jours)

Je pense la ré-utiliser dans certains de mes projets :)
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
22 févr. 2010 à 21:43
NB : cette classe n'est pas de moi !
Mais, effectivement, ça fait au moins une bonne raison.
1030 Messages postés 5 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 10 mai 2011
22 févr. 2010 à 06:00
Deux raison, le première la traduction dans d'autre langue qui n'est pas prise en charge par votre classe.

La deuxième, mon hébergeur utilise la version 5.1 de php, et cette class est uniquement implanté a partir de la version 5.3
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
21 févr. 2010 à 18:19
Pourquoi vouloir réinventer l'eau chaude ?
http://fr.php.net/manual/fr/class.datetime.php

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.