我有一个页面,用户可以上传.csv的网址和日期。格式如下:
http://www.google, 1/05/2013
http://www.yahoo, 1/04/2013
然后我打开文件,读取文件并将其放入数据库以供其他用途。
我需要我的脚本来处理不同的日期格式。它可能是正则表达式或拆分字符串等。
到目前为止,我所处理的格式是
month/day/year
day/month/year
year-day-month
我需要能够将某人一直给我的任何日期转换为相同的日期格式以插入数据库。
目前我有此功能来检查日期是否采用美国格式(月/日/年)。
protected function checkDate($handle) {
$europeanDateFormat = false;
while (($row = fgetcsv($handle, 1000)) !== false) {
$dateChunks = explode("/", $row[1]);
if (isset($dateChunks[0]) && $dateChunks[0] > 12) {
$europeanDateFormat = true;
break;
} else if (isset($dateChunks[1]) && $dateChunks[1] > 12) {
$europeanDateFormat = false;
break;
}
}
rewind($handle);
return $europeanDateFormat;
}
然后如果它不是美国格式的话,我可以翻转它们,因为你可以看到我在上传时无法处理破折号。
protected function makeDateAmerican($date) {
$dateChunks = explode('/', $date);
$rawDate = $dateChunks[1] . '/' . $dateChunks[0] . '/' . $dateChunks[2];
return date('Y-m-d', strtotime($rawDate));
}
此外,此脚本需要处理长格式和排序格式:
month = 1 or 01
day = 1 or 01
year = 13 or 2013
最后,我需要将所有日期设置为stringtotime函数的相同格式:
date('Y-m-d', strtotime($dateString));
答案 0 :(得分:1)
使用似乎使用伪智能的strtotime
并解析a variety of date formats:
echo date("Y-m-d H:i:s", strtotime("5/6/2012")); // May 6, 2012 (slash)
echo date("Y-m-d H:i:s", strtotime("5-6-2012")); // Jun 5, 2012 (dot/tab/dash)
恕我直言,它可能已经尽可能接近了。