1

今日が 2011 年 2 月 21 日 ( 月曜日 ) であるとします。今月の第三月曜日です。入力として日付が指定されている場合、その前に月曜日が何回経過したかを知るにはどうすればよいですか?

PHPで、今月から今日まで月曜日が何日経過したかを知るにはどうすればよいですか?

4

6 に答える 6

4
$now=time() + 86400;
if (($dow = date('w', $now)) == 0) $dow = 7; 
$begin = $now - (86400 * ($dow-1));

echo "Mondays: ".ceil(date('d', $begin) / 7)."<br/>";

私のために働く....

編集: 今日の月曜日も含む

于 2011-02-21T19:17:23.023 に答える
3

それはかなり単純な除算のように聞こえます。現在の日付から、先週の月曜日からの日数 (例: 水曜日 = -2) を引き、それを 7 で割り、ceil()切り上げます。

編集:これには、現在の月曜日が含まれ、21 日の月曜日には「3」が返されます。

于 2011-02-21T19:09:27.603 に答える
0
    <?php

 function mondays_get($month, $stop_if_today = true) {

$timestamp_now = time();

for($a = 1; $a < 32; $a++) {

    $day = strlen($a) == 1 ? "0".$a : $a;
    $timestamp = strtotime($month . "-$day");
    $day_code = date("w", $timestamp);
    if($timestamp > $timestamp_now)
        break;
    if($day_code == 1)
        @$mondays++;

}

return $mondays;
}

echo mondays_get('2011-02');

これがあなたに役立つことを願っています! 私はちょうどそれを巻き上げました。

「上記のコードのバグに注意してください。私はそれが正しいことを証明しただけで、試したわけではありません。」

正常に動作します

于 2011-02-21T19:44:35.480 に答える
0

これを試して...

//find the most recent monday (doesn't find today if today is Monday though)
$startDate = strtotime( 'last monday' );

//if 'last monday' was not this month, 0 mondays.  
//if 'last monday' was this month, count the weeks
$mondays = date( 'm', $startDate ) != date( 'm' ) 
         ? 0 
         : floor( date( 'd', $startDate ) / 7 );

//increment the count if today is a monday (since strtotime didn't find it)
if ( date( 'w' ) == 1 ) $mondays++;
于 2011-02-21T20:25:24.307 に答える
0

今までのすべての日をループして、月曜日を数えることができます。

$firstDate = mktime(0, 0, 0, date("n"), 1, date("Y"));
$now = time();
$mondays = 0;
for ($i = $firstDate; $i < $now; $i = $i + 24*3600) {
    if (date("D", $i) == "Mon")
        $mondays ++;
}

このスクリプトはテストしていません

于 2011-02-21T18:59:59.720 に答える
0

もう 1 つの方法は、今日が何曜日かを調べ、その月の最初の日を何らかのマジックで見つけ、それとstrtotime()現在の差を週単位で計算することです。Y-m-dフォーマットされたものを取り、date()その月の曜日を返す関数については、以下を参照してください。

注: strtotime"of" と月: "2011-02 の最初の月曜日" を含めて詳細にする必要があります。それ以外の場合は1 日進みます。エッジケースをテストしていたとき、これは私を苦しめました。

また、完全にオプションのディスプレイペッパーも追加しましたが、そのように感じました.

function nthWeekdayOfMonth($day) {

    $dayTS = strtotime($day) ;

    $dayOfWeekToday = date('l', $dayTS) ;

    $firstOfMonth = date('Y-m', $dayTS) . "-01" ;
    $firstOfMonthTS = strtotime($firstOfMonth) ;

    $firstWhat = date('Y-m-d', strtotime("first $dayOfWeekToday of $monthYear", $firstOfMonthTS)) ;
    $firstWhatTS = strtotime($firstWhat) ;

    $diffTS = $dayTS - $firstWhatTS ;
    $diffWeeks = $diffTS / (86400 * 7);

    $nthWeekdayOfMonth = $diffWeeks + 1;

    return $nthWeekdayOfMonth ;
}

$day = date('Y-m-d') ;
$nthWeekdayOfMonth = nthWeekdayOfMonth($day) ;

switch ($nthWeekdayOfMonth) {
    case 1: 
        $inflector = "st" ;
        break ;
    case 2: 
        $inflector = "nd" ;
        break ;
    case 3: 
        $inflector = "rd" ;
        break ;
    default:
        $inflector = "th" ;
}

$dayTS = strtotime($day) ;

$monthName = date('F', $dayTS) ;    
$dayOfWeekToday = date('l', $dayTS) ;

echo "Today is the {$nthWeekdayOfMonth}$inflector $dayOfWeekToday in $monthName" ;
于 2011-02-21T20:36:03.453 に答える