0

我有一个页面,用户可以在其中上传 .csv 的 url 和日期。格式如下所示:

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));
}

此外,此脚本需要处理 long 和 sort 格式:

month = 1 or 01
day = 1 or 01
year = 13 or 2013

最后,我需要将所有日期转换为 stringtotime 函数的相同格式:

date('Y-m-d', strtotime($dateString));
4

1 回答 1

1

使用strtotimewhich 似乎使用伪智能并解析各种日期格式

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)

恕我直言,它可能尽可能接近。

于 2013-01-11T22:10:47.607 回答