formater une date

Eléphant du PHP | 231 Messages

10 mars 2005, 21:41

je recupere une date sous la forme (stokée en base) : 2005-03-01 17:00:09

je veut juste 2005-03-01

comment formater cette date ?

j'ai essayer ça : date("Y-m-d","2005-03-01 17:00:09");
mé ça fonctionne pas ^^

Eléphant du PHP | 64 Messages

10 mars 2005, 21:43

Bonjour,
je pense qu'il faudrait juste que tu fasses date("Y-m-d"); et ça suffit.

Mammouth du PHP | 1885 Messages

10 mars 2005, 21:52

Bonjour,
je pense qu'il faudrait juste que tu fasses date("Y-m-d"); et ça suffit.
Ceci retourne la date courante au format Y-m-d. Or, la question demande à ce que l'on retourne la date d'un temps donné à partir d'un champ MySQL. Il ne faut donc pas confondre PHP et MySQL. ;)


Il existe plusieurs façons de récupérer que la date à partir d'une requête SQL

Fonction DATE() disponible qu'à partir de MySQL 4.1.1

Code : Tout sélectionner

SELECT DATE(fieldname) FROM tablename
Fonction DATE_FORMAT()

Code : Tout sélectionner

SELECT DATE_FORMAT(fieldname, '%Y-%m-%d') FROM tablename
fieldname: Champ contenant la date
tablename: Nom de la table

;)
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Administrateur PHPfrance
Administrateur PHPfrance | 1275 Messages

10 mars 2005, 21:55

Ou alors
<?php

$date = '2005-03-01 17:00:09';

echo substr($date, 0, 10);
// on prend les 10 caracteres a partir du caractere 0 de la variable $date

?>

Mammouth du PHP | 1885 Messages

10 mars 2005, 22:07

Damien

Pourquoi extraire le champ de la base de données pour ensuite la retraiter avec PHP alors que MySQL propose déjà des fonctions de manipulation de date?

Selon moi, la question ne se pose pas:
Lorsque l'on peut éviter l'utilisation des fonctions PHP lorsqu'il est question de bases de données, autant utiliser les fonctions disponibles dans le SGBD. Cela évite une manipulation inutile et de plus, la fonction SQL a été optimisée pour ce genre de manipulation.

Encore une fois, ton second exemple aurait pu également être fait en SQL

Code : Tout sélectionner

SELECT LEFT(fieldname, 10) FROM tablename
:)
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Eléphant du PHP | 231 Messages

10 mars 2005, 22:11

impec le truc de la chaine
je prefer ça a l'autre parce que y'a deja des operations de focntion date dans l'extraction donc trop complique ^^

Administrateur PHPfrance
Administrateur PHPfrance | 1275 Messages

10 mars 2005, 22:27

Xenon_54 : La méthode optimale dépend de tes besoins. Mais si tu veux pouvoir utiliser ton code sur différents SGBD, ou changer de SGBD sans avoir à faire trop de modifs, ou alors tout simplement soliciter le moins longtemps possible ton SGBD, l'utilisation de PHP pour traiter tes variables est une solution.

Mammouth du PHP | 859 Messages

10 mars 2005, 23:02

Et ça?
<?
$date = '2005-03-01 17:00:09';
preg_match("!(\d{4}-\d{2}-\d{2})!", $date, $recupnewdate, PREG_OFFSET_CAPTURE);
echo $recupnewdate[0][0];
//Affiche 2005-03-01
?>

Mammouth du PHP | 1885 Messages

10 mars 2005, 23:30

Fonction déjà existante réalisant sensiblement les mêmes opérations:
<?php
$time = strtotime ($variable);
echo date('Y-m-d', $time);
?>
:P
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Administrateur PHPfrance
Administrateur PHPfrance | 1275 Messages

11 mars 2005, 00:31

preg_match et strtotime+date doivent se valoir niveau performance, mais par contre le substr doit être beaucoup plus rapide. C'est sûr qu'on ne verra pas la différence sur une instruction (ni même sur 1000), mais un gain est toujours un gain.

Mammouth du PHP | 1885 Messages

11 mars 2005, 00:32

J'ai la meilleure solution:
Si tu ne comptes pas utiliser les heures et minutes contenues dans le champ, alors vaut mieux changer le type du champ pour "DATE"

:D
La programmation est l'expression de la poésie d'un programmeur
Génération PHP