15 votes

Comment puis-je convertir une date en php au format SQL (et l'insérer) ?

J'essaie d'insérer une date, disons CURDATE() à un sql DateTime champ.

Ma date est au format de : 28/01/2008

Quand j'essaie de l'insérer dans le SQL, je n'obtiens que des zéros.

Alors comment puis-je le convertir correctement ?

26voto

Dan Grossman Points 31514
$new_date = date('Y-m-d', strtotime($old_date));

Explication

  1. strtotime() va essayer d'analyser une chaîne de caractères ( $old_date dans ce cas) et comprendre quelle est la date. Il s'attend à recevoir une chaîne de caractères contenant un format de date en anglais ou une description textuelle de la date en anglais. En cas de succès, il renvoie un Horodatage Unix (le nombre de secondes depuis le 1er janvier 1970). Maintenant, nous avons obtenu un point dans le temps à partir de cette chaîne.

  2. date() va ensuite transformer ce point dans le temps obtenu précédemment en un format, décrit dans le premier paramètre, dans l'exemple ci-dessus c'est le 'Y-m-d'

    • Y - Une représentation numérique complète d'une année, 4 chiffres
    • m - Représentation numérique d'un mois, avec des zéros en tête.
    • d - Jour du mois, 2 chiffres avec des zéros de tête
    • - - littéralement le symbole moins

Voici un liste complète de caractères que vous pouvez utiliser dans la chaîne de paramètres du format

7voto

Sarfraz Points 168484

J'essaie d'insérer une date, disons CURDATE() dans un sql DateTime champ.

$timestamp = strtotime($old_date);
$mydate = date('Y-m-d H:i:s', $timestamp);

6voto

wimvds Points 8782

Puisque vous utilisez la notation européenne de la date (dd/mm/yyyy), l'adresse de l'ordinateur est la suivante strtotime retournera 0 (qui sera à son tour converti en 1970-01-01 par la fonction date ) si vous n'utilisez pas - o . comme séparateur.

Si vous souhaitez utiliser strtotime, vous devrez donc modifier légèrement vos chaînes de date :

$olddate = '28/01/2008';
$newdate = strtotime(str_replace('/', '-', $olddate));

$newdate devrait maintenant contenir '2008-01-28'...

3voto

MatTheCat Points 9533
join('-',array_reverse(explode('/',$date)))

pour obtenir le format de date standard YYYY-MM-DD Mysql.

ou utilisez simplement la fonction MySQL DATE_FORMAT

1voto

RichardTheKiwi Points 58121

J'essaie d'insérer une date, disons CURDATE() dans un champ sql DateTime.

Pourquoi n'utilisez-vous pas directement la fonction MySQL ?

insert tbl (id, other, datecol)
values(NULL, 'abcdef', CURDATE());

Ma date est au format de : 28/01/2008

Si ce n'est pas CURDATE() que vous voulez, mais plutôt une variable PHP au format dd/mm/yyyy, alors voyez ceci Page de manuel MySQL pour savoir comment formater les littéraux. Les formats sûrs sont YYYY-MM-DD y YYYYMMDD sans temps.

$date = '28/01/2008';
$query = "insert tbl (id, other, datecol)
          values(NULL, 'abcdef', '" . date('Ymd', strtotime($date)) . "');";

Note : yyyymmdd est également un format valide dans SQL Server.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X