是否有一个PHP函数,返回日期和时间在相同的格式MySQL函数NOW()?

我知道如何使用date()来做到这一点,但我在问是否有一个函数仅用于此。

例如,返回:

2009-12-01 00:00:00

当前回答

使用这个函数:

function getDatetimeNow() {
    $tz_object = new DateTimeZone('Brazil/East');
    //date_default_timezone_set('Brazil/East');

    $datetime = new DateTime();
    $datetime->setTimezone($tz_object);
    return $datetime->format('Y\-m\-d\ h:i:s');
}

其他回答

还有一个我觉得很好用的答案:

echo date('c');

// 2015-07-27T00:00:00+02:00

这是MySQL使用的ISO 8601日期(在PHP 5中添加)

Edit

MySQL 5.7默认不允许timezone在datetime中。您可以使用SQL_MODE=ALLOW_INVALID_DATES禁用该错误。详情请点击这里:https://stackoverflow.com/a/35944059/2103434。但这也意味着保存到数据库时时区将丢失!

默认情况下,MySQL使用系统的时区,只要PHP使用相同的时区就可以了。在我的例子中,CET / UTC+2。

这意味着如果我将2015-07-27T00:00:00+02:00插入到数据库中,只有2015-07-27T00:00:00将被存储(但这是正确的本地时间!)

当我把时间加载回PHP时,

$importedDate = new \DateTime('2015-07-27T00:00:00')

它会自动假设它是+02:00时区,因为它是默认的。打印这个将是正确的:

echo $importedDate->format('c');
// 2015-07-27T00:00:00+02:00

为了安全起见,总是在服务器上使用UTC,在MySQL和PHP中指定它,然后只在显示日期时将其转换为用户的语言环境:

date_default_timezone_set('UTC');
$importedDate = new \DateTime('2015-07-27T00:00:00+02:00');
echo $importedDate->format('c');
// 2015-07-27T00:00:00+02:00

$importedDate->setTimezone(new \DateTimeZone("America/New_York"));
echo $importedDate->format('c');
// 2015-07-26T18:00:00-04:00

你可以使用date函数:

date("Y-m-d H:i:s");

你可以使用正确格式的PHP日期函数作为参数,

echo date("Y-m-d H:i:s");

我喜欢user1786647发布的解决方案,我对它进行了一些更新,将timezone更改为一个函数参数,并添加了可选的支持,可以传递Unix时间或datetime字符串来用于返回的日期戳。

它还为运行PHP 5.3以下版本的用户提供了"setTimestamp"的回退:

function DateStamp($strDateTime = null, $strTimeZone = "Europe/London") {
    $objTimeZone = new DateTimeZone($strTimeZone);

    $objDateTime = new DateTime();
    $objDateTime->setTimezone($objTimeZone);

    if (!empty($strDateTime)) {
        $fltUnixTime = (is_string($strDateTime)) ? strtotime($strDateTime) : $strDateTime;

        if (method_exists($objDateTime, "setTimestamp")) {
            $objDateTime->setTimestamp($fltUnixTime);
        }
        else {
            $arrDate = getdate($fltUnixTime);
            $objDateTime->setDate($arrDate['year'], $arrDate['mon'], $arrDate['mday']);
            $objDateTime->setTime($arrDate['hours'], $arrDate['minutes'], $arrDate['seconds']);
        }
    }
    return $objDateTime->format("Y-m-d H:i:s");
}
date('Y-m-d H:i:s')

更多详情请点击这里:http://pl.php.net/manual/en/function.date.php