将各种格式的日期转换为mysql DATE格式以保存在数据库PHP中

时间:2011-07-16 06:35:35

标签: php mysql datetime varchar

好的,所以我的手上有一点神秘感。我有各种各样的日期,主要是美国格式。我需要将它们添加到DATE字段中的mysql数据库。因此,我编写了打击代码来获取他们拥有的任何分隔符并用连字符替换它,然后将strtotime与date函数结合使用以将其转换为正确的格式。我以为我会在家免费,但没有。

$q = "SELECT date_rendered, date_requested, record_id FROM client_svc_history";
$r = mysql_query($q) or die(mysql_error());

while($row = mysql_fetch_assoc($r)) {
    $record_id = $row['record_id'];
    echo $record_id.": ".$row['date_rendered']."  ";
    $date_rendered = preg_replace('~[^0-9]~','-',$row['date_rendered']);
    echo $date_rendered." ";
    $date_rendered = date('Y-m-d',strtotime($date_rendered));
    echo $date_rendered."<br> ";
    echo $record_id.": ".$row['date_requested']." ";
    $date_requested = preg_replace('~[^0-9]~','-',$row['date_requested']);
    echo $date_requested." ";
    $date_requested = date('Y-m-d',strtotime($date_requested));
    echo $date_requested."<br>";
}

我回应了数据,所以在用它写回数据库之前我可以确保它正常工作。

以下是我得到的输出样本。请注意,在记录7中,它花了03-23-2006并将其归零。在记录8中,它处理相同的格式没有问题,记录在11,12和12中。 13它将我认为strtotime可以处理的2种格式归零。我很茫然。我感谢任何帮助。感谢。

1: 0000-00-00 0000-00-00 1969-12-31
1: 2005-02-25 2005-02-25 2005-02-25
2: 0000-00-00 0000-00-00 1969-12-31
2: 0000-00-00 0000-00-00 1969-12-31
3: 2005-03-08 2005-03-08 2005-03-08
3: 2005-03-08 2005-03-08 2005-03-08
4: 2005-03-08 2005-03-08 2005-03-08
4: 2005-03-08 2005-03-08 2005-03-08
5: 2005-03-08 2005-03-08 2005-03-08
5: 2005-03-08 2005-03-08 2005-03-08
6: 2005-03-08 2005-03-08 2005-03-08
6: 2005-03-08 2005-03-08 2005-03-08
7: 03-23-2006 03-23-2006 1969-12-31
7: 03-23-2006 03-23-2006 1969-12-31
8: 04-10-2006 04-10-2006 2006-10-04
8: 04-10-2006 04-10-2006 2006-10-04
9: 04-10-2006 04-10-2006 2006-10-04
9: 04-11-2006 04-11-2006 2006-11-04
10: 2/10/2006 2-10-2006 2006-10-02
10: 02-10-2006 02-10-2006 2006-10-02
11: 11/29/2005 11-29-2005 1969-12-31
11: 11-29-2005 11-29-2005 1969-12-31
12: 11/29/2005 11-29-2005 1969-12-31
12: 11-29-2005 11-29-2005 1969-12-31
13: 01-26-06 01-26-06 1969-12-31
13: 01-26-2006 01-26-2006 1969-12-31

3 个答案:

答案 0 :(得分:1)

strtotime()将无法准确呈现包含-的字符串日期,因为它会尝试从当前时间戳中扣除时间(例如-1 day ... )。尝试使用斜杠-替换连字符/

答案 1 :(得分:1)

检查PHP Supported date formats.。将日期转换为任何这些格式。

答案 2 :(得分:0)

转储到文件,sed s / - /// ./dump.txt

迭代文件,将每个日期从字符串拆分为数组,并在其上运行strtotime()。