是否有一个PHP函数,返回日期和时间在相同的格式MySQL函数NOW()?
我知道如何使用date()来做到这一点,但我在问是否有一个函数仅用于此。
例如,返回:
2009-12-01 00:00:00
是否有一个PHP函数,返回日期和时间在相同的格式MySQL函数NOW()?
我知道如何使用date()来做到这一点,但我在问是否有一个函数仅用于此。
例如,返回:
2009-12-01 00:00:00
当前回答
我喜欢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");
}
其他回答
还有一个我觉得很好用的答案:
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中,与MySQL的now()函数等价的逻辑是time()。
但是time()返回的Unix时间戳与MySQL DATETIME不同。
因此,必须将time()返回的Unix时间戳转换为MySQL格式。
你可以这样做: 日期(“Y-m-d H:我:”);
但是date()函数中的time()在哪里呢?它是第二个参数:事实上,你应该为date()提供一个时间戳作为第二个参数,但如果省略它,它将默认为time()。
这是我能想到的最完整的答案。
问候。
你可能会发现这很有用
new \DateTime()
我的回答是多余的,但如果你是强迫症,视觉导向,你只需要在你的代码中看到now关键字,使用:
date( 'Y-m-d H:i:s', strtotime( 'now' ) );