【问题标题】:Get Time Difference (I already did a research but i just dont know how to fix it)获取时差(我已经做过研究,但我只是不知道如何解决它)
【发布时间】:2015-03-01 17:39:49
【问题描述】:

我数据库中的时间戳是2015-03-03 00:25:39(注意type = timestamp和我最后正确的当前时间戳是2015-03-02 01:31:00。差异应该是23小时左右。但现在的问题是提供的答案在网上会给我 30 小时而不是 23 小时。我尝试过的一些代码如下:

$target 是目标日期

CODE 1:
$then = strtotime($target);
$diff = $then - time();
echo sprintf("%s days and %s hours left", date('z', $diff), date('G', $diff));

但这给了我 1 天零 6 小时的时间。所以30 hours

CODE2:
$seconds = strtotime("$target") - time();
echo $seconds; exit();
$days = floor($seconds / 86400);
$seconds %= 86400;
$hours = floor($seconds / 3600);
echo $hours;

它给了我类似107388 = 30 小时的信息。

CODE 3:
//Convert to date
$datestr= $target;//Your date
$date=strtotime($datestr);//Converted to a PHP date (a second count) 
//Calculate difference
$diff=$date-time();//time returns current time in seconds
$days=floor($diff/(60*60*24));//seconds/minute*minutes/hour*hours/day)
$hours=round(($diff-$days*60*60*24)/(60*60));

它给了我 6 个小时

我不知道我做错了什么,更像是我不知道该怎么做。 这是我现在的最后手段,因为我找不到对我有帮助的解决方案。 期待您的快速回复。

【问题讨论】:

  • “希望您能快速回复。” - 提示:不要在问题中使用它。我们没有截止日期。
  • 现在是凌晨 1 点 41 分,我真的很想尽快完成这项工作。在我们的项目中还有很多东西需要修复。所以,是的,我希望你能理解。

标签: php date timestamp date-math


【解决方案1】:

PHP 的 DateTime()(和 DateInterval())在日期数学方面要好得多,并返回正确的结果:

$date = new DateTime('2015-03-03 00:25:39');
$now  = new DateTime('2015-03-02 01:31:00');
$diff = $date->diff($now);
echo $diff->h, ' hours ', $diff->i, ' minutes';

Demo

【讨论】:

  • 但我使用变量作为日期。我将如何转换您的代码以适应这种情况?
  • 只需将变量放在日期所在的位置即可。这是基本的 PHP。
  • 如何设置当前时间的时间戳? $now = new DateTime(time());?
  • 什么都不放(即没有参数)。这将默认为“现在”。 $now = new DateTime();
  • 它给了我 5 小时 32 分钟。
【解决方案2】:

这是一个很晚的答案,但您的问题是一个很好的问题,将来可能会被搜索到。

这是online demo

// this doesn't appreciate any timezone declarations, you'll need to add this if necessary

$target="2015-03-03 00:25:39";  // declare your input
$then=new DateTime($target);    // feed input to DateTime
$now=new DateTime();         // get DateTime for Now
$diff=(array)$then->diff($now);      // calculate difference & cast as array
$labels=array("y"=>"year","m"=>"month","d"=>"day","h"=>"hour","i"=>"minute","s"=>"second");
$readable="";       // declare as empty string
// filter the $diff array to only include the desired elements and loop
foreach(array_intersect_key($diff,$labels) as $k=>$v){
    if($v>0){  // only add non-zero values to $readable
        $readable.=($readable!=""?", ":"")."$v {$labels[$k]}".($v>1?"s":"");
        //  use comma-space as glue | show value | show unit | pluralize when necessary
    }
}
echo "$readable";
// e.g. 2 years, 20 days, 1 hour, 10 minutes, 40 seconds

【讨论】:

  • @NotTestAcct 我设计了这个解决方案,不仅适用于您的情况,也适用于希望输出人类可读时差的任何人的情况。如果满足,请给它打一个绿色勾号,以便将您的问题从未回答的问题列表中删除。
猜你喜欢
  • 2021-07-10
  • 1970-01-01
  • 1970-01-01
  • 2015-12-17
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多