日付取得のロジックが理解できない状態です。
月初日の曜日を元にして第1 ○○曜日(取得したい曜日)の日付を求めます。
とあるのですが、
** $firstDay = $weekday - $weekdayOfFirst + 1;**
この$weekday(曜日の値)から$weekdayOfFirst(取得したい値)に1を加えたら
なぜ日付が求まるのかわかりません。
この**+1**とは何のためにあるのでしょうか?
php
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2<html> 3<head> 4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 5<title>第3月曜日を求めたい</title> 6</head> 7<body> 8<?php 9echo '<p>2017年7月の第3月曜日(海の日)を計算する</p>'; 10 11$year = 2017; 12$month = 7; 13$week = 3; 14$weekday = 2; // 月曜日 15 16echo '<ul>'; 17echo '<li>年: ' . $year . '</li>'; 18echo '<li>月: ' . $month . '</li>'; 19echo '<li>週番号: ' . $week . '</li>'; 20echo '<li>曜日、0(日曜)から6(土曜): ' . $weekday . '</li>'; 21echo '</ul>'; 22 23echo '<p>計算結果: '; 24$ret = getNthWeekday($year, $month, $week, $weekday); 25if ($ret !== FALSE) { 26 echo $ret . '日'; 27} else { 28 echo '該当する日付は存在しません'; 29} 30echo '</p>'; 31 32# getNthWeekday()関数 33# 指定年月の第○番目の○曜日の日付を返します。該当する日付が存在しない場合は 34# FALSEを返します。 35# 第1引数には年を指定します。 36# 第2引数には月を指定します。 37# 第3引数には週番号(第○週目)を指定します。 38# 第4引数には曜日を0(日曜)から6(土曜)の数値で指定します。 39function getNthWeekday($year, $month, $week, $weekday) { 40 // 週の指定が正しいか判定 41 if ($week < 1 || $week > 5) { 42 return FALSE; 43 } 44 // 曜日の指定が正しいか判定 45 if ($weekday < 0 || $weekday > 6) { 46 return FALSE; 47 } 48 49# 指定した年月の月初日(1日)の曜日を取得します。 50 $weekdayOfFirst = (int) date('w', mktime(0, 0, 0, $month, 1, $year)); 51 52# 月初日の曜日を元にして第1○曜日(取得したい曜日)の日付を求めます。 53 $firstDay = $weekday - $weekdayOfFirst + 1; 54 if ($firstDay <= 0) { 55 $firstDay += 7; 56 } 57 58# 第1○曜日に7の倍数を加算して、第○週の○曜日の日付を求めます。 59 $resultDay = $firstDay + 7 * ($week - 1); 60 61# 最後に計算結果が妥当な日付かどうかチェックします。 62 if (!checkdate($month, $resultDay, $year)) { 63 return FALSE; 64 } 65 66 return $resultDay; 67} 68?> 69</body> 70</html> 71 72
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。