自本月初以来的某个工作日有多少人?

时间:2013-08-13 00:11:57

标签: php date strtotime

我有一个约会,我想知道这个工作日有多少,从本月初开始。 (应该是1-5)

我需要这个号码的原因是因为我告诉客户我会在“本月的第4个星期三”提供一些东西。

我不需要只返回从预定义的开始日期开始的周数的东西(我能找到的每个例子就是这样)。

知道我已实现此代码的反向可能有所帮助,如下所示:

echo date('Y-m-d', strtotime("2013-08 4 Wednesday")); 
//returns the 4th Wednesday of the month namely "2013-08-28"

如何从“2013-08-28”开始获得“4”?

3 个答案:

答案 0 :(得分:1)

我会在这个问题上采取行动...我想如果你把PHP date()函数返回的月份数除以7和ceil(),它会给你正确的数字(I只是与我的日历相比,所以不是百分之百的保证)。以下代码包含一个函数,并在结尾处运行一个生成以下输出的测试循环

本月2日星期一 本月的第二个星期二 本月的第二个星期三 本月3日星期四 本月3日星期五 本月3日星期六 本月3日星期日 本月3日星期一 本月3日星期二 本月3日星期三 本月4日星期四 本月4日星期五 本月4日星期六 本月4日星期日 本月4日星期一 本月4日星期二

<?php

   function getDateString($time) {
     date_default_timezone_set ( "America/Los_Angeles" );
     //$time = time();
     $which_day = ceil((int) date('j', $time) / 7);
     $which_day_name = date('D', $time);

     $suffix = 'st';
     switch ($which_day) {
       case 2 : 
         $suffix = 'nd';
         break;
       case 3 :
       case 4 :
       case 5 :
         $suffix = 'th';
         break;
     }   

     return $which_day . $suffix . ' ' . $which_day_name . ' of the month ' . PHP_EOL;
   }


   $time = time();
   echo getDateString($time);
   foreach (range(0, 15) as $day) {
     $time = time() + ($day * 24 * 60 * 60);
     echo getDateString($time);
   }
 ?>

答案 1 :(得分:1)

这样的表达式应该只对代码进行最小的更改。

<?php
$d = date('d', strtotime("2013-08-28")); 
echo ceil($d/7).PHP_EOL;
?>

输出'4'。我相信你可以把它包装成一个函数。

ceil()

答案 2 :(得分:1)

或者,或者......

function getHowManyOfWeekday($d) { 
  $g = getdate($d);
  return ceil($g['mday'] / 7) + 1;
}

// Some tests ... 
echo getHowManyOfWeekday(strtotime("2013-08-07")). "\n";
echo getHowManyOfWeekday(strtotime("2013-08-11")). "\n";
echo getHowManyOfWeekday(strtotime("2013-08-18")). "\n";
echo getHowManyOfWeekday(strtotime("2013-08-19")). "\n";
echo getHowManyOfWeekday(strtotime("2013-08-31")). "\n";