2015-07-16 3 views
0

Как вы решили бы проблему ниже?Найти диапазон дат с даты

В заданную дату я хотел бы найти диапазон учебного года. Академические годы всегда начинаются с первого сентября и продолжаются до последнего августа. Таким образом, на сегодня (2015-07-16) я хотел бы, чтобы функция вернула даты 2014-09-01 и 2015-08-31. Если бы я выполнил ту же функцию через три месяца (2015-10-16), я бы хотел вернуться к 2015-09-01 и 2016-08-31.

Спасибо,

/Томасу

- редактирование с просьбой @ Ананта-Кумар-Синг -

Пример функции в 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") 
     ); 
} 
+0

Вы можете понять свой вопрос, но мы не знаем. уточните, представив некоторый пример и ожидаемый результат. –

ответ

2

Я хотел бы использовать следующую логику: Вычтите 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 
+0

Хорошая идея @GordonLinoff, хотя если дата будет в сентябре, результат будет 1 год (2015-09-16 возвращает academy_start: 2014-09-01, academ_end: 2015-08-31 вместо academ_start: 2015-09- 01, academy: 2016-08-31). Я создам функцию в PHP, когда все будет работать. – Thomas

+1

@ Томас должен быть правильным, вы должны вычесть 8 месяцев, а не 9 – Rimas

+0

Спасибо, принято как решение! - Я добавил функцию PHP в свой вопрос. – Thomas