将日期字符串转换为 mysql 日期时间字段
Posted
技术标签:
【中文标题】将日期字符串转换为 mysql 日期时间字段【英文标题】:convert date string to mysql datetime field 【发布时间】:2010-03-23 16:57:04 【问题描述】:我有一堆日期格式为字符串的记录,例如 '04/17/2009'
我想将它们转换为 mysql 日期时间字段
我打算使用 foreach 循环来读取旧日期值并将新格式化的值插入到每条记录的新字段中
转换该字符串的最佳方法是什么...我认为 php 可能有办法自动完成它?
谢谢
【问题讨论】:
【参考方案1】:首先,将字符串转换为时间戳:
$timestamp = strtotime($string);
然后做一个
date("Y-m-d H:i:s", $timestamp);
【讨论】:
或立即执行:date("Y-m-d H:i:s", strtotime($string)); 日期返回一个字符串。这可以接受吗?【参考方案2】:如果这些字符串当前在 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支持其他日期格式。
【讨论】:
这将是一个很好的方法,可惜我的数据库技能不能胜任这项任务 +1。必须转换 fakenamegenerator.com 导出的 3000 个假名字,其中一个字段被命名为“生日”。将每个字段以 MM/DD/YYYY 格式存储为 VARCHAR 字段。这个答案非常有帮助。 一定是答案【参考方案3】:像这样使用 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 年前日期的不错选择【参考方案4】:$time = strtotime($oldtime);
然后用date()
把它变成正确的格式。
【讨论】:
【参考方案5】:我假设我们正在讨论在 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
希望对您有所帮助... :)
-瑞恩
【讨论】:
这是 PHP/MySQL。你偶尔检查一下标签;)【参考方案6】: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"]
【讨论】:
以上是关于将日期字符串转换为 mysql 日期时间字段的主要内容,如果未能解决你的问题,请参考以下文章
如何将欧洲格式的字符串日期转换为有效的 mysql 日期格式?