我正在从一个存在许多不一致的旧应用程序重建一个 Web 应用程序。我必须将所有数据从旧数据库迁移到我们的新结构。
在旧数据库中,日期以 VARCHAR
形式存储在 MySQL 数据库中。 我们位于英国,因此日期以 DD/MM/YYYY 格式书写。我需要将这些日期转换为 MySQL 的原生 DATE()
格式。
问题是这样的 - PHP 默认假定日期为“美国”格式 (MM/DD/YYYY),因为它们最初是用 /
而不是 -
分割的- 和 -
强制 PHP 假定它们是“欧洲”格式。
到目前为止,我这样做是为了转换它们:
$start_date = date('Y-m-d', strtotime($query->row('startdate')));
$query->row('startdate')
是旧数据库中存储日期的列。问题是,我需要先将所有 21/03/1994
切换为 21-03-1994
。
我该怎么做?
最佳答案
$start_date = date('Y-m-d', strtotime(str_replace('/', '-', $query->row('startdate'))));
或者更好 - 只需更改数据库中的数据:
UPDATE `table` SET `startdate` = REPLACE(`startdate`, '/', '-');
... 然后将字段转换为 DATE 类型。
---- 编辑----
实际上,Col. Shrapnel 说的有道理……我忽略了日期也需要倒转的事实,所以它是 YYYY-MM-DD;假设原始日期的格式为 DD/MM/YYYY,更好的查询可能类似于:
UPDATE `table` SET `date` = CONCAT(SUBSTRING(`date`, 7), '-', SUBSTRING(`date`, 4, 2), '-', SUBSTRING(`date`, 1, 2))
这会将组件部分反转为可以转换为 DATE 的字符串......如果原始日期字符串不使用前导零,它将无法正常工作 1/6/2011
例如……在这种情况下需要做一些更聪明的事情。
关于php - 在不合逻辑的格式日期之间转换(更改/斜线/到 -dash- ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8136329/