begin process at 2012 02 07 10:50:57
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Date / Heure

 > EQUIVALENT A DATE () DU PHP

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


 Sources du même auteur

Source avec Zip CONVERTISSEUR D'IMAGES
Source avec Zip BASECODE SDL/OPENGL
Source avec Zip LIBRAIRIE SON [FMOD]
Source avec Zip CONSOLE A LA QUAKE (DANS LA CONSOLE DOS!)
Source avec Zip Source avec une capture TRIANGLE RECURSIF

 Sources de la même categorie

DATETIMECONVERTER par guill76
Source avec Zip CLASSE DE DATE LOCALISÉE (20 LANGUES) par exar
Source avec Zip CLASSE MOMENT V2.0 par le_duche
CALCUL DATE DE PAQUES (DATE MOBILE) par steph12358
Source avec une capture VACCATION (AVEC FONCTION) CONSOLERIE, REMIX GCC par sebman

Commentaires et avis

Commentaire de LordBob le 09/07/2004 12:46:07

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

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"};

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

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

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

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)

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);

}

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 ;-)

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

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

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

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

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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,621 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales