【问题标题】:How to display total number of days between two dates using php如何使用php显示两个日期之间的总天数
【发布时间】:2018-11-19 11:48:17
【问题描述】:

我想计算两个日期之间的总天数。

注意:我不是在说两个日期之间的区别

我在 google 和 Stack Overflow 上找到了很多答案。我在这里分享

$now = time(); // or your date as well
$your_date = strtotime("2018-06-01");
$datediff = $now - $your_date;
echo round($datediff / (60 * 60 * 24));

输出为 9

$now = strtotime("2018-06-09");
$your_date = strtotime("2018-06-01"); 
$datediff = $now - $your_date;
echo $numberDays= round($datediff / (60 * 60 * 24));

输出为 8

$dStart = new DateTime('2018-06-01');
$dEnd  = new DateTime('2018-06-09');
$dDiff = $dStart->diff($dEnd);
echo $dDiff->days;

输出为 8

$date1=date_create("2018-06-01");
$date2=date_create("2018-06-09");
$diff=date_diff($date1,$date2);
echo $diff->format("%a");

输出为 8

$startTimeStamp = strtotime("2018-06-01");
$endTimeStamp = strtotime("2018-06-09");
$timeDiff = abs($endTimeStamp - $startTimeStamp);
$numberDays = $timeDiff/86400;  // 86400 seconds in one day
// and you might want to convert to integer
echo $numberDays = intval($numberDays); 

输出为 8

对我来说正确答案是第一个 9,因为它显示了从 1 到 9 的总天数,没有区别。

我只想知道如何获取计数,因为我不想使用 time(),因为它正在使用当前日期。

例如:如果我选择第一个日期 2018-05-01 和我的第二个日期 2018-05-31。所以总天数是 31 天,而不是 30 天。

示例: 我正在做一个与工作日和薪水有关的项目。所以员工将选择日期。例如。我是员工,在 5 月的最后一个月,我选择了日期 2018-05-01 和 2018-05-31,所以我必须显示总工作日。所以根据我工作 31 天的日期并使用上面的代码在我得到 30 天的问题中。

希望你能理解我的问题。你能帮我解决这个问题吗?

【问题讨论】:

  • 只需在计算输出中添加一个
  • @Andreas,在一月份,总天数是 31。所以你从 2018-01-01 到 2018-01-31 开始工作,所以如果我检查不同,它会显示 30 但是我在公司工作了 31 天。所以我需要输出 31。希望你明白这一点。
  • 是的,如果你从计算中得到 30,你只需加 1 就得到 31。为什么要让它变得比需要的更难?
  • @Andreas,我正在做一个与工作日和薪水有关的项目。所以员工将选择日期。例如。我是员工,在 5 月的最后一个月,我选择了日期 2018-05-01 和 2018-05-31,所以我必须显示总工作日。
  • 所以根据我工作 31 天的日期并在问题中使用上面的代码,我得到了 30 天。对此还有什么想法吗?

标签: php html date


【解决方案1】:

你可以试试这个:

  <?php
    $start_date = "2020-12-24";
    $end_date   = "2020-12-31";
    $dateDiff   = strtotime($end_date) - strtotime($start_date);
    $numOfDays  = $dateDiff / 86400;
    echo $numOfDays;
  ?>

输出:7

【讨论】:

    【解决方案2】:

    在这里,我在第一个程序 php time(); 中得到了您的解决方案;函数会根据当前时间(以毫秒为单位)动态变化(在 PHP 中,您可以简单地调用 time() 以获取自 1970 年 1 月 1 日 00:00:00 GMT 以来经过的时间(以秒为单位))这里您使用 round 函数在下午 12 点之后获取舍入值如果你的计算将增加超过 8.5,你会得到一个四舍五入的值,即 9

    这里简单解释Getting unix timestamp in milliseconds in PHP5 and Actionscript3

    在其余程序中,您正在使用不受系统时间影响的静态时间或自定义时间

        $now = time(); // or your date as well
        $your_date = strtotime("2018-06-01");
        $datediff = $now - $your_date;
        echo round($datediff / (60 * 60 * 24));
    

    在中午 12 点之前试试上面的程序,也许你会得到答案

    【讨论】:

    • 一月份,总天数是 31。所以你从 2018-01-01 到 2018-01-31 开始工作,所以如果我检查不同,它会显示 30 但我工作了 31在公司的日子。所以我需要输出 31。
    • 我必须从用户那里获取价值,而不是从 time() 函数。 Time() 将显示当前日期。
    • 不仅是日期,它还是日期和时间的整数形式
    【解决方案3】:

    首先编译并打印$now,几分钟后写出来第二次编译并打印$now,你会有不同的

    【讨论】:

      【解决方案4】:
      <?php
      $date1=date_create("2013-03-15");
      $date2=date_create("2013-12-12");
      $diff=date_diff($date1,$date2);
      echo $diff->format("%R%a days");
      ?>
      

      产出:272 天。

      【讨论】:

      • 如果您使用我添加到问题中的日期和时间以便于轻松、快速和快速地理解,这对我有好处
      • 函数 date_diff(datetime1,datetime2,absolute);成功时返回一个 DateInterval 对象,表示两个日期之间的差异。 FALSE 失败
      【解决方案5】:

      你可以试试这个-

      $dateOne = new DateTime("01-01-2018");
      $dateTwo = new DateTime("09-06-2018");
      
      echo $diff = $dateTwo->diff($dateOne)->format("%a");
      

      输出- 159

      【讨论】:

      • 你能解释一下吗?
      • DateTime::diff -- DateTimeImmutable::diff -- DateTimeInterface::diff -- date_diff -- 返回两个 DateTime 对象之间的差异
      • 仅供参考,如果您为符号添加 %r,这在技术上将输出负数。如果这是一个“开始”和“结束”的情况,你希望将其翻转为: $dateOne->diff($dateTwo)->format("%a");
      【解决方案6】:

      使用DateTime 类并通过diff() 方法比较它们。 $date1-&gt;diff($date2)。输出将为您提供准确的天数:

      $date1 = new DateTime('2018-01-01');
      $date2 = new DateTime('2018-02-15');
      
      print_r($date1->diff($date2));
      

      输出:

      DateInterval Object 
      ( 
      [y] => 0 
      [m] => 1 
      [d] => 14 
      [h] => 0 
      [i] => 0 
      [s] => 0 
      [f] => 0 
      [weekday] => 0 
      [weekday_behavior] => 0 
      [first_last_day_of] => 0 
      [invert] => 0 
      [days] => 45 
      [special_type] => 0 
      [special_amount] => 0 
      [have_weekday_relative] => 0 
      [have_special_relative] => 0 
      )
      

      【讨论】:

      • 我需要一个 46 的答案,而不是 45,因为一月份的总天数是 31 天,工厂是 15 天,所以 31+15=46
      • 您可以修改第一个日期,如果您需要包含开始日期作为计数:$date1-&gt;modify('-1 day');
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 2015-07-08
      • 1970-01-01
      • 2011-08-29
      相关资源
      最近更新 更多