Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

EQUIVALENT A DATE () DU PHP


Information sur la source

Description

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

  • #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;
  • }
#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 :)
 

Commentaires et avis

signaler à un administrateur
Commentaire de LordBob le 09/07/2004 12:46:07

juste un petit truc il manque:
#include &lt;stdio.h&gt; // pour printf

signaler à un administrateur
Commentaire de BlackGoddess le 09/07/2004 19:18:41

essaye de pas mélanger le C et le C++
mets des const

static char* days[]={"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};
=&gt;
static const char* days[]={"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};

signaler à un administrateur
Commentaire de Cyberboy2054 le 10/07/2004 13:47:20

Merci pour les remarques.
Bizarrement, je crois que ca compile sans le stdio.h, mais n ayant ni pc ni source originale je ne peux verifier (ha, les joies du formattage qui est nécessaire au moment ou on le désire le moins...)
sinon pour le const tu as raison, c' est bien un oubli de ma part.
Autant pour moi, j' y penserais la prochaine fois :)

signaler à un administrateur
Commentaire de vecchio56 le 11/07/2004 15:36:03 administrateur CS

inclus &lt;cstdio&gt; plutot que &lt;stdio.h&gt;

signaler à un administrateur
Commentaire de gergalp le 01/10/2004 20:36:18

j'ai un petit probleme au niveau de la compilation avec dev-c++, meme en incluant stdio.h, ca marche pas

le log du compilateur:
24 D:\C++\time.cpp `itoa' undeclared (first use this function)

signaler à un administrateur
Commentaire de rosemarie302 le 15/11/2004 20:57:55

si c'est parce que le programme se lance, affiche l'heure et se referme tu doit mettre une boucle pour qu'il continue à afficher!!

#include <econio.h>


while(0<1){
  
clrscr() ;
gotoxy(5, 3) ;
printf ("%s\nIl est actuellement %s\n", date("d/m/y = D d M y").c_str(), date("h:i:s").c_str());
Sleep(1000);

}

signaler à un administrateur
Commentaire de levetot le 17/11/2004 23:07:29

gergalp

écrits tout simplement au début du prog :
#include <iostream>
using namespace std ;


hmm, on doit pouvoir inclure un autre fichier plus précis si tu n'utilises qu'itoa, mais avec celui là ça marchera ;-)

signaler à un administrateur
Commentaire de val3113 le 21/04/2006 14:55:55

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

signaler à un administrateur
Commentaire de val3113 le 21/04/2006 15:12:11

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 :/

signaler à un administrateur
Commentaire de val3113 le 21/04/2006 15:42:47

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

signaler à un administrateur
Commentaire de val3113 le 21/04/2006 15:43:07

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

signaler à un administrateur
Commentaire de cadavor le 14/04/2008 11:23:24

Les heures, minutes et secondes n'affichent le 0 lorsque c'est inférieur à 10.
Comment faire pour l'ajouter?

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.