在MySQL中插入datetime时的PHP date()格式

时间:2010-02-07 00:27:02

标签: php mysql

如果我想将结果插入到MySQL date()类型列中,那么传递给PHP中datetime函数的正确格式是什么?

我一直在尝试date("Y-M-D G:i:s"),但每次只插入“0000-00-00 00:00:00”。

13 个答案:

答案 0 :(得分:614)

问题在于您使用的是'M''D',它们是文本表示形式,MySQL期望格式为2010-02-06 19:30:13的数字表示

尝试:date("Y-m-d H:i:s")使用数字等价物。

编辑:切换GH,虽然它可能没有影响,但您可能希望使用带有前导0的24小时格式。

答案 1 :(得分:101)

来自php的date() manual page的评论:

<?php $mysqltime = date ("Y-m-d H:i:s", $phptime); ?>

你的'Y'是正确的 - 这是一整年,但'M'是一个三个月的月份,而'm'是一个两位数的月份。与'D'而不是'd'相同的问题。 'G'是1或2位小时,其中'H'在需要时始终具有前导0。

答案 2 :(得分:40)

这是一个替代解决方案:如果您将PHP中的日期作为时间戳,则绕过使用PHP处理它并让DB使用FROM_UNIXTIME函数来处理它。

mysql> insert into a_table values(FROM_UNIXTIME(1231634282));
Query OK, 1 row affected (0.00 sec)

mysql> select * from a_table;

+---------------------+
| a_date              |
+---------------------+
| 2009-01-10 18:38:02 |
+---------------------+

答案 3 :(得分:23)

我使用以下PHP代码创建一个插入MySQL DATETIME列的变量。

$datetime = date_create()->format('Y-m-d H:i:s');

这将保留服务器的当前日期和时间。

答案 4 :(得分:10)

$date_old = '23-5-2016 23:15:23'; 
//Date for database
$date_for_database = date ("Y-m-d H:i:s", strtotime($date_old));

//Format should be like 'Y-m-d H:i:s'`enter code here`

答案 5 :(得分:9)

将时间戳格式化为MySQL DATETIME列:

strftime('%Y-%m-%d %H:%M:%S',$timestamp);

答案 6 :(得分:9)

我使用此功能(PHP 7)

function getDateForDatabase(string $date): string {
    $timestamp = strtotime($date);
    $date_formated = date('Y-m-d H:i:s', $timestamp);
    return $date_formated;
}

旧版本的PHP(PHP <7)

function getDateForDatabase($date) {
    $timestamp = strtotime($date);
    $date_formated = date('Y-m-d H:i:s', $timestamp);
    return $date_formated;
}

答案 7 :(得分:8)

使用PHP格式化MySQL日期时间

$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";

答案 8 :(得分:6)

如果不使用时间戳,则不需要使用PHP中的date()方法。如果dateposted是日期时间列,则可以插入当前日期:

$db->query("INSERT INTO table (dateposted) VALUES (now())");

答案 9 :(得分:1)

这让我很生气,寻找一个简单的答案。最后我创建了这个函数,似乎捕获了所有输入并提供了一个正确或至少有效且可检查的良好SQL字符串。如果它是1999-12-31,那可能是错的,但不会在MySQL中引发错误。

function MakeSQLDate($date) {
    if (is_null($date)) {
        //use 1999-12-31 as a valid date or as an alert
        return date('Y-m-d', strtotime('1999-12-31'));
    }

    if (($t = strtotime($date)) === false) {
        //use 1999-12-31 as a valid date or as an alert
        return date('Y-m-d', strtotime('1999-12-31'));
    } else {
        return date('Y-m-d H:i:s', strtotime($date));
    }
}

答案 10 :(得分:0)

在PHP7 +中使用DateTime类:

function getMysqlDatetimeFromDate(int $day, int $month, int $year): string {
    $dt = new DateTime();
    $dt->setTimezone(new DateTimeZone('UTC'));
    $dt->setDate($year, $month, $day);
    $dt->setTime(0, 0, 0, 0); // set tine to midnight

    return $dt->format("Y-m-d H:i:s");
}

答案 11 :(得分:0)

已接受答案的一个小附录:如果数据库datetime以UTC格式存储(我经常这样做),则应使用gmdate("Y-m-d H:i:s")而不是date("Y-m-d H:i:s")

或者,如果您希望让MySQL处理所有事情,如一些答案所示,我将插入MySQL的UTC_TIMESTAMP,并得到相同的结果。

注意:我理解有关当前时间的问题。

答案 12 :(得分:0)

这是一种更准确的方法。它将小数点放在秒后,以提供更高的精度。

$now = date('Y-m-d\TH:i:s.uP', time());

注意.uP

更多信息:https://stackoverflow.com/a/6153162/8662476