将php日期转换为mysql格式

时间:2011-07-22 13:45:02

标签: php mysql

我在php中有一个使用此代码的日期字段:

$date = mysql_real_escape_string($_POST['intake_date']);

如何将其转换为MySql format 0000-00-00以包含在db中。是这样的:日期('Ymd'strtotime($ date);。我问的原因,是因为我尝试了这种变化,我似乎无法让它起作用。要么显示为1970或其他一些变化非常感谢

9 个答案:

答案 0 :(得分:138)

$date = mysql_real_escape_string($_POST['intake_date']);

1。如果您的MySQL列是DATE,请键入:

$date = date('Y-m-d', strtotime(str_replace('-', '/', $date)));

2。如果您的MySQL列是DATETIME,请键入:

$date = date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $date)));

你没有工作strototime(),因为它不适用于破折号-分隔符,它会尝试进行减法。


更新,格式化日期的方式无法使用strtotime(),请改用此代码:

$date = '02/07/2009 00:07:00';
$date = preg_replace('#(\d{2})/(\d{2})/(\d{4})\s(.*)#', '$3-$2-$1 $4', $date);
echo $date;

输出:

2009-07-02 00:07:00

答案 1 :(得分:15)

这个网站有两个非常简单的解决方案 - 只需检查代码,我提供了描述以备不时之需 - 为您节省一些点击。

http://www.richardlord.net/blog/dates-in-php-and-mysql

1.一个常见的解决方案是将日期存储在DATETIME字段中,并使用PHPs date()和strtotime()函数在PHP时间戳和MySQL DATETIME之间进行转换。方法将按如下方式使用 -

$mysqldate = date( 'Y-m-d H:i:s', $phpdate );
$phpdate = strtotime( $mysqldate );

2.我们的第二个选择是让MySQL完成工作。 MySQL具有我们可以用来在访问数据库时转换数据的函数。 UNIX_TIMESTAMP将从DATETIME转换为PHP时间戳,FROM_UNIXTIME将从PHP时间戳转换为DATETIME。这些方法在SQL查询中使用。所以我们使用像这样的查询插入和更新日期 -

$query = "UPDATE table SET
    datetimefield = FROM_UNIXTIME($phpdate)
    WHERE...";
$query = "SELECT UNIX_TIMESTAMP(datetimefield)
    FROM table WHERE...";

答案 2 :(得分:5)

您正在寻找MySQL函数FROM_UNIXTIME()UNIX_TIMESTAMP()

在SQL中使用它们,例如:

mysql> SELECT UNIX_TIMESTAMP(NOW());
+-----------------------+
| UNIX_TIMESTAMP(NOW()) |
+-----------------------+
|            1311343579 |
+-----------------------+
1 row in set (0.00 sec)

mysql> SELECT FROM_UNIXTIME(1311343579);
+---------------------------+
| FROM_UNIXTIME(1311343579) |
+---------------------------+
| 2011-07-22 15:06:19       |
+---------------------------+
1 row in set (0.00 sec)

答案 3 :(得分:5)

如果intake_date是某种常见日期格式,您可以使用date()strtotime()

$mysqlDate = date('Y-m-d H:i:s', strtotime($_POST['intake_date']));

但是,这仅在strtotime()接受日期格式时才有效。有关支持的格式,请参阅it's doc page

答案 4 :(得分:5)

如果您的发布日期格式为dd / mm / yyyy,请使用以下内容:

$date = explode('/', $_POST['posted_date']);
$new_date = $date[2].'-'.$date[1].'-'.$date[0];

如果你有mm / dd / yyyy,只需更改第二行:

$new_date = $date[2].'-'.$date[0].'-'.$date[1];

答案 5 :(得分:3)

PHP 5.3具有从您指定的任何格式在DateTime对象上创建和重新格式化的功能:

$mysql_date = "2012-01-02";   // date in Y-m-d format as MySQL stores it
$date_obj = date_create_from_format('Y-m-d',$mysql_date);
$date = date_format($date_obj, 'm/d/Y');
echo $date;

输出:

01/02/2012

MySQL还可以在插入/更新时使用STR_TO_DATE()函数控制格式,在查询时使用DATE_FORMAT()

$php_date = "01/02/2012";
$update_query = "UPDATE `appointments` SET `start_time` = STR_TO_DATE('" . $php_date . "', '%m/%d/%Y')";
$query = "SELECT DATE_FORMAT(`start_time`,'%m/%d/%Y') AS `start_time` FROM `appointments`";

答案 6 :(得分:2)

function my_date_parse($date)
{
        if (!preg_match('/^(\d+)\.(\d+)\.(\d+)$/', $date, $m))
                return false;

        $day = $m[1];
        $month = $m[2];
        $year = $m[3];

        if (!checkdate($month, $day, $year))
                return false;

        return "$year-$month-$day";
}

答案 7 :(得分:1)

有几种选择。

将其转换为时间戳并按照strtotime()的其他帖子中的说明使用,或使用MySQL’s date parsing option

答案 8 :(得分:1)

如果您知道$ _POST [intake_date]中的日期格式,您可以使用explode来获取年,月和时间,然后连接以形成有效的mySql日期。例如,如果你得到类似12/15/1988的日期,你可以这样做

    $date = explode($_POST['intake_date'], '/');
    mysql_date = $date[2].'-'$date[1].'-'$date[0];

但是如果你有有效的约会日期('y-m-d',strtotime($ date));也应该工作