【问题标题】:PHP Timestamp Changes before midnight to next dayPHP时间戳在午夜之前更改到第二天
【发布时间】:2019-05-29 06:42:19
【问题描述】:

我尝试了不同的方法来让我的时间戳在午夜更改为第二天,但我没有任何运气。我正在使用 Wordpress,并将默认位置更改为山区时间。我想这两个会一起交流,但我没有运气。

<?php current_time(timestamp);   echo date('l, F jS Y'); ?>

<?php ini_set('date.timezone', 'America/Denver');
echo date('l, F jS Y'); ?>

我现在正在尝试的第一个,第二个 sn-p 是我之前使用的。

这很难调试,因为我必须等到晚上才能看到日期是否会提前到第二天。不是最优的。感谢您对此提供的任何帮助。

【问题讨论】:

  • 早是什么意思。 10 分钟还是 6 小时?
  • 首先使用此函数date_default_timezone_get() 获取您当前的默认时区,我认为您当前的时区是美国/丹佛
  • “让我的时间戳在午夜更改为第二天” 是什么意思?中午12点时,时间将开始正常在第二天。你能解释一下你想要达到的目标吗?
  • 按照 ttrasn 的建议,首先获取您当前的时区,然后确保它没有被其他配置文件覆盖。为当前脚本设置时区: date_default_timezone_set('America/Denver');注意:山............美国/丹佛; Mountain no DST ...美国/凤凰城
  • 我的意思是日期在午夜前大约 6 小时更改......所以我试图让它准确地在山区时区的午夜更改。

标签: php wordpress timestamp


【解决方案1】:

您的服务器中似乎没有正确配置时区。只需输出完整的日期和时间,您不必等待午夜才能得到正确和错误时间之间的差异。

关于 php 中的时间和时区,你必须知道两个事实:

  • 时间戳始终为 GMT,不取决于时区
  • 日期输出是时间戳格式,取决于时区

了解这一点,您可以轻松调试程序。

<?php 

echo date('r').PHP_EOL; 
// timezone not configured
// Wed, 02 Jan 2019 16:11:36 +0000
echo date('U').PHP_EOL; 
// 1546445496
ini_set('date.timezone', 'America/Denver');
echo date('r').PHP_EOL;
// Wed, 02 Jan 2019 09:11:36 -0700
echo date('U').PHP_EOL; 
// 1546445496 , same as above

从这一点上你有很多解决方案,我推荐以下两种:

  • 把它放在你的 php.ini 文件中:

     date.timezone="America/Denver"
    
  • 如果无法编辑 php.ini,请使用 DateTime 对象手动转换。

     $d = new DateTime();
     $d->setTimezone(new DateTimeZone('America/Denver'));
     echo $d->format('r').PHP_EOL;
     // Wed, 02 Jan 2019 09:11:36 -0700
    

【讨论】:

  • 谢谢你!一个问题...我添加了 DateTime 对象,时间大约提前 6 小时。它看起来像它的渲染世界时间而不是本地时间。我错过了一步吗?
  • 让它与您提供的第二个 sn-p 一起工作。非常感谢!
  • @TractionW 检查服务器是否提供了有效的通用时间值,格式化时间的最后一个值是取决于本地时间的时间偏移量(09:11:36 - 0700)
【解决方案2】:

返回准确时区差异以及更新时间的函数 包括夏令时。请随时联系以获取更多信息 帮助。

/*
 * @function minusonesecond return timezone
 * @param integer $timezonedifference       optional
 * @return string time
 * @Comment Get User TimeZone Difference
 */
public function minusonesecond($timezonedifference=""){
    $i=0;
    $time = explode(":", $timezonedifference);
    if($time[0]<0){$sign=-1; }else {$sign =1;}
    foreach ($time as $endtmp){
        $endtmp = $sign*$endtmp;
        if($i>0){
            $tmp[$i] = (($endtmp*1==0) ?  59: ($endtmp-1));
        } else $tmp[$i] = ($endtmp-1);
        $i++;
    }
    $ret = ($sign)* $tmp[0].":".(($tmp[1]>9)?$tmp[1]:"0$tmp[1]").":".(($tmp[2]>9)?$tmp[2]:"0$tmp[2]");
    return $ret ;
}

/**
 * @function getusertimezonedifference return timezone difference with UTC
 * @param integer $timezonedifference       optional
 * @return string time
 * @Comment Get User TimeZone Difference
 */
public function getusertimezonedifference($user_id = "", $changetoUTC=false, $flg_array=false)
{
    $user = $this->User->find("first", array("conditions" => array("User.user_id" => $user_id)));
    $timezone = $user["Timezone"]["timezone_name"];
    $dayLightFlag = false;
    $system_timezone = date_default_timezone_get();
    $local_timezone = "UTC";
    date_default_timezone_set($local_timezone);
    $local = date("Y-m-d H:i:s");
    date_default_timezone_set("GMT");
    $gmt = date("Y-m-d H:i:s");
    date_default_timezone_set($timezone);
    $required = date("Y-m-d H:i:s");
    date_default_timezone_set($system_timezone);
    $diff1 = (strtotime($gmt) - strtotime($local));
    $diff2 = (strtotime($required) - strtotime($gmt));
    if($changetoUTC) {$diff2 =  (-1*$diff2);}
    // extract hours
    $hours = floor($diff2 / (60 * 60));
    // extract minutes
    $divisor_for_minutes = $diff2 % (60 * 60);
    $minutes = floor($divisor_for_minutes / 60);
    // extract the remaining seconds
    $divisor_for_seconds = $divisor_for_minutes % 60;
    $seconds = ceil($divisor_for_seconds);

    //create string HH:MM:SS
    $ret = $hours.":".(($minutes>9)?$minutes:"0$minutes").":".(($seconds>9)?$seconds:"0$seconds");
    if($flg_array){$ret = array($hours, (($minutes>9)?$minutes:"0$minutes"), ($seconds>9)?$seconds:"0$seconds");}
    return ($ret);
}

/**
 * @function getPSTtimezonedifference return timezone difference with UTC AND PST
 * @param  $changetoUTC       optional
 * @param $flg_array       optional
 * @return string time
 * @Comment Get User TimeZone Difference
 */
public function getPSTtimezonedifference($changetoUTC=false, $flg_array=false)
{
    $timezone = "America/Los_Angeles";
    $dayLightFlag = false;
    $system_timezone = date_default_timezone_get();
    $local_timezone  = "UTC";
    date_default_timezone_set($local_timezone);
    $local = date("Y-m-d H:i:s");
    date_default_timezone_set("GMT");
    $gmt = date("Y-m-d H:i:s");
    date_default_timezone_set($timezone);
    $required = date("Y-m-d H:i:s");
    date_default_timezone_set($system_timezone);
    $diff1 = (strtotime($gmt) - strtotime($local));
    $diff2 = (strtotime($required) - strtotime($gmt));
    if($changetoUTC) {$diff2 =  (-1*$diff2);}
    // extract hours
    $hours = floor($diff2 / (60 * 60));
    // extract minutes
    $divisor_for_minutes = $diff2 % (60 * 60);
    $minutes = floor($divisor_for_minutes / 60);
    // extract the remaining seconds
    $divisor_for_seconds = $divisor_for_minutes % 60;
    $seconds = ceil($divisor_for_seconds);

    //create string HH:MM:SS
    $ret = $hours.":".(($minutes>9)?$minutes:"0$minutes").":".(($seconds>9)?$seconds:"0$seconds");
    if($flg_array){$ret = array($hours, (($minutes>9)?$minutes:"0$minutes"), ($seconds>9)?$seconds:"0$seconds");}
    return ($ret);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2019-12-07
    • 2012-01-22
    • 2020-02-22
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多