当前位置: 首页 > 知识库问答 >
问题:

具体年份中两个日期之间的五月日是多少

巫马昆杰
2023-03-14

我正在解决以下任务

我有两个日期-$开始和$结束和目标年为$年。

日期是PHP DateTime对象,年份是字符串。

添加:日期来自MySql字段,格式为2017-02-01 15:00:00。。。地址2:如果结束日期为空,我使用今天的日期。。。

我需要计算出具体年份这两个日期之间有多少天。

我还需要一整天的时间,即使一天中的一分钟应该算作一整天。。。

我可以通过许多许多下面的如果来解决它。

我在示例中使用的值的预期结果是2016年为0天2017年为31天2018年为32天2019年为0天

但是有什么优雅的PHP函数可以帮助我吗?我所做的似乎是错误的方式,并给出了不好的结果-似乎它只计算全天...

请看我的代码

<?php
$diff = True;
$start = DateTime::createFromFormat('Y-m-d H:i:s','2017-12-01 23:05:00');
$end = DateTime::createFromFormat('Y-m-d H:i:s','2017-12-03 00:05:00');
$year = '2017';

// start date
if ($start->format('Y')<$year)
{
    $newstart = new DateTime('first day of January '. $year);
}

if ($start->format('Y')==$year)
{
    $newstart = $start;
}

if ($start->format('Y')>$year)
{
    $result = 0;
    $diff = False;
}

// end date
if ($end->format('Y')>$year)
{
    $newend = new DateTime('last day of December '. $year);
}

if ($end->format('Y')==$year)
{
    $newend = $end;
}

if ($end->format('Y')<$year)
{
    $result = 0;
    $diff = False;
}               

// count if diff is applicable
if ($diff)
{
    $result  = $newend->diff($newstart)->format("%a");
}

echo $result;
?>

共有2个答案

郤旭东
2023-03-14
    $d1 = strtotime('2017-05-15');
    $d2 = strtotime('2017-05-31');
    $div = 24 * 3600;
    echo abs(($d2 - $d1) / $div); // 16 days

只要确保只包含日期部分,就不必处理取整问题。

乜思淼
2023-03-14

但是有什么优雅的PHP函数可以帮助我吗?

阅读DateTime::diff()。它返回一个日期间隔对象,该对象包含天数(在$days中),通过检查$h$i$s的值,您可以判断是否必须增加它来对结果进行四舍五入。您还可以使用min()max()将时间间隔裁剪到所需的年份。

function getDays(DateTimeInterface $start, DateTimeInterface $end, $year)
{
    // Extend the start date and end date to include the entire day
    $s = clone $start;            // Don't modify $start and $end, use duplicates
    $s->setTime(0, 0, 0);
    $e = clone $end;
    $e->setTime(0, 0, 0)->add(new DateInterval('P1D'));  // start of the next day

    // Crop the input interval to the desired year
    $s = min($s, new DateTime("$year-01-01 00:00:00"));
    $year ++;
    $e = max(new DateTime("$year-01-01 00:00:00"), $end);     // start of the next year

    if ($e <= $s) {
        // The input interval does not span across the desired year
        return 0;
    }

    // Compute the difference and return the number of days
    $diff = $e->diff($s);

    return $diff->days;
}
 类似资料:
  • 我试图在我正在创建的C#应用程序中显示两个日期之间的年、月和日。(使用控制台进行测试) 我正在使用NodaTime来实现这一点,但在接下来的几个月里,我遇到了一些问题。 我已经阅读了这里的大部分问题和答案,但没有找到任何我可以从中受益的东西。 大多数时候函数工作但有时它不添加月如果天 我使用这个代码进行测试 (2017, 10, 16)和(2018, 1, 15)应该显示为3个月,但它们显示为2个

  • 我已经搜索了4个小时了,但是还没有找到一个用JavaScript计算两个日期(年、月和天)之间差异的解决方案,比如:2010年4月10日是3年、x月和y天之前。 有很多解决方案,但它们只提供了日、月或年的格式差异,或者它们不正确(意味着没有考虑一个月或闰年的实际天数,等等)。做那件事真的有那么难吗? 我看了一下: http://momentjs.com/->只能输出年、月或天的差异 http://

  • 我有两次约会。一个是以YYYYMMDD格式从其他应用程序的表中检索的,第二个日期是本地时间,我需要这两个日期之间的天数/月/年。 我试过了 但这给了我一些乱七八糟的数字。 变量$t=Fri Dec31 00:00:00 9999 变量$今天=Wed Feb19 14:40:55 2020 产出:25182094888 有什么想法吗?提前谢谢。

  • 问题内容: 如何计算JavaScript中两个Date()对象的差异,而只返回差异中的月数? 任何帮助将是巨大的:) 问题答案: “差异中的月数”的定义要经过很多解释。:-) 您可以从JavaScript日期对象获取年,月和日。根据您要查找的信息,可以使用这些信息来计算两个时间点之间有多少个月。 例如,现成的,它找出两个日期之间有多少 整月 ,而不计算部分月份(例如,不包括每个日期所在的月份):

  • 问题内容: 请参考以下示例,并请告诉我您的想法。 输出= 预期输出= 由于我在十一月只有15天,所以我应该去十一月 问题答案: 试试这个 或者

  • 问题内容: 我有两个约会: 开始日期: 结束日期: 在上述两个日期之间的91天持续时间,我希望我的代码返回3个月的持续时间,但以下方法仅返回2个月。有谁有更好的建议?还是你们认为这是Java 8中的错误?工期为91天,仅返回2个月。 非常感谢你的帮助。 方法1: 方法2: 方法3: 我尝试使用Joda库而不是Java 8 API,它可以工作。它会返回3,它看起来像Java持续时间月份的计算也使用了