0

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

我需要这个号码的原因是因为我告诉客户我将在“每月的第四个星期三”交付一些东西。

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

知道我已经实现了此代码的反向操作可能会有所帮助:

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”?

4

3 回答 3

1

我会对此进行破解...我认为如果您将 PHP date() 函数返回的月份数除以 7 和 ceil(),它会给您正确的数字(我只是比较我的日历,所以不是 100% 保证的)。以下代码包含一个函数并在最后运行一个测试循环,产生以下输出

每月第2 个周一 每月
第 2 个周二 每月
第 2 个周三 每月第 3 个
周四 每月第 3 个
周五 每月第 3 个
周六每月第 3 个周日 每月
第3 个
周一 每月第 3 个
周二 每月第 3 个
周三每月第四
个星期四每月
第四个星期五每月
第四个星期六每月
第四个太阳每月
第四个星期一每月
第四个星期二

<?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);
   }
 ?>
于 2013-08-13T00:55:40.533 回答
1

像这样的表达式应该对您的代码进行最少的更改。

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

输出“4”。我相信你可以将它包装在一个函数中。

细胞()

于 2013-08-13T00:57:19.987 回答
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";
于 2013-08-13T01:04:13.190 回答