Подтвердить что ты не робот

Конвертировать строку даты в поле mysql datetime

У меня есть куча записей с датами, отформатированными как строка, такая как '04/17/2009 '

Я хочу преобразовать их в поле datetime mysql

Я планирую использовать цикл foreach для чтения старого значения даты и вставки вновь отформатированного значения в новое поле в каждой записи

что было бы лучшим способом конвертировать эту строку... Я думал, что у php может быть способ сделать это автоматически?

спасибо

4b9b3361

Ответ 1

Сначала преобразуем строку в метку времени:

$timestamp = strtotime($string);

Тогда сделайте a

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

Ответ 2

Если эти строки в настоящее время находятся в db, вы можете пропустить php, используя функцию mysql STR_TO_DATE().

Я предполагаю, что строки используют формат типа month/day/year, где month и day всегда 2 цифры, а year - 4 цифры.

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

Вы можете поддерживать другие форматы дат, используя другие спецификаторы формата.

Ответ 3

Использовать DateTime:: createFromFormat следующим образом:

$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');

Вы можете адаптировать это к любому входному формату, в то время как strtotime() предположит, что вы используете формат даты в США, если используете /, даже если это не так.

Добавленный 00:00:00 - это потому, что createFromFormat будет использовать текущую дату для заполнения отсутствующих данных, т.е. он займет текущий час: мин: сек, а не 00:00:00, если вы не уточните его.

Ответ 4

$time = strtotime($oldtime);

Затем используйте date(), чтобы поместить его в правильный формат.

Ответ 5

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" ]

Ответ 6

Я предполагаю, что мы говорим об этом в Bash?

Мне нравится использовать sed для загрузки значений даты в массив, чтобы я мог разбивать каждое поле и делать с ним все, что захочу. Следующий пример предполагает и вводит формат mm/dd/yyyy...

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

вы также можете прочитать команду date в linux. Это может быть очень полезно: http://unixhelp.ed.ac.uk/CGI/man-cgi?date

Надеюсь, что поможет...:)

-Ryan