php以编程方式获取季节

时间:2015-07-07 21:56:22

标签: php php-5.3

我有一个包含历史数据的数据库,我想按季节按日期排序

例如。如果第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']的查询字符串来获得season = 2并且以编程方式知道查找2014-05-01 - 2014-08-31基于a开始一年。

最好的方法是什么?

到目前为止,我有这段代码

 <?
      $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 />";
 ?>

我需要确切地说明日期

1 个答案:

答案 0 :(得分: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>';


?>