PHP получает сезоны программно

1

У меня есть база данных с историческими данными, и я хотел бы отсортировать их по сезонам через даты

например. если сезон 1 начался 2014-01-01 - 2014-04-30, сезон 2 - 2014-05-01 - 2014-08-31, сезон 3 - 2014-09-01 - 2014-12-31, сезоны 4, 5 и 6 будет 2015-01-01 - 2015-04-30, 2015-05-01 - 2015-08-31 и 2015-09-01 - 2015-12-31.

Это действительно только год, начиная с 2014 года.

Я хотел бы сделать что-то так же просто, как использовать строку запроса $ _GET ['season'], чтобы получить сезон = 2 и программно знать, чтобы искать 2014-05-01 - 2014-08-31 на основе начального года.

какой лучший способ сделать это?

пока у меня этот код

 <?
      $season = $_GET['season'];

      $endmonth = $season * 4;
      $startmonth = $endmonth - 4;
      echo "startmonth: " . $startmonth . "<br />";
      echo date("Y-m-d H:i:s", strtotime("+" . $startmonth . " months", strtotime('2005-01-01 00:00:00'))) . "<br />";
      echo date("Y-m-d H:i:s", strtotime("+" . $endmonth . " months", strtotime('2005-01-01 00:00:00'))) . "<br />";
 ?>

Мне нужно, чтобы это было точно на датах

  • 0
    используйте month(timestamp) чтобы извлечь месяц, тогда это просто логика case / if, чтобы выяснить, какое это время года.
Теги:
php-5.3

1 ответ

1
Лучший ответ

Из "сезонного номера" в сезон вы можете использовать вычисление по модулю: $season = $theseasonnumber % 4

Если вы хотите узнать диапазон дат сезона, то начальный месяц будет заканчиваться на $endmonth = $season * 3 и начинаться с $startmonth = $endmonth - 2

Оттуда есть только какая-то логика и игра с функциями даты из PHP.

редактирование на основе редактируемого вопроса Я сделал вам функцию рабочего примера

<?php

function season_to_dates($season, $startyear = 2014)
{
    $year = floor($season / 4); // this are years on top of the startyear

    $actual_season = $season % 4; // returns the actual season
    if($actual_season == 0) $actual_season = 4; // little trick

    $endmonth = $actual_season * 3; 
    $startmonth = $endmonth - 2; 

    return array(
        'season' => $actual_season,
        'start' => date("Y-m-d", mktime(0,0,0,$startmonth,1,$year+$startyear)),
        'end'   => date("Y-m-t", mktime(0,0,0,$endmonth,1,$year+$startyear))
    );
}


if(!isset($_GET['season'])) $season = rand(1,40);
else $season = $_GET['season'];

echo 'Result for season ' . $season . '<pre>';
print_r(season_to_dates($season));
echo '</pre>';


?>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню