progyu88

YouTubeの投稿体験談、芸能情報とスマホアプリを書きます。

phpでカレンダー作成。日付と曜日をセットで表示するのに、間違った3つのミス。

Amazon.co.jp: よくわかるPHPの教科書: たにぐち まこと: 本phpの勉強をしています。

この本のP92「曜日を繰り返し出力する」というコーナーで紹介されているカレンダーの作り方を読んで「これめんどくさい。別のやり方ないの?」と思いました。

そこで、復習も兼ねてphpでカレンダーを作成することにしました。完成するまでに、大きく3つの間違いをしました。完成版のあとに、紹介します。

 

完成版。

2014年 10月のカレンダー 

1日(水) 

2日(木) 

3日(金) 

4日(土) 

5日(日) 

6日(月) 

7日(火) 

8日(水) 

9日(木) 

10日(金) 

11日(土) 

12日(日) 

13日(月) 

14日(火) 

15日(水) 

16日(木) 

17日(金) 

18日(土) 

19日(日) 

20日(月) 

21日(火) 

22日(水) 

23日(木) 

24日(金) 

25日(土) 

26日(日) 

27日(月) 

28日(火) 

29日(水) 

30日(木) 

31日(金) 

 

コード 

<?php 

$todayYear = date('Y'); 

$todayMonth = date('n'); 

$todayDay = date('j'); 

$youbi = array('日','月','火','水','木','金','土');//曜日はdate(w)で0(日)~6(金)で配列 

 

print(date('Y年 n月') .'のカレンダー<br>'); 

for($day = 1; $day <= date('t'); $day++){//日にちと曜日をセットで繰り返す 

$week = date('w',mktime(0, 0, 0, $todayMonth, $todayDay++, $todayYear)); 

print($day .'日' . '('. $youbi[$week] .')<br>'); 

?> 

 

正しく表示できたのには、まずはdate('j')で今日の日付を表示する場所をきちんと設定できたこと。それと、mktimeの日数を足していくことでした。

答えは、日付が次の日、翌々日~になるように$todayDay++と、足し算にすることでした。

解決(*^_^*) 

 

間違い1,今日の日付しか表示されない。 

2014年 10月のカレンダー 

1日(水) 

2日(水) 

3日(水) 

4日(水) 

5日(水) 

6日(水) 

7日(水) 

8日(水)

 

コード 

<?php  

$youbi = array('日','月','火','水','木','金',);//曜日はdate(w)で0(日)~6(金)で配列 

print(date('Y年 n月') .'のカレンダー<br>'); 

for($day = 1; $day <= date('t'); $day++){//日にちと曜日をセットで繰り返す 

print($day . '日('. $youbi[date('w')] .')<br>'); 

?> 

 

 間違いは、date('w')を配列にしかしていないこと。配列にしても、本来が今日の曜日を表示するだけだから、水曜日しか表示されなかった。(2014年10月14日にコードを書きました。)

php 曜日」で検索すると、date(w)がヒットしますが注意してください。そこで、今日の曜日以外にも表示させるために、date(w)を配列以外にmktimeというやり方で詳しく設定してみたのが、次。

 

間違い2、金曜日しか表示されない。

2014年 10月のカレンダー
1日(金)
2日(金)
3日(金)
4日(金)
5日(金)
6日(金)
7日(金)
8日(金)
9日(金)

コード

<?php
$todayYear = date('Y');
$todayMonth = date('n');
$todayDay = date('t');
$youbi = array('日','月','火','水','木','金','土');//曜日はdate(w)で0(日)~6(金)で配列

print(date('Y年 n月') .'のカレンダー<br>');
for($day = 1; $day <= date('t'); $day++){//日にちと曜日をセットで繰り返す
$youbiWeek = date('w',mktime(0,0,0,$todayMonth,$todayDay,$todayYear));
print($day .'日' . '('. $youbi[$youbiWeek] .')<br>');
}
?>

 

間違いは、date('t')。これは、ある月の最終日を表示させます。だから、mktimeで今日の日付を設定したいのに、10月の最終日31日 金曜日を設定することになってしまいました。正しくは、date('j')を使います。

 

間違い3 今日の日付しか表示されない

2014年 10月のカレンダー 

1日(水)
2日(水)
3日(水)
4日(水)
5日(水)
6日(水)
7日(水)
8日(水)

 

コード 

<?php 

$todayYear = date('Y'); 

$todayMonth = date('n'); 

$todayDay = date('j'); 

$youbi = array('日','月','火','水','木','金','土');//曜日はdate(w)で0(日)~6(金)で配列 

 

print(date('Y年 n月') .'のカレンダー<br>'); 

for($day = 1; $day <= date('t'); $day++){//日にちと曜日をセットで繰り返す 

$week = date('w',mktime(0, 0, 0, $todayMonth, $todayDay, $todayYear)); 

print($day .'日' . '('. $youbi[$week] .')<br>'); 

?> 

 

 

実は、date('j')にしても$todayDay,のままだと、曜日が今日しか反映されませんでした。date('w')と同じ状態。

どうしたら、曜日が繰り返されていくのか? これを解決することで、正しく表示させることが出来ました。

 

参考サイト

PHPスクリプト講座:今月のカレンダー:一覧 | そふぃのphp入門

phpな休日

PHP 日本語の曜日を取得する | WEB作業メモ