Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将日期字符串转换为mysql日期时间字段_Php_Mysql - Fatal编程技术网

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

Php 将日期字符串转换为mysql日期时间字段,php,mysql,Php,Mysql,我有一堆日期格式化为字符串的记录,如“04/17/2009” 我想将它们转换为mysql日期时间字段 我计划使用foreach循环读取旧的日期值,并将新格式化的值插入每个记录中的新字段 转换字符串的最佳方法是什么…我想php可能有一种自动转换的方法 谢谢 然后使用date()将其转换为正确的格式。首先,将字符串转换为时间戳: $timestamp = strtotime($string); 然后做一个测试 date("Y-m-d H:i:s", $timestamp); 如果这些字符串当前在

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

我想将它们转换为mysql日期时间字段

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

转换字符串的最佳方法是什么…我想php可能有一种自动转换的方法

谢谢


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

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

$timestamp = strtotime($string);
然后做一个测试

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

如果这些字符串当前在数据库中,可以使用mysql函数跳过php

我假设字符串使用的格式类似于
month/day/year
,其中
month
day
始终为2位,而
year
为4位

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

您可以通过使用来支持其他日期格式。

我想我们讨论的是在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命令。它可能非常有用:

希望这有助于……:)


-Ryan

使用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');
您可以将其调整为任何输入格式,而strotime()将假定您使用的是US date格式(如果您使用/),即使您没有使用

添加的00:00:00是因为createFromFormat将使用当前日期来填充缺少的数据,即:如果不精确,将使用当前的小时:分钟:秒而不是00:00:00

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”]是PHP/MySQL。偶尔检查一下标签;)或者立即执行:date(“Y-m-dh:i:s”,strotime($string));这将是一个很好的方法,可惜我的数据库技能不能胜任+1任务。不得不转换fakenamegenerator.com导出的3000个假名字,其中一个字段名为“生日”。将每个字段以MM/DD/YYYY格式存储为VARCHAR字段。这个答案帮助很大。对于1970年之前的日期,一定是答案
SELECT *
FROM table_name
WHERE CONCAT( SUBSTRING(json_date, 11, 4 ) ,  '-', SUBSTRING( json_date, 7, 2 ) ,  '-', SUBSTRING( json_date, 3, 2 ) ) >= NOW();