web-dev-qa-db-fra.com

Format date jj/mm/aaaa à aaaa-mm-jj PHP

J'ai un formulaire dans lequel une date est entrée au format UK, et je dois le convertir en 

yyyy-mm-dd

par exemple. une date entrée est: 31/03/2013 que je veux convertir en '2013-03-31' pour insérer une base de données.

J'utilise ce qui suit qui ne fonctionne bizarrement que parfois:

$dateInput = $mysqli->real_escape_string($_POST['date']);
$show_date = date('Y-m-d', strtotime($dateInput));

Y a-t-il une meilleure manière de faire cela?

11
Darren Sweeney

Vous voudrez peut-être utiliser DateTime :: createFromFormat :

$show_date = DateTime::createFromFormat('d/m/Y', $dateInput)->format('Y-m-d');
15
sroes

l'essayer.

$dateInput = explode('/','31/03/2013');
$ukDate = $dateInput[2].'-'.$dateInput[1].'-'.$dateInput[0];
11
Dieepak

suite à quoi bizarrement ne fonctionne que parfois:

$show_date = date('Y-m-d', strtotime($dateInput));

ce n'est pas un autre moyen plus court de le faire ... et je l'utilise toute ma vie ... je n'ai pas remarqué d'effets bizarres jusqu'à maintenant ... vérifiez s'il y a d'autres choses qui font problème

autrement, c'est

$timestamp = strtotime(str_replace('/', '.', $dateInput));
$mysql_date = date('Y-m-d', $timestamp); 
3
bipen

Essaye ça :

$dte  = '28/03/2013';
$dt   = new DateTime();
$date = $dt->createFromFormat('d/m/Y', $dte);
echo $date->format('Y-m-d');

Sortie: 2013-03-28 

1
Prasanth Bendra

PHP 5.3 et plus

Utilisez DateTime :: createFromFormat. Il vous permet de spécifier un masque exact - en utilisant la syntaxe date () - avec lequel analyser les dates de chaîne entrantes.

PHP 5.2 et inférieur

Vous devrez analyser les éléments (année, mois, jour, heure, minute, seconde) manuellement en utilisant substr () et remettre les résultats à mktime () qui vous construira un timestamp.

1
Arvind
$date_array = explode("/",$your_date); // split the array
$var_day = $date_array[0]; //day seqment
$var_month = $date_array[1]; //month segment
$var_year = $date_array[2]; //year segment
echo $new_date_format = "$var_year-$var_day-$var_month"; // join them  together

Ça va marcher

0
Dew Drop

Couple de méthodes alternatives. Les deux sorties 2013-03-31:

Méthode 1 - "Regardez ma, pas de fonctions"

<?php
    $in = '31/03/2013';
    echo $in[6].$in[7].$in[8].$in[9].'-'.$in[3].$in[4].'-'.$in[0].$in[1];
    ?>    

Méthode 2 - regex

<?php
    echo ($output = preg_replace('!^([0-9]{2})/([0-9]{2})/([0-9]{4})$!',"$3-$2-$1",$input));
?>
0
AbsoluteƵERØ