繁体   English   中英

将 php 日期转换为 mysql 格式

[英]convert php date to mysql format

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

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

如何将其转换为 MySql 格式 0000-00-00 以包含在 db 中。 是不是这样的:date('Ymd' strtotime($date);。我问的原因是因为我尝试了这个的变体,但我似乎无法让它工作。显示为 1970 或其他一些变体非常感谢

$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;

Output:

2009-07-02 00:07:00

该站点有两个非常简单的解决方案 - 只需检查代码,我提供了描述以防您需要它们 - 为您节省了一些点击。

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

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

$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...";

您正在寻找 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)

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

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

但是,这仅在strtotime()接受日期格式时才有效。 有关支持的格式,请参见它的文档页面

如果您有 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];

PHP 5.3 具有在 DateTime object 以您指定的任何格式创建和重新格式化的功能:

$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() function 和查询时使用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`";
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";
}

有几种选择。

将其转换为时间戳并按照其他帖子中的说明使用strtotime()或使用MySQL 的日期解析选项

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

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

虽然如果你有有效的日期 date('ym-d', strtotime($date)); 也应该工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM