首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PHP DateInterval中计算总秒数

在PHP DateInterval中计算总秒数
EN

Stack Overflow用户
提问于 2010-07-05 07:51:49
回答 6查看 75.5K关注 0票数 106

计算两个日期之间的总秒数的最佳方法是什么?到目前为止,我已经尝试了以下内容:

代码语言:javascript
复制
$delta   = $date->diff(new DateTime('now'));
$seconds = $delta->days * 60 * 60 * 24;

然而,在当前的PHP5.3版本中,DateInterval对象的days属性似乎被破坏了(至少在Windows中,它总是返回相同的6015值)。我还试图以一种无法保留每个月的天数(四舍五入为30)、闰年等的方式来实现:

代码语言:javascript
复制
$seconds = ($delta->s)
         + ($delta->i * 60)
         + ($delta->h * 60 * 60)
         + ($delta->d * 60 * 60 * 24)
         + ($delta->m * 60 * 60 * 24 * 30)
         + ($delta->y * 60 * 60 * 24 * 365);

但我真的不喜欢使用这个半途而废的解决方案。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-07-05 08:01:00

你能不能不要比较time stamps

代码语言:javascript
复制
$now = new DateTime('now');
$diff = $date->getTimestamp() - $now->getTimestamp()
票数 231
EN

Stack Overflow用户

发布于 2014-08-06 06:24:41

此函数允许您从DateInterval对象中获取以秒为单位的总持续时间

代码语言:javascript
复制
/**
 * @param DateInterval $dateInterval
 * @return int seconds
 */
function dateIntervalToSeconds($dateInterval)
{
    $reference = new DateTimeImmutable;
    $endTime = $reference->add($dateInterval);

    return $endTime->getTimestamp() - $reference->getTimestamp();
}
票数 37
EN

Stack Overflow用户

发布于 2010-07-05 07:57:06

你可以这样做:

代码语言:javascript
复制
$currentTime = time();
$timeInPast = strtotime("2009-01-01 00:00:00");

$differenceInSeconds = $currentTime - $timeInPast;

time()返回自纪元时间(1970-01-01T00:00:00)以来的当前时间(以秒为单位),strtotime执行相同的操作,但基于给定的特定日期/时间。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3176609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档