55 votes

convertir la chaîne de date en champ datq mysql

J'ai un tas d'enregistrements avec des dates formatées en chaîne comme '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 nouvelle valeur formatée dans un nouveau champ dans chaque enregistrement

quelle serait la meilleure façon de convertir cette chaîne ... Je pensais que php pourrait avoir un moyen de le faire automatiquement?

Merci

94voto

Pekka 웃 Points 249607

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

 $timestamp = strtotime($string);
 

Ensuite, faites un

 date("Y-m-d H:i:s", $timestamp);
 

23voto

goat Points 17643

Si ces chaînes sont actuellement dans la base de données, vous pouvez passer à php à l'aide de mysql STR_TO_DATE() fonction.

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 d'autres spécificateurs de format.

8voto

Kethryweryn Points 441

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, tandis que strtotime () supposera que vous utilisez le format de date américain si vous utilisez /, même si vous ne l'utilisez pas.

Le 00:00:00 ajouté est dû au fait que createFromFormat utilisera la date actuelle pour remplir les données manquantes, c'est-à-dire: cela prendra l'heure actuelle: min: sec et non 00:00:00 si vous ne la précisez pas.

1voto

Tyler Carter Points 30030
 $time = strtotime($oldtime);
 

Utilisez ensuite date() pour le mettre dans le format correct.

0voto

SDGuero Points 88

Je suppose que nous parlons de le faire en Bash?

J'aime utiliser sed pour charger les valeurs de date dans un tableau afin que je puisse briser chaque champ et de faire ce que je veux avec elle. L'exemple suivant suppose et le format d'entrée du jj/mm/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 souhaitez peut-être également lire jusqu'à la date de commande sous linux. Il peut être très utile: http://unixhelp.ed.ac.uk/CGI/man-cgi?date

Espère que ça aide... :)

-Ryan

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