Classe datetime avec traduction

Soyez le premier à donner votre avis sur cette source.

Vue 5 224 fois - Téléchargée 322 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
-
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
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
25 -
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
-
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
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
25 -
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.