如何在不更改 date_default_timezone_set 的情况下获取任何州午夜的当前秒数,无论我处于哪个州

问题描述 投票:0回答:1

由于某种原因,页面顶部的代码中有

date_default_timezone_set('America/Belize');
,我不想更改它。

为了从午夜获取当前的伦敦秒(或任何其他时区),无论我处于什么状态,我尝试使用 StackOverflow 上找到的一个小函数(只是稍微修改一下):

function seconds_from_midnight($iana_timezone = 'Europe/London'){
    $time_now = time(); //UNIX TIMESTAMP (IT'S THE SAME EVERYWHERE)
    $date = new DateTime(); 
    $date->setTimestamp( $time_now );
    $date->setTimezone(new DateTimeZone($iana_timezone));
    $date->modify('today midnight');
    $midnight_time = $date->getTimestamp();
    $seconds_since_midnight = $time_now - $midnight_time;
    return $seconds_since_midnight;
}

然后我通过以下方式查看伦敦的时间:

$r = seconds_from_midnight();
echo 'Time London now: '.date('H:i:s', $r).'<br>';

[如果你是伦敦人现在看时钟,这应该是正确的时间]

现在看看出现的问题:

由于某些原因,给我返回了错误的时间(我不知道为什么,但我认为它位于页面开头的

date_default_timezone_set
,我不想更改)。

我不住在美国/伯利兹,PHP 服务器位于另一个州(我不知道是哪个州,老实说我不在乎)。

那么,在这种情况下如何从伦敦(或其他州)的午夜开始获取当前秒数?

php time timezone unix-timestamp iana
1个回答
0
投票

您可以根据午夜开始的秒数来创建日期,但此方法的第二个参数是时间戳。这意味着您正在创建 1970 年的日期。如果您只想显示秒数,请不要使用

date()
打印它。

© www.soinside.com 2019 - 2024. All rights reserved.