将日期字符串转换为MySQL日期时间字段

58

我有一堆记录,其中日期格式为字符串,如“04/17/2009”

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

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

有什么最好的方法可以转换这个字符串...我认为php可能有自动完成这个任务的方法?

谢谢

6个回答

97

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

$timestamp = strtotime($string);
那么就做一个
date("Y-m-d H:i:s", $timestamp);

50
立即执行:date("Y-m-d H:i:s", strtotime($string));将$string转换为日期时间格式,并以"年-月-日 时:分:秒"的形式返回。 - Frenck
日期返回一个字符串。这样可以吗? - Muhammad Mubashirullah Durrani

25
如果这些字符串目前在数据库中,您可以使用MySQL的STR_TO_DATE()函数跳过PHP。我假设字符串使用类似于月/日/年的格式,其中始终是2位数字,是4位数字。
UPDATE some_table
   SET new_column = STR_TO_DATE(old_column, '%m/%d/%Y')

您可以使用其他格式说明符来支持其他日期格式。


这将是一个很好的方式,可惜我的数据库技能还不够。 - user26858
不得不转换fakenamegenerator.com导出的3000个假名字,其中一个字段名为“生日”。每个字段都以MM/DD/YYYY格式存储在VARCHAR字段中。这个答案非常有帮助。 - user458541
必须是答案 - Shady Mohamed Sherif

8
请使用 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。

日期在1970年之前的不错选择。 - AdRock

1
$time = strtotime($oldtime);

然后使用date()将其放入正确的格式中。

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 中日期命令的内容。它非常有用:http://unixhelp.ed.ac.uk/CGI/man-cgi?date

希望有所帮助... :)

-Ryan


这是PHP/MySQL。你偶尔检查一下标签就好了 ;) - Frenck

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接