我使用此功能在本网站的一些帖子中建议(我不记得哪里了)
function udate($format, $utimestamp = null) {
if (is_null($utimestamp))
$utimestamp = microtime(true);
$timestamp = floor($utimestamp);
$microseconds = round(($utimestamp - $timestamp) * 1000000);
return date(preg_replace('`(?<!\\\\)u`', $microseconds, $format), $timestamp);
}
在搜索和试验了很多代码之后,我想得到服务器的日期,时间和微秒,这样我就可以将它写入我的MySql数据库,这是唯一对我有用的解决方案。
唯一的问题是我得到了UTC时间而不是服务器的本地时间,我已经使用timedatectl set-local-rtc 1
命令将我的服务器时间设置为本地,但它没有#39 ; t帮助。
是否有人有想法,我必须在此功能中更改哪些内容才能使我的服务器在当地时间?
答案 0 :(得分:1)
您是否看过DateTime和DateTimeZone类?
$date = new \DateTime('now', new \DateTimeZone('[SOURCE TZ]'));
$date->setTimezone(new \DateTimeZone('[DEST TZ]'));
return $date->format('Y-m-d h:i:s.u');
您可以按上述方式设置源时区和目标时区。您可以完全没有源时区。
要将此应用于您的代码,您可能需要执行类似
的操作\DateTime::createFromFormat('U.u', microtime(true))
答案 1 :(得分:0)
这是我现在的新功能:
function udate($format) {
$now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));
$localTime = $now->setTimezone(new \DateTimeZone('Europe/Berlin'));
return $now->format($format);
}
我用它来举例如echo udate('Y-m-d H:i:s.u');