在格式不合格的日期之间转换(更改/斜杠/到-dash-)

Jac*_*ack 1 php mysql database date

我正在从一个有很多不一致的旧应用程序重建Web应用程序.我必须将旧数据库中的所有数据迁移到新结构中.

在旧数据库中,日期存储在MySQL DB中VARCHAR.我们的总部设在英国,因此日期以DD/MM/YYYY格式编写.我需要将这些日期转换为MySQL的原生DATE()格式.

问题是这个 - PHP默认假设日期是'美国'格式(MM/DD/YYYY),因为它们最初被拆分/而不是-- 并-迫使PHP假设它们是'欧洲'格式.

到目前为止我这样做是为了转换它们:

$start_date = date('Y-m-d', strtotime($query->row('startdate')));
Run Code Online (Sandbox Code Playgroud)

$query->row('startdate')旧数据库中存储日期的列在哪里.问题是,我需要先将所有的21/03/1994s 切换到21-03-1994.

我怎样才能做到这一点?

CD0*_*001 7

$start_date = date('Y-m-d', strtotime(str_replace('/', '-', $query->row('startdate'))));
Run Code Online (Sandbox Code Playgroud)

或者更好 - 只需更改数据库中的数据:

UPDATE `table` SET `startdate` = REPLACE(`startdate`, '/', '-');
Run Code Online (Sandbox Code Playgroud)

...然后将字段转换为DATE类型.

----编辑----

实际上,Shrapnel上校有一点......我忽略了日期需要逆转的事实,所以它是YYYY-MM-DD; 假设原始日期的格式为DD/MM/YYYY,则更好的查询可能类似于:

UPDATE `table` SET `date` = CONCAT(SUBSTRING(`date`, 7), '-', SUBSTRING(`date`, 4, 2), '-', SUBSTRING(`date`, 1, 2))
Run Code Online (Sandbox Code Playgroud)

这会将组件部分反转成一个可以转换为DATE的字符串......如果原始日期字符串不使用前导零1/6/2011,那么它将无法正常工作...需要做一些更聪明的事情那种情况.