将日期字符串转换为mysql datetime字段

时间:2010-03-23 16:57:05

标签: php mysql

我有一堆日期格式为字符串的记录,例如'04 / 17/2009'

我想将它们转换为mysql datetime字段

我计划使用foreach循环读取旧日期值并将新格式化的值插入到每个记录的新字段中

转换该字符串的最佳方法是什么?我认为php可能有办法自动完成吗?

感谢

6 个答案:

答案 0 :(得分:89)

首先,将字符串转换为时间戳:

$timestamp = strtotime($string);

然后做一个

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

答案 1 :(得分:24)

如果这些字符串当前在db中,则可以使用mysql的STR_TO_DATE()函数跳过php。

我假设字符串使用month/day/year这样的格式,其中monthday始终为2位数,year为4位数。

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

您可以使用other format specifiers支持其他日期格式。

答案 2 :(得分:7)

像这样使用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将使用当前日期填充缺失数据,即:如果您不精确,它将采用当前小时:min:sec而不是00:00:00。

答案 3 :(得分:1)

$time = strtotime($oldtime);

然后使用date()将其设置为正确的格式。

答案 4 :(得分:0)

我认为我们正在谈论在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

您也可能想要阅读linux中的date命令。它非常有用: http://unixhelp.ed.ac.uk/CGI/man-cgi?date

希望有帮助......:)

-Ryan

答案 5 :(得分:0)

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