一尘不染

获取一个月的第一个或最后一个星期五

php

我正在尝试编写这样的日历功能

function get_date($month, $year, $week, $day, $direction)
{
    ....
}

$week是整数(1、2、3 …),$ day是一天(Sun,Mon,…)或数字,以较容易的一个为准。方向有些混乱,因为它进行了不同的计算。

举个例子

get_date(5, 2009, 1, 'Sun', 'forward');

它使用默认值,并获得5月的第一个星期日,即2009-05-03。如果我们打电话

get_date(5, 2009, 2, 'Sun', 'backward');

,它将返回5月的第二个最后一个星期日,即2009-05-24。


阅读 945

收藏
2020-05-29

共1个答案

一尘不染

也许可以使其更快。。。
代码非常有趣。

请注意,$direction前进1表示反向,-1表示后退-1 :)
此外,$day星期一的值从1开始,星期日的值从7结束。

function get_date($month, $year, $week, $day, $direction) {
  if($direction > 0)
    $startday = 1;
  else
    $startday = date('t', mktime(0, 0, 0, $month, 1, $year));

  $start = mktime(0, 0, 0, $month, $startday, $year);
  $weekday = date('N', $start);

  if($direction * $day >= $direction * $weekday)
    $offset = -$direction * 7;
  else
    $offset = 0;

  $offset += $direction * ($week * 7) + ($day - $weekday);
  return mktime(0, 0, 0, $month, $startday + $offset, $year);
}

我已经通过一些示例对其进行了测试,并且它似乎总是可以正常工作,不过请务必仔细检查;)

2020-05-29