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

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


当前回答

问题是,你正在使用'M'和'D',这是一个文本表示,MySQL期望一个数字表示的格式2010-02-06 19:30:13

试试:date('Y-m-d H:i:s'),它使用了数字等量。

edit:将G切换为H,虽然它可能没有影响,但你可能想使用24小时格式,前导0。

其他回答

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

如果不使用时间戳,就没有必要使用PHP中的date()方法。如果dateposting是一个datetime列,你可以像这样插入当前日期:

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

问题是,你正在使用'M'和'D',这是一个文本表示,MySQL期望一个数字表示的格式2010-02-06 19:30:13

试试:date('Y-m-d H:i:s'),它使用了数字等量。

edit:将G切换为H,虽然它可能没有影响,但你可能想使用24小时格式,前导0。

我使用这个函数(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;
}

IMO除了在前面的回答中提供的date()函数选项外,您还应该仔细考虑其使用的服务器时区设置,这可能与数据库设置不同。如果需要UTC时区,那么gmdate()函数(它具有与date()相同的选项)对于特定情况会更方便。