Equivalent a date () du php

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 960 fois - Téléchargée 28 fois

Contenu du snippet

Ben il remplace la fonction date() du php.
Les parametres de la fonction sont a peu pres les memes, la source est assez commentée pour que vous puissiez faire des equivalents.
On peut largement l optimiser (virer les std::string...), mais cette version est suffisament simple pour etre comprise par tous (je n ai pas massacré le code dans l espoir de gagner quelques cycles =D )

Source / Exemple :


#include <time.h>
#include <string>

/*
	Fonction date similaire a celle du Php
	on lui passe en parametre le format de la date que l on veut:
	h = heure
	i = minutes (le m est déja pris par mois)
	s = secondes
	d = le jour du mois, en chiffres
	D = le jour de la semaine, en lettres (ex = Lundi)
	m = le mois en chiffre
	M = le mois en lettres (ex = Janvier)
	y = l année courante (ex = 2004)

	Exemple d appel:
	date ("h:i:s").c_str() donne 23:15:21

  • /
std::string date (std::string format) { std::string szDate=""; time_t raw; struct tm* timeinfo; // recupere le temps ecoule de le 1er janvier 1970 time(&raw); // puis obtient une structure tm qui contient toutes les infos dont on a besoin timeinfo = localtime(&raw); if (!timeinfo) return ""; // Definition de quelques trucs utiles :D static char* days[]={"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"}; static char* months[]={"Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre"}; char buffer[32]; // conversions via itoa for (int i = 0; i < format.size();i++) { switch (format[i]) { // Heure case 'h': itoa(timeinfo->tm_hour, &buffer[0], 10); szDate += buffer; break; // minute case 'i': itoa(timeinfo->tm_min, &buffer[0], 10); szDate += buffer; break; // secondes case 's': itoa(timeinfo->tm_sec, &buffer[0], 10); szDate += buffer; break; // jour (chiffre) case 'd': itoa(timeinfo->tm_mday, &buffer[0], 10); szDate += buffer; break; // jour (lettres) case 'D': szDate += days[timeinfo->tm_wday]; break; // mois (chiffre) case 'm': itoa(timeinfo->tm_mon, &buffer[0], 10); szDate += buffer; break; // mois (lettres) case 'M': szDate += months[timeinfo->tm_mon]; break; // annee (chiffre) case 'y': itoa(timeinfo->tm_year+1900, &buffer[0], 10); szDate += buffer; break; // Si on trouve un caractere autre, on l ajoute au résultat default: szDate += format[i]; break; } } return szDate; } int main () { printf ("%s\nIl est actuellement %s\n", date("d/m/y = D d M y").c_str(), date("h:i:s").c_str()); return 0; }

Conclusion :


Ben voila, enjoy :)

A voir également

Ajouter un commentaire

Commentaires

cs_cadavor
Messages postés
16
Date d'inscription
lundi 26 novembre 2007
Statut
Membre
Dernière intervention
20 mai 2008
-
Les heures, minutes et secondes n'affichent le 0 lorsque c'est inférieur à 10.
Comment faire pour l'ajouter?
val3113
Messages postés
22
Date d'inscription
lundi 23 juin 2003
Statut
Membre
Dernière intervention
9 juin 2007
-
Voila finalement ce qu'il faut pour qu'il marche vraiment:
#include<stdio.h>
#include<time.h>

void main()
{
struct tm* timeinfo;
time_t raw;
int jour, mois, annee;

time(&raw);
timeinfo = localtime(&raw);

jour=timeinfo->tm_mday;
mois=timeinfo->tm_mon+1;
annee=(timeinfo->tm_year)+1900;
}

Juste avec ca ca marche, enfin sauf qu'il n'y a pas lundi, mardi, janvier, février etc
val3113
Messages postés
22
Date d'inscription
lundi 23 juin 2003
Statut
Membre
Dernière intervention
9 juin 2007
-
Voila finalement ce qu'il faut pour qu'il marche vraiment:
#include<stdio.h>
#include<time.h>

void main()
{
struct tm* timeinfo;
time_t raw;
int jour, mois, annee;

time(&raw);
timeinfo = localtime(&raw);

jour=timeinfo->tm_mday;
mois=timeinfo->tm_mon+1;
annee=(timeinfo->tm_year)+1900;
}

Juste avec ca ca marche, enfin sauf qu'il n'y a pas lundi, mardi, janvier, février etc
val3113
Messages postés
22
Date d'inscription
lundi 23 juin 2003
Statut
Membre
Dernière intervention
9 juin 2007
-
Je repost déja apparament pour l'année c'est bien depuis 1900, maintenant j'essaie et ca marche j'arive a récupérer l'année et le jour mais j'ai un probleme, on est le 26/04/2006 et
timeinfo->tm_mon
me retourne 3 au lieu de 4
je trouve pas pourquoi :/
val3113
Messages postés
22
Date d'inscription
lundi 23 juin 2003
Statut
Membre
Dernière intervention
9 juin 2007
-
Je faisais un p'tit test, parceque je suis sur un dossier en c (pas de c++) et on doit verifier lors de la saisie d'un champ date que la date entrée est bien inférieure a la date du jour, puis plus loin je devrais calculer la différence entre la date du jour et la date de naissance pour faire un controle sur l'age des membres.. soit, je voulais demander a propos de ce commentaire
"// recupere le temps ecoule de le 1er janvier 1970 "
ce serait pas plutot depuis 1900?
merci d'votre aide

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.