Php 将任意日期转换为单一日期格式

Php 将任意日期转换为单一日期格式,php,mysql,date,Php,Mysql,Date,我被要求将数据从一个表迁移到另一个表。旧数据包括一系列日期,这些日期以用户当时喜欢使用的任何格式输入,新格式要求在MM/YYYY中有单独的“日期”和“截止日期”字段 因此,有些日期是单一日期,例如DD.MM.YYYY或DD/MM/YY或DD-YYYY或yyy或其他任何日期。有些日期是两个日期,例如DD.MM.YYYY-DD/YYYY或DD/MM/YY--DD/MM/YYYY。所以只是一团糟。只有几百行,但如果可以避免的话,我不想手动修改它们 大多数谷歌搜索结果都是用于将一种格式转换为另一种格式的

我被要求将数据从一个表迁移到另一个表。旧数据包括一系列日期,这些日期以用户当时喜欢使用的任何格式输入,新格式要求在MM/YYYY中有单独的“日期”和“截止日期”字段

因此,有些日期是单一日期,例如DD.MM.YYYY或DD/MM/YY或DD-YYYY或yyy或其他任何日期。有些日期是两个日期,例如DD.MM.YYYY-DD/YYYY或DD/MM/YY--DD/MM/YYYY。所以只是一团糟。只有几百行,但如果可以避免的话,我不想手动修改它们


大多数谷歌搜索结果都是用于将一种格式转换为另一种格式的,我如何才能将一堆格式转换为另一种格式?

使用一个表达式来包含所有的组合是很困难的,所以只需逐个执行模式:

UPDATE olddata,newdata
SET newdata.date=STR_TO_DATE(olddate.date, "%d.%m.%Y")
WHERE olddata.id=newdata.id
  AND olddata.date REGEXP '[:digit:]{1,2}\.[:digit:]{1,2}.[:digit:]{4}'
  AND newdata.date IS NULL
对每个日期格式执行多次,并在中使用正确的表达式。在执行更新之前,尝试选择正确的调节表达式


最终,您将有足够的记录来手动编辑,使用单个表达式来包含所有组合是很困难的,所以只需逐个执行模式:

UPDATE olddata,newdata
SET newdata.date=STR_TO_DATE(olddate.date, "%d.%m.%Y")
WHERE olddata.id=newdata.id
  AND olddata.date REGEXP '[:digit:]{1,2}\.[:digit:]{1,2}.[:digit:]{4}'
  AND newdata.date IS NULL
对每个日期格式执行多次,并在中使用正确的表达式。在执行更新之前,尝试选择正确的调节表达式


最终,您将有足够的记录进行手动编辑

规范化可能需要大量工作。我想看看你能识别多少种不同的模式。有些容易,有些难。有些必须手工完成。一旦您知道使用了什么模式/格式,就可以使用
strotime()
将其转换为一些合理的格式,如unix时间戳,然后可以稍后以您需要/想要的任何格式显示。DD-yyy?真正地没有真正的方法知道是11月6日还是6月11日,甚至是别的什么。世界上没有任何代码可以解析人类可以组成的所有不同格式。我的意思是MM而不是DD。抱歉,规范化可能需要很多工作。我想看看你能识别多少种不同的模式。有些容易,有些难。有些必须手工完成。一旦您知道使用了什么模式/格式,就可以使用
strotime()
将其转换为一些合理的格式,如unix时间戳,然后可以稍后以您需要/想要的任何格式显示。DD-yyy?真正地没有真正的方法知道是11月6日还是6月11日,甚至是别的什么。世界上没有任何代码可以解析人类可以组成的所有不同格式。我的意思是MM而不是DD。对不起,这是正确的答案。为所有特定的数据添加转换,直到你剩下很少(或没有)手动执行+++,所以我没有使用MYSQL,因为我没有足够的经验,所以我基本上按照你说的做了,但使用PHP。应该提到测试regex/str_to_date-
选择date,str_to_date(date,%d.%m.%Y),从olddata WHERE date REGEXP[:digit:{1,2}\.[:digit:{1,2}.[:digit:{4}'
以查看匹配/转换是否正常。这是正确答案。添加所有特定的转换,直到只有很少(或没有)的转换留下来手动执行+++,所以我没有使用MYSQL,因为我没有足够的经验,所以我几乎按照您说的做了,但使用PHP。应该提到测试regex/str_to_date-
SELECT date,str_to_date(date,“%d.%m.%Y”),来自旧数据,其中date REGEXP'[:digit:{1,2}.[:digit:{1,2}.[:digit:{4}“
以查看sane所在的匹配/转换。