获取服务器的本地日期,时间和微秒

时间:2016-09-12 11:58:33

标签: php mysql

我使用此功能在本网站的一些帖子中建议(我不记得哪里了)

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帮助。

是否有人有想法,我必须在此功能中更改哪些内容才能使我的服务器在当地时间?

2 个答案:

答案 0 :(得分:1)

您是否看过DateTimeDateTimeZone类?

$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');