こんにちは。下のような実行ソースプログラムを作ったのですが、
<?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ランキング
-
Magpie RSSを使用して日付表示...
-
codeigniterの時間設定
-
MySQLのdate型をphpで○年○月○日...
-
rss2.0<pubDate>の日付整形
-
おかしなところがあればどんな...
-
開始と終了を指定して、その間...
-
日付フォーマット
-
Java Scriptで、ある日付に加算...
-
switch()文で値の大小比較
-
「取得先」という表現について
-
【C#】DataGridViewの最大列数...
-
Dosブロンプトでtabを出力したい
-
shシェルスクリプト 空白行の...
-
phpでcookieがうまく保存されない
-
DTOとEntityの差は何ですか。
-
WordでExcelデータを差込...
-
ActiveReportのサブレポート機...
-
DMMの動画を全件取得したのです...
-
wordの差し込み印刷で文字...
-
VBA内でのGetPixelを使用した時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
開始と終了を指定して、その間...
-
ファイル名に日付の挿入
-
昨日の日付を取得するVBscript
-
substrの使い方について教えて...
-
一週間の表示の仕方と文字表示
-
PHPで以下のような占いプログラ...
-
C言語を使って、ある特定の日の...
-
アップロードしたファイル名に...
-
PHPでカレンダーを作る(縦書き)
-
プルダウンメニューの値をDBに...
-
第何週かを取得したい
-
日付によって画像を変える
-
差分の月数を算出する方法
-
SQL:TIMESTAMPの期間検索を指...
-
PHP 指定した期間だけ表示した...
-
C言語でシステム日付との差を...
-
プルダウンで今日以降の日付を...
-
Accessコンボボックス
-
MovableTypeで、ある日付を過ぎ...
-
Java Scriptで、ある日付に加算...
おすすめ情報