【问题标题】:Check if a date is between two months, where the year ends in August检查日期是否在两个月之间,一年在八月结束
【发布时间】:2012-12-18 19:19:03
【问题描述】:

我在创建日期算法(使用 DateTime 对象)时遇到困难,该算法检查日期是否位于两个给定月份之间(将年末视为 8 月 31 日)。

所以年初被认为是 9 月 1 日,XXXX,年底被认为是 8 月 31 日 XXXX+1

$today = new DateTime('now');

我需要查看日期是否在 6 月和 5 月之间。

例如,如果是 2009 年 12 月
日期是否在 2009 年 6 月和 2010 年 5 月之间? (是)

如果日期是 2014 年 4 月
日期是否在 2013 年 6 月和 2014 年 5 月之间? (是)

如果日期是 2014 年 7 月
日期在 2013 年 6 月和 2014 年 5 月之间。(否)

【问题讨论】:

  • 你为什么不直接使用一个月的数字表示来比较呢?
  • @BryanAllo,所以问题是我还需要确定它是哪一年。如果日期为 2014 年 8 月 1 日,则为 2013-2014 年。如果日期为 2015 年 9 月 4 日,则为 2015-2016 年
  • 为什么不转换为 UNIX 时间戳并进行比较?
  • @kylex - 是的。我的意思是基本上使用 date_add() 方法并将您的日期偏移 4 个月以使其与标准日历保持一致,然后进行比较/检查。

标签: php datetime


【解决方案1】:

DateTime 对象可以像两个整数一样进行比较:

$date1 = new DateTime('December 2012');
$date2 = new DateTime('June 2012');
$date3 = new DateTime('May 2013');

if ($date1 > $date2 && $date1 < $date3)
{
     // place your code here
}

【讨论】:

  • 但您示例中的年份是静态的。
  • 这只是一个例子。您可以根据需要更改这些值。
  • 这是我遇到的大问题,如何动态确定年份值?
【解决方案2】:

找到一个让我开始的答案:

https://stackoverflow.com/a/11937688/36545

function academicYear(DateTime $userDate) {
    $currentYear = $userDate->format('Y');
    $cutoff = new DateTime($userDate->format('Y') . '/08/31 23:59:59');
    if ($userDate < $cutoff) {
        return ($currentYear-1) . '/' . $currentYear;
    }
    return $currentYear . '/' . ($currentYear+1);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 2016-12-31
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多