用于查找给定条件的新年的代码

时间:2013-06-15 08:53:03

标签: php calendar

我来看一篇有趣的帖子,我正在尝试为其编写代码

  

“你好,在一周中的两天中的哪一天,周六或周日,新年元旦经常下降”

参考:http://answers.yahoo.com/question/index?qid=20080731110435AAlyxd4

  

我找到了解决方案

     

日历每400年重复一次,但因为2100年不是闰年,所以分布不均匀。事实证明,星期日,星期二和星期五的发生次数最多为1 - 5 - 58,每400年。

   Monday - 56
   Tuesday - 58
   Wednesday - 57
   Thursday - 57
   Friday - 58
   Saturday – 56
   Sunday - 58

但是我没有得到,我如何在PHP中复制它?

对于那些认为我没有尝试过的人尝试下载投票我的问题。我已经测试了代码。

function DayOfNewYearsDay($beginYear,$endYear)
{
for($i=$beginYear;$i<$endYear;$i++)
{
$day = date("l", mktime(1, 1, 1, 1, 1, $i));
if(isset ($days[$day]))
$days[$day]++;
else
$days[$day]=1;
}
return $days;
}

echo  print_r(DayOfNewYearsDay(2000, 2400));

但是我没有回答星期天的回答

任何想法?

2 个答案:

答案 0 :(得分:1)

我不想用勺子喂你。所以给出一个简单的算法

  1. 创建数组A
  2. 数量范围1600至2000
    1. 创建日期为“Number-01-01”的日期时间对象。
    2. 获取日期时间的工作日
    3. 1
    4. 增加A [工作日]
  3. 只需打印数组。

答案 1 :(得分:1)

使用DateTime对象来解决mktime中的php限制:

function DayOfNewYearsDay ($beginYear, $endYear)
{
    for ($i = $beginYear; $i < $endYear; $i++) {
        $date = new DateTime;
        $date->setDate($i, 1, 1);
        $day = $date->format('l');
        if (isset ($days[$day]))
            $days[$day]++;
        else
            $days[$day] = 1;
    }

    return $days;
}

http://codepad.org/iGou6dk4