0

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

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

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

我找到了解决方案

日历每 400 年重复一次,但由于 2100 等不是闰年,因此分布不均匀。事实证明,星期日、星期二和星期五每 400 年出现最多的 1 月 1 日至 58 日。

   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));

但我没有得到 58 Sunday 作为答案

任何想法 ?

4

2 回答 2

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

于 2013-06-15T10:09:24.673 回答
1

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

  1. 创建一个数组 A
  2. 对于数字范围 1600 到 2000
    1. 创建日期“Number-01-01”的日期时间对象。
    2. 获取日期时间的星期几
    3. 将 A[weekday] 增加1
  3. 只需打印数组。
于 2013-06-15T09:06:26.037 回答