Ответ 1
Сначала преобразуем строку в метку времени:
$timestamp = strtotime($string);
Тогда сделайте a
date("Y-m-d H:i:s", $timestamp);
У меня есть куча записей с датами, отформатированными как строка, такая как '04/17/2009 '
Я хочу преобразовать их в поле datetime mysql
Я планирую использовать цикл foreach для чтения старого значения даты и вставки вновь отформатированного значения в новое поле в каждой записи
что было бы лучшим способом конвертировать эту строку... Я думал, что у php может быть способ сделать это автоматически?
спасибо
Сначала преобразуем строку в метку времени:
$timestamp = strtotime($string);
Тогда сделайте a
date("Y-m-d H:i:s", $timestamp);
Если эти строки в настоящее время находятся в 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')
Вы можете поддерживать другие форматы дат, используя другие спецификаторы формата.
Использовать 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, если вы не уточните его.
$time = strtotime($oldtime);
Затем используйте date()
, чтобы поместить его в правильный формат.
SELECT *
FROM table_name
WHERE CONCAT( SUBSTRING(json_date, 11, 4 ) , '-', SUBSTRING( json_date, 7, 2 ) , '-', SUBSTRING( json_date, 3, 2 ) ) >= NOW();
Я предполагаю, что мы говорим об этом в 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