计算日期和一个月中某天之间的PHP差异

时间:2014-03-03 02:35:52

标签: php date datetime days

我正在研究php函数,根据一些变量进行数学计算以获得一年中的周数。

实际上,我有两个变量:

  1. 首先是日期变量(采用YYYY-MM-DD格式);
  2. second是“day-mark”变量(我有9个特定日期的列表 - > 2,6,8,10,14,17,21,23,27);
  3. 这是我设法组建的功能所以我可以获得一年中的一周:

    $duedt = explode("-", "YYYY-MM-DD");
    $date = mktime(0, 0, 0, $duedt[1], $duedt[2], $duedt[0]);
    $week = (int)date('W', $date); 
    

    作为上述代码的示例,如果我们将“YYYY-MM-DD”替换为“2014-02-09”,它将确定周数为6(女巫是正确的)

    现在,我的问题是:如何修改它,以便跟踪第二个变量(“天标”)

    对于“2014-02-09”日例子,我想要的是以下内容:

    • 如果“day-mark”为10(表示该月的第10天)=>星期 号码将是7
    • 如果“day-mark”是8(表示第8个) 月)=>周数为6

    关于如何修改功能的任何想法?

    提前谢谢!

    我最诚挚的问候, 迈克尔

2 个答案:

答案 0 :(得分:2)

我不确定你是否过于复杂。您不能只使用相同的方法提供日期并获取任何日期的周数吗?或者甚至更简单:

$date = new DateTime('2014-02-08');
echo (int) $date->format('W'); // 6

$date = new DateTime('2014-02-09');
echo (int) $date->format('W'); // 6

$date = new DateTime('2014-02-10');
echo (int) $date->format('W'); // 7

答案 1 :(得分:0)

function week_day_of_month($day,$month_num, $year) {
  $days_in_month = array(1=>31, 2 => 28,...);//doesn't account for leap, you need to
  $ts = strtotime(format_date($day,$month_num,$year));
  $week_num = date('W', $ts);
  $month_days = $days_in_month[$month_num];
  for ($i = 1;$i<=$month_days;$i++) {
    $ats = strtotime(format_date($i,$month_num, $year));
    if ($ats == $ts)
    break;
  }
 $day = $i;
 return array($day,intval($week_num));
}

format_date只需将m,d,y转换为strtotime可以解析的内容。 你可以通过在月内的几天内有两个数组来处理跳跃0 =&gt;非飞跃,1 =&gt;跳跃。计算飞跃很容易。并选择正确的数组