У меня есть куча записей с датами, отформатированными как строка, такая как '04 / 17/2009 '
Я хочу преобразовать их в поле datetime mysql
Я планирую использовать цикл foreach для чтения старого значения даты и вставки вновь отформатированного значения в новое поле в каждой записи
что было бы лучшим способом конвертировать эту строку … Я думал, у php может быть способ сделать это автоматически?
благодаря
Сначала преобразуем строку в метку времени:
$timestamp = strtotime($string);
Затем сделайте
date("Ymd H:i:s", $timestamp);
Если эти строки в настоящее время находятся в db, вы можете пропустить php, используя функцию STR_TO_DATE () mysql.
Я предполагаю, что строки используют формат, например 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/YH:i:s', $input_string.' 00:00:00'); $mysql_date_string = $date->format('Ymd 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();
Я предполагаю, что мы говорим об этом в Баше?
Мне нравится использовать 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