こんにちは。下のような実行ソースプログラムを作ったのですが、
<?php
echo("2005/1/29の1ヶ月後:". date( "Ymd",
mktime(0,0,0,1+1,29,2005) )."<BR>" );
echo("2005/1/30の1ヶ月後:". date( "Ymd",
mktime(0,0,0,1+1,30,2005) )."<BR>" );
echo("2005/1/31の1ヶ月後:". date( "Ymd",
mktime(0,0,0,1+1,31,2005) )."<BR>" );
?>
実行結果において
> 2004/1/30の1ヶ月後:20040301
> 2005/1/29の1ヶ月後:20050301
> 2005/1/30の1ヶ月後:20050302
のような不具合が出てしまいます。どう直してよいものか行き詰ってしまっているので、どなたかアドバイスを宜しくお願いします。
基本形はfunction_exという関数を作って↓
function mktime_ex(...) {
例外処理
必要に応じて return
// その他は、標準機能に任せる
return mktime( sec, min, hour, ... );
}
という形にしたいと思っています。
宜しくお願いします。
No.2ベストアンサー
- 回答日時:
#1補足>ようは、月末の日の数を超えた場合は、月末の日の数にするということみたいなので、以下の様にすればいいかと思います。
※mktimeは、本来引数を省略できるので、本当は、引数を省略した場合の処理をしないといけないですが、サンプルでは、そのような処理はしていません。
function mktime_ex($hour,$minute,$second,$month,$day,$year){
$monthDay = array(31,28,31,30,31,30,31,31,30,31,30,31);
if(($year % 400 == 0) || (($year % 4 == 0) && ($year % 100 != 0))){
$monthDay[1]=29; //閏年
}
if($day>$monthDay[$month-1]){//指定された月の日の数より大きい時
$day=$monthDay[$month-1];//その月末の日の数にする
}
return mktime( $hour,$minute,$second,$month,$day,$year);
}
なるほど、大変解りやすいプログラムです。
その方法を使わせていただきますね。
また、逆に2004/3/31の一ヶ月前を2004/2/29としたいときも
その方法と同じようにやればいいのですよね。
ちょっと試してみます。
ありがとうございました。
No.1
- 回答日時:
>2005/1/29の1ヶ月後:20050301
>2005/1/30の1ヶ月後:20050302
>2005/1/31の1ヶ月後:20050303
ウチで実行したところ上記のようになりました。
実行結果としては正しい(不具合ではない)
2005/1/29:一ヶ月後
2005/1+1/29→2005/02/29
2005年の2月28日までなので、翌日になり
(> 2004/1/30の1ヶ月後:20040301、の場合は、2004年が閏年のため2/29までだから2/30→3/1)
2005/02/29→2005/03/01
かと思いますが、
どのようになれるのが理想の結果なのでしょうか?
この回答への補足
>2005/1+1/29→2005/02/29
>2005年の2月28日までなので、翌日になり
>(> 2004/1/30の1ヶ月後:20040301、の場合は、2004年が閏年のため2/29までだから2/30→3/1)
>2005/02/29→2005/03/01
計算としてはそれが正しいのですが、
2005/1/29の一ヶ月後を2005/2/28としたいのです。
実行結果が↓
2004/1/30の1ヶ月後:20040229
2005/1/29の1ヶ月後:20050228
2005/1/30の1ヶ月後:20050228
2005/1/31の1ヶ月後:20050228
のようになってほしいのですが…
引き続きアドバイスを宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PHP PHP MySql ページング 2 2022/09/20 06:38
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- PHP php ログイン 1 2022/11/01 00:24
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
開始と終了を指定して、その間...
-
現在時刻をyyyymmddhhmmss形式...
-
日付を付けたファイルを作成したい
-
ファイル名に日付の挿入
-
アップロードしたファイル名に...
-
週や年データを取得するには
-
phpで○○○○年○月○日というデータ...
-
VBA コレクションに2次元配列...
-
syntax error, unexpected 'ech...
-
IEを使わないでhtmlテキストを...
-
CSVファイルをブラウザのキャッ...
-
vbYesNoの使い方
-
Yahoo! JAPAN IDを新規取得でき...
-
Excel VBA:特定の文字列以降(...
-
DTOとEntityの差は何ですか。
-
VBAでPDFファイルの文書のプロ...
-
foreachで回った数を表示したい
-
POSTで受け渡したものを保存し...
-
共用体のサイズをsizeofで
-
Let's Encryptで自動更新がされ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
開始と終了を指定して、その間...
-
ファイル名に日付の挿入
-
アップロードしたファイル名に...
-
昨日の日付を取得するVBscript
-
PHPでn日後を計算したい
-
C言語でシステム日付との差を...
-
現在時刻をyyyymmddhhmmss形式...
-
6ヶ月前の日付を取得するにはど...
-
月曜日から始まる週間カレンダ...
-
C言語を使って、ある特定の日の...
-
1ヶ月後の日付を出力したい
-
昨日の日付名でファイルを作成...
-
strtotime 前月・前々月の表示
-
今日の日付から1週間のリスト
-
一ヶ月前の月を表示させたい!
-
日付の比較方法
-
差分の月数を算出する方法
-
ASPでの日付の取得について
-
rss2.0<pubDate>の日付整形
-
PHPで以下のような占いプログラ...
おすすめ情報