【问题标题】:Find a date range from a date从日期中查找日期范围
【发布时间】:2015-10-05 19:29:01
【问题描述】:

你会如何解决下面的问题?

在给定日期,我想找到一个学年的范围。学年总是从九月一日开始,一直持续到八月末。因此,对于今天 (2015-07-16),我希望函数返回日期 2014-09-01 和 2015-08-31。如果我要在三个月内 (2015-10-16) 运行相同的功能,我希望返回 2015-09-01 和 2016-08-31。

谢谢,

/托马斯

-- @anant-kumar-singh 要求编辑--

PHP 中的示例函数:

function getAcademicYear($date) {
    // Logic code...
    return array($dateStart, $dateEnd);
}

调用getAcademicYear('2015-07-16'); 应该返回数组['2014-09-01','2015-08-31']

然后打电话给getAcademicYear('2015-10-16'); 应该返回数组,['2015-09-01','2016-08-31']

-- 编辑--

function findAcademicYear($date) {
    $dateTime = new DateTime($date);
    $dateTime->sub(new DateInterval("P8M"));
    return(array(
        "startDate" => date("Y-m-d", strtotime($dateTime->format("Y")."-08-31 + 1 day")),
        "endDate" => ($dateTime->format("Y") + 1)."-08-31")
        );
}

【问题讨论】:

  • 您可以理解您的问题,但我们不能。通过给出一些示例和预期结果来详细说明。

标签: php mysql date date-range


【解决方案1】:

我会使用以下逻辑:从日期减去 8 个月,提取年份,并将其用作年份的规范:

select date(concat(year(date_sub(date, interval 8 month)), '-09-01')) as academic_start,
       date(concat(1 + year(date_sub(date, interval 8 month)), '-08-31')) as academic_end

【讨论】:

  • 好主意@GordonLinoff,但如果日期是 9 月,结果将是 1 年(2015-09-16 返回 Academic_start: 2014-09-01, Academic_end: 2015-08-31学术开始:2015-09-01,学术结束:2016-08-31)。当一切正常时,我将在 PHP 中创建函数。
  • @Thomas 是正确的,你必须减去 8 个月,而不是 9
  • 谢谢,作为解决方案接受! - 我在我的问题中附加了 PHP 函数。
  • @Thomas 。 . .谢谢。
猜你喜欢
  • 2013-08-17
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多