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

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


当前回答

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

其他回答

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

我使用下面的PHP代码创建一个变量,将其插入到MySQL DATETIME列中。

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

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

为了寻找一个简单的答案,我快疯了。最后,我让这个函数似乎捕获所有输入,并给出一个正确或至少有效和可检查的良好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));
    }
}

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

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

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

从php的date()手册页的注释:

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

你把“Y”写对了——那是一整年,但是“M”是一个有三个字符的月份,而“M”是一个有两位数字的月份。把D写成D也是一样。“G”是1位或2位小时,其中“H”在需要时总是以0开头。