月ごとに日数を設定する方法 - PHPプロ!Q&A掲示板

124

  • 0P

月ごとに日数を設定する方法

質問日時 / 2006年8月3日 16:15    回答数 / 8件

Questioner:  JoBAe  このエントリーをはてなブックマークに追加 

キーワード / 日付           

日付をセレクトボックスで、年月日をわけて表示する場合に、その月ごとに日数を表示する方法について教えてください。

たとえば、11月は30日間、12月は31日間というふうに、月にあわせて日数をわけて表示させたいんですけど、方法が思い浮かばず悩んでます。

月の場合は、以下のようにできるとは思いますが、

for ($i = 1; $i <= 12; $i++) {
  $month[$i] = $i;
}

日の場合に、月ごとに日数を計算するよい方法があれば教えてください。

説明が判りづらくてすみません。
よろしくお願いします。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01wakabadou年月を指定できるのでしたら、date関数とmktime関数を
┃┗A01-1JoBAeご回答ありがとうございます。 下に書かれている例
┣A02tomoko0524$len = date("t",mktime(指定の年月日)); で、取得で
┃┗A02-1JoBAeご回答ありがとうございます。 こういうふうに、da
┣A03galluがると申します。 切り抜きで恐縮ですが、こういうロ
┃┗A03-1JoBAe返答ありがとうございます。 こういう書き方をすれ
┗A04wakabadouなるほど。 それならばどの言語にも移植できそうです
 ┗A04-1JoBAeご丁寧に説明していただき、ありがとうございました。

回答一覧

並び替え:

A01 満足
answererwakabadou [8月3日 17:22]

年月を指定できるのでしたら、date関数とmktime関数を組み合わせて見るというのはいかがでしょうか?
mktime関数は、日に指定した月の最初の日より1日前の日を指定すると、その前の月の最終日のタイムスタンプを取得できます。

この意見に回答する

ツリーへ TOPへ

A01-1
replyerJoBAe [8月9日 16:00]

ご回答ありがとうございます。

下に書かれている例を試してみたいと思います。

どうもありがとうございました。

この意見に回答する

ツリーへ TOPへ

A02 満足
answerertomoko0524 [8月3日 17:46]

$len = date("t",mktime(指定の年月日));
で、取得できるはずです。

この意見に回答する

ツリーへ TOPへ

A02-1
replyerJoBAe [8月9日 16:05]

ご回答ありがとうございます。

こういうふうに、date関数とmktime関数を組み合わせることもできるんですね。
とても勉強になります。

ありがとうございました。

この意見に回答する

ツリーへ TOPへ

A03 満足
answerergallu [8月3日 18:16]

がると申します。
切り抜きで恐縮ですが、こういうロジックも使えるかと思います。

    // 配列を使って簡単に判定
    $data = array("31", "", "31", "30", "31", "30",
                  "31", "31", "30", "31", "30", "31");

    if ($mm != 2) {
      $ret = $data[$mm - 1];
    } else {
      if (($yy%400)==0) {
        $ret = 29;
      } else if (($yy%100)==0) {
        $ret = 28;
      } else if (($yy%4)==0) {
        $ret = 29;
      } else {
        $ret = 28;
      }
    }

どうでしょうか?
関数なりクラスなり(私はCalenderクラスの一部としてこれをもってます)にもっていると便利かと。

この意見に回答する

ツリーへ TOPへ

A03-1
replyerJoBAe [8月9日 15:55]

返答ありがとうございます。

こういう書き方をすればいいんですね。
とても判り易く、参考にさせていただきます。

ありがとうございました。

この意見に回答する

ツリーへ TOPへ

A04 満足
answererwakabadou [8月3日 19:21]

なるほど。
それならばどの言語にも移植できそうですね。

自分としてはこういうものを考えていました。

/**
 * 指定された年月の1日から最終日までの日付を持つ配列を返します。
 *
 * @param   int     $year   年
 * @param   int     $month  月
 * @return  array   指定された年月の1日から最終日までの日付を持つ配列。
 */
function getMonthDayList($year, $month) {
    //指定された年月の最終日を取得します。
    $last_day = date("d", mktime(0, 0, 0, $month + 1, 0, $year));

    //指定された年月の1日から最終日までの日付を持つ配列を生成し、返します。
    return range(1, $last_day);
}

この意見に回答する

ツリーへ TOPへ

A04-1
replyerJoBAe [8月9日 16:02]

ご丁寧に説明していただき、ありがとうございました。

いろいろな方法を教えていただき、勉強になります。
こちらも参考にさせていただきます。

ありがとうごいました。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
負荷時のmysql_connect()エラー
 このエントリーをはてなブックマークに追加 
A
これはPHPというよりOSまたはMySQLのコミュニティで質問されたほうがいいと思います。 ぱっと思いついた範囲で記すと MySQL等のDBに「ある時点において同時に接続可能なクライアントの最大数」に制限があるよう...

>>続きを読む

今回のような実践的な経験がエンジニアのキャリアに繋がると思います。是非サービスを成功させて下さい!

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)