我有一堆日期格式为字符串的记录,例如'04 / 17/2009'
我想将它们转换为mysql datetime字段
我计划使用foreach循环读取旧日期值并将新格式化的值插入到每个记录的新字段中
转换该字符串的最佳方法是什么?我认为php可能有办法自动完成吗?
感谢
答案 0 :(得分:89)
首先,将字符串转换为时间戳:
$timestamp = strtotime($string);
然后做一个
date("Y-m-d H:i:s", $timestamp);
答案 1 :(得分:24)
如果这些字符串当前在db中,则可以使用mysql的STR_TO_DATE()函数跳过php。
我假设字符串使用month/day/year
这样的格式,其中month
和day
始终为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();