質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

5回答

1328閲覧

閏年の3月の最初の月曜日の日にちを計算

kenya.yasuhara

総合スコア17

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/08/25 15:15

1600年から2017年までの間で、いつが「うるう年」かと、「その年の”3月の最初の月曜日”は何日か」を表示するプログラムを書きたいのですが、どのように書けばいいかがわかりません。
以下①と②のソースコードがまず正しいのか、またそれらをどう組み合わせればいいのか教えていただけないでしょうか。

①1600年から2017年の間の閏年を抽出

<?php $array = range (1600, 2017); foreach ($array as $year) { if ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0) { echo $year; } ?>

②曜日を抽出

<?php $week = ['日','月','火','水','木','金','土']; $date = date('w'); echo $week[$date].'曜日'; ?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

strtotimeをつかいました。

php

1for ($year=1600; $year<=2017; $year++){ 2 if ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0) { 3 echo date("Y/m/d",strtotime("next Monday",strtotime($year."0229"))), "\n"; 4 } 5}

投稿2017/08/25 16:30

A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kenya.yasuhara

2017/08/26 13:06

お答えいただきましてありがとうございました。"next Monday"という便利なものがあると初めて知りました。
guest

0

ベストアンサー

php

1$first_monday = date("j", strtotime("first Monday of March 2017")); 2echo $first_monday; // 6

追記

(1)は}が足りない。

php

1$array = range (1600, 2017); 2foreach ($array as $year) { 3 if ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0) { 4 echo $year.": "; 5 $first_monday = date("j", strtotime("first Monday of March $year")); 6 echo $first_monday."\n"; 7 } 8}

うるう年の判定法を知ることは、他言語で応用ができるので、良い。
PHPではcheckdateも利用できる。
PHP: checkdate - Manual

追記2

DateTime使えという天の声が聞こえたので。

php

1$array = range (1600, 2017); 2foreach ($array as $year) { 3 $first_monday = new DateTime("first Monday of March $year"); 4 if ($first_monday->format('L') === '1') { 5 echo $first_monday->format('Y-m-d') . "\n"; 6 } 7} 8

投稿2017/08/25 16:14

編集2017/08/26 09:11
izkn

総合スコア1698

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kenya.yasuhara

2017/08/26 04:26

皆様からいただいたコメントを元に以下のコードを作ってみたのですが、どうも閏年を抽出するコードも間違っているようです (①だけ実行してみてもエラーが出ます。) いろいろとネットをあさってみましたが、具体的にどこが間違っているのかわかりません。間違っている箇所を教えていただけないでしょうか。 <?php $array = range (1600, 2017); foreach ($array as $year) { if ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0) { echo $year; } $first_monday = date("j", strtotime("first Monday of March $year ")); echo $first_monday; ?>
kenya.yasuhara

2017/08/26 13:09

ご回答ありがとうございました。 アドバイスから、結局以下のようなソースコードを作成しました。 <?php $arr = range(1600,2017); foreach ($arr as $year) { if ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0) { echo date(‘Y年m月d日‘, strtotime($year . ‘03’ . date(“d”, strtotime(“first Monday of March “.$year)))) . “\n”; } }
guest

0

やってみました。
シンプル版

php

1<?php 2for ($year=1600; $year<=2017; $year+=4){ 3 if ($year % 100 !== 0 || $year % 400 === 0) { 4 echo date("Y/m/d",strtotime("next Monday",strtotime($year.'0229'))), "\n"; 5 } 6}

力技版

php

1<?php 2for ($year=1600; $year<=2017; ++$year){ 3 $date = strtotime("next Monday",strtotime($year.'0229')); 4 if (date('L',$date)==='1') { 5 echo date("Y/m/d",$date), "\n"; 6 } 7}

A.Ichi さんの 2/29 の次の月曜日って、面白い読み替えですね。

投稿2017/08/26 08:38

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kenya.yasuhara

2017/08/26 13:05

わかりやすいアドバイスをいただきありがとうございました。自分でも再度ソースコードを書き直しまして、簡易版の方でうまくいきました。
guest

0

別回答に書かれてますように、うるう年の調べ方は問題ないです。
きっと問題は、この年の3月1日が何曜日なのかということでしょうが、

PHPには
http://php.net/manual/ja/datetime.construct.php
こういうのがありまして、何かしたら3月1日のデータ作れそうですね。

そして、
http://php.net/manual/ja/datetime.format.php
で'w'が使えるので・・・

って言う感じです。

投稿2017/08/25 16:10

rururu3

総合スコア5545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

閏年は問題ないようなので、3月の最初の月曜日について。

3月の最初の月曜日とは、
「3月1日から数えて最初の月曜日」のことですね。
ということは、
「3月1日は何曜日か?」
が分かれば、月曜日は何日後か分かりますね。

投稿2017/08/25 15:49

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kenya.yasuhara

2017/08/26 04:25 編集

皆様からいただいたコメントを元に以下のコードを作ってみたのですが、どうも閏年を抽出するコードも間違っているようです (①だけ実行してみてもエラーが出ます。) いろいろとネットをあさってみましたが、具体的にどこが間違っているのかわかりません。間違っている箇所を教えていただけないでしょうか。 <?php $array = range (1600, 2017); foreach ($array as $year) { if ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0) { echo $year; } $first_monday = date("j", strtotime("first Monday of March $year ")); echo $first_monday; ?>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問