convertir la chaîne de date en champ DateTime mysql

J'ai un tas d'enregistrements avec des dates formatées comme une chaîne telle que '04/17/2009'

Je veux les convertir en un champ DateTime mysql

Je prévois d'utiliser une boucle foreach pour lire l'ancienne valeur de date et insérer la valeur nouvellement formatée dans un nouveau champ dans chaque enregistrement

Quel serait le meilleur moyen de convertir cette chaîne...Je pensais que php pourrait avoir un moyen de le faire automatiquement?

Merci

50
demandé sur mjr 2010-03-23 19:57:04

6 réponses

Tout d'abord, convertissez la chaîne en horodatage:

$timestamp = strtotime($string);

Puis faites un

date("Y-m-d H:i:s", $timestamp);
83
répondu Pekka 웃 2013-02-21 11:22:10

Si ces chaînes sont actuellement dans la base de données, vous pouvez ignorer php en utilisant la fonction STR_TO_DATE() de mysql.

Je suppose que les chaînes utilisent un format comme month/day/yearmonth et day sont toujours à 2 chiffres, et year est de 4 chiffres.

UPDATE some_table
   SET new_column = STR_TO_DATE(old_column, '%m/%d/%Y')

Vous pouvez prendre en charge d'autres formats de la date en utilisant autres spécificateurs de format.

24
répondu goat 2013-12-16 01:10:14

Utilisez DateTime:: createFromFormat comme ceci:

$date = DateTime::createFromFormat('m/d/Y H:i:s', $input_string.' 00:00:00');
$mysql_date_string = $date->format('Y-m-d H:i:s');

Vous pouvez l'adapter à n'importe quel format d'entrée, alors que strtotime() supposera que vous utilisez le format de date US si vous utilisez /, même si vous ne l'êtes pas.

Le 00:00:00 ajouté est parce que createFromFormat utilisera la date actuelle pour remplir les données manquantes, c'est-à-dire : il faudra l'heure actuelle:min:sec et non 00:00:00 Si vous ne le précisez pas.

6
répondu Kethryweryn 2013-08-07 13:30:16
$time = strtotime($oldtime);

, Puis utilisez date() pour le mettre dans le bon format.

1
répondu Tyler Carter 2010-03-23 16:58:55

Je suppose que nous parlons de faire cela dans Bash?

J'aime utiliser sed pour charger les valeurs de date dans un tableau afin que je puisse décomposer chaque champ et faire ce que je veux avec. L'exemple suivant suppose et le format d'entrée de mm / JJ / AAAA...

DATE=$2
DATE_ARRAY=(`echo $DATE | sed -e 's/\// /g'`)
MONTH=(`echo ${DATE_ARRAY[0]}`)
DAY=(`echo ${DATE_ARRAY[1]}`)
YEAR=(`echo ${DATE_ARRAY[2]}`)
LOAD_DATE=$YEAR$MONTH$DAY

Vous pouvez également lire sur la commande date sous linux. Il peut être très utile: http://unixhelp.ed.ac.uk/CGI/man-cgi?date

J'espère que ça aide... :)

-Ryan

0
répondu SDGuero 2010-03-23 17:12:50
SELECT *
FROM table_name
WHERE CONCAT( SUBSTRING(json_date, 11, 4 ) ,  '-', SUBSTRING( json_date, 7, 2 ) ,  '-', SUBSTRING( json_date, 3, 2 ) ) >= NOW();

Json_date ["05/11/2011"]

0
répondu vpgodara 2014-11-18 10:38:02