Page 1 sur 1

formater une date

Posté : 10 mars 2005, 21:41
par dark_vidor
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 ^^

Posté : 10 mars 2005, 21:43
par milooser
Bonjour,
je pense qu'il faudrait juste que tu fasses date("Y-m-d"); et ça suffit.

Posté : 10 mars 2005, 21:52
par Xenon_54
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

;)

Posté : 10 mars 2005, 21:55
par Damien
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

?>

Posté : 10 mars 2005, 22:07
par Xenon_54
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
:)

Posté : 10 mars 2005, 22:11
par dark_vidor
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 ^^

Posté : 10 mars 2005, 22:27
par Damien
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.

Posté : 10 mars 2005, 23:02
par flitox
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
?>

Posté : 10 mars 2005, 23:30
par Xenon_54
Fonction déjà existante réalisant sensiblement les mêmes opérations:
<?php
$time = strtotime ($variable);
echo date('Y-m-d', $time);
?>
:P

Posté : 11 mars 2005, 00:31
par Damien
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.

Posté : 11 mars 2005, 00:32
par Xenon_54
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