• ベストアンサー

差分の月数を算出する方法

午前中に差分の日数を算出する方法は教えて頂けたのですが、 月数を算出する方法が分からなく困っています。 2007/08/27 13:00 2007/07/31 00:00 この時、差分は1ヶ月としたいです。 日数は考慮せず、あくまで年月のみで算出を行いたいです。 但し、1ヶ月はその年月の末日と同値です。 今やってる処理はこんな感じです。 $now = mktime(0, 0, 0, $now["tm_mon"], 1, $now["tm_year"]); $paradate = mktime(0, 0, 0, $paradate["tm_mon"], 1, $paradate["tm_year"]); $diff = strtotime($now) - strtotime($paradate); ここまではいいと思うのですが、次に以下のような処理を行っています。 (途中まで書いて、だめじゃんと思った状態) $select = $diff / (60 * 60 * 24); ここで何をやりたいかと言うと、何ヶ月の差分があったかを求めたいのです。 しかし、タイムスタンプの差分を求めた日付(ここでは$paradate)が何月で、末日が 何日だからその分を差し引く、その次の月の末日が何日だからその分を 差し引く~・・・ としていかないと正しい差分が求められないと思うのです。 (28, 29, 30, 31の末日の差がある為) どうすれば簡単に処理できるのでしょうか? どなたかご教示下さい。 足りない情報がありましたら随時補足致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

なるほど・・・ 月の差だけ考えればよいなら単純に <?PHP $str1="2007/08/27 13:00"; $str2="2007/07/31 00:00"; $date1=strtotime($str1); $date2=strtotime($str2); $month1=date("Y",$date1)*12+date("m",$date1); $month2=date("Y",$date2)*12+date("m",$date2); $diff = $month1 - $month2; print $diff; ?> もちろん、7/31~8/1でも1ヶ月になりますけどね。

naktak
質問者

お礼

おお!すごい、ありがとうございます。 感動しますこれ(笑)

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

年月のみですか? こんな感じでしょうか。 $t1 = mktime(0,0,0,$m1,1,$Y1); $t2 = mktime(0,0,0,$m2,1,$Y2); $dm = ( date("Y", $t2) - date("Y",$t1) ) *12 + ( date("n",$t2) - date("n",$t1)); とりあえず全て月(整数)に変換して計算しています。 参考まで。

naktak
質問者

お礼

ありがとうございます!先に進めそうです!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 時間の差分

    初めまして。 早速質問をさせていただきたいと思います。 postgresとPHPを使って開発中です。 postgresでは、timestamp without time zone型にデータを保存しております。 それを取得して、現在の時間との差分が1分以内だったら・・・という処理を したいのですが、mktime()を使ったり、strtotime()を使ったりして ためしたのですが、うまくいきません。 //$date → postgresから取得したtimestamp $diff = time() - strtotime($date); if ($diff < 60) {   ** 処理 ** } ご教授よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 差分が何か月分か知りたい

    日付1:2008-08-22 19:00:00 日付2:2008-02-01 01:00:00 こういった2つの日付の差分が何ヶ月経過しているかを知りたいのですが、 どういう風に作ったらいいのか分かりません。 strtotime()等で差分を先に取ってしまうと、それが何月なのかが分からない為、 末日28、29、30、31のズレが生じてしまうと思うのです。 日付2の月を保持しつつ、その月の末日を取って何か加工すれば出来そうな気も しますが、スマートに書けないものでしょうか? どなたかご教示下さい。

    • 締切済み
    • PHP
  • 上半期、下半期の現在の期末日を取得する方法

    現在の期末日の年月日を取得したいのですが、 どのようにすれば求められるでしょうか? <? // 上期4/1~9/30、下期10/1~3/31とする場合 $kamiki = 4; $shimoki = 10; $now_year = date("Y"); $now_mon = date("m"); // 今日が 5月の場合、本年2003/9/30 // 今日が11月の場合、翌年2004/3/31を返したいです ?> 3時間、mktime(),date()などで考えましたが、 結局、年が変わる所で頭が一杯で わかりませんでした(T_T) よろしく願いします。

    • ベストアンサー
    • PHP
  • 日付の計算に関して

    日付の計算に関して PHPを用いて、ある日から月末までの日数を計算したいと考えていますが、 いろいろ調べながらたどり着いた方法で記述しても、上手く動作しません。。。 何が原因なのでしょうか。。。 《記述内容》 //現在日付を取得 $systemDate = getDate(); $sysYear = $systemDate[year]; $sysMon = $systemDate[mon]; $sysDay = $systemDate[mday]; //今月の日付数 $lastDay = date("Ymd", mktime(0, 0, 0, $sysMon+1, 0, $sysYear)); $sql_date1 = '20101010'; $sql_date2 = $lastDay; $result = strtotime( $sql_date2); - strtotime( $sql_date1); $result = intval( $result / ( 24 * 60 * 60))+1; 結果として、~日というような日数を求める為には何が不足しているのでしょうか? 教えて頂きたいと思います。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 現在時刻をyyyymmddhhmmss形式で変数に格納する

    いつもお世話になっております。 現在時刻を取得し、yyyymmddhhmmss形式で ひとつの変数に持たせたいとおもっているのですが 可能でしょうか? ---------- 1 #include <stdio.h> 2 #include <time.h> 3 4 int main(void) 5 { 6 struct tm *date; 7 time_t now; 8 int year; 9 int month; 10 int day; 11 int hour, minute, second; 12 13 /* 現在の日時を取得 */ 14 time(&now); 15 date = localtime(&now); 16 17 year = date->tm_year + 1900; 18 month = date->tm_mon + 1; 19 day = date->tm_mday; 20 hour = date->tm_hour; 21 minute = date->tm_min; 22 second = date->tm_sec; 23 24 return 0; 25 26 } 27 --------------- yearからsecondを結合してひとつの変数に格納することは可能でしょうか??

  • 時間の加算(その2)php

    DBからある範囲の日付けの時間だけを取ってきて取ってきた時間の差分の累計を計算したいです。 例えば、4月16日から5月15日までのスタート時間とエンド時間を所得 させてエンド引くスタート、日々の差分を累計するようなことが実現したいです。 下記のように書いてデータだけは引っ張ってこれるようになったのですが加算方法が分かりません。ご教授いただけませんでしょうか? (ソース?php $ym = date("2022-04-22"); $tm = date("n",strtotime($ym));//月 $ty = date("Y",strtotime($ym));//年 $countdate=date('t',mktime(0,0,0,$tm,1,$ty));//4月の日数を計算 for ($i = 0; $i < $countdate; ++$i) { $d = mktime(0, 0, 0, $tm, 16 + $i, $ty); //日付ごとの配列のキー $dd = date('Y-m-d', $d); foreach($e_all as $e_time){ if (in_array($dd, (array)$e_time->date_time)) { echo $e_time->start_time;   echo $e_time->end_time; }} } ?> 因みにechoで表示されたデータは 09:00:00 20:00:00 08:00:00 18:00:00 09:00:00 19:10:00 となっていて 順番に登録してある4/20 のスタート時間、エンド時間 4/21のスタート時間、エンド時間4/22のスタート時間、エンド時間 の並びで取れています。よろしくおねがいします

    • ベストアンサー
    • PHP
  • CGIの結果をHTMLの一部に貼り付けたい

    こんにちわ。 日にちをカウントダウンするCGIを使い、 「~~~まであとO日」とTOPページに表示させたいのですが、 CGIファイルのその結果をHTMlに埋め込むことは可能なのでしょうか? CGIファイルは *-*-*- #!/usr/bin/perl require "timelocal.pl"; $world_cup = "2002-6-10 0:0:0"; ($w_year,$w_mon,$w_day,$w_hour,$w_min,$w_sec) = split(/[- \:]/,$world_cup); $w_year-=1900; $w_mon--; $now = time(); $w_cup = &timelocal($w_sec,$w_min,$w_hour,$w_day,$w_mon,$w_year); $diff = $w_cup - $now; print "Content-type: text/plain\n\n"; print int($diff/(60*60*24)),""; *-*-*- というものを使いました。  結果としてこのソースのCGIをブラウザで見ると数字が(カウントダウンされた日にち)が表示されますが、 その日にちの部分をHTMLで埋め込みたいのです。GIFなどを使わずにその結果のみをHTMLに埋め込む方法をご存じでしたら、教えてください。 無知な質問ですいません。できましたら 至急 よろしくおねがいします。

    • ベストアンサー
    • HTML
  • スクリプトでtxtファイルがブランクかを判別したい

    シェルスクリプトの勉強をしています 比較先の差分のみを抽出するのに以下のコマンドを使用しており、 差分があってもなくてもdiff_file.txtを出力しています。 diff hikaku_moto.txt hikaku_saki.txt | grep -E '^<' | perl -pe 's/^<\s//g' > diff_file.txt 比較をして出力したdiffファイルがブランクであれば次の処理を流す。 ブランクでなければ処理を止めるようなことをしたいのですが、ファイルの中身がブランクかどうかの 判別方法がわからず… テキストファイルの中身がブランクかどうかの判別方法を教えていただけますでしょうか? よろしくお願い致します

  • localtime()での時間差の計算の仕方

    $ENV{'TZ'} = "JST-9"; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); my $now =sprintf("%04d/%02d/%02d-%02d:%02d",$year+1900,$mon+1,$mday,$hour,$min); とすると 2007/01/28-15:56 のようにデータとして取得できるのですが・・・ これと登録日($date=2006/12/31-12:25)との日数差の計算ができません $now-$date とすると年数のところしか計算できず1としか表示できません 登録7日後以降にイベントを発生させたいのですが計算ができないのでうまくいきません 両方time()でやれば$now-$date>604800 とすればなんとかできるのですが登録日は『2006/12/31-12:25』の形で使いたいのです 登録日と現在の日数の差の計算方法を教えてくださいm(--)m

    • ベストアンサー
    • CGI
  • laravel controllerに記載したい

    以前、回答いただいた内容で現在view側に書いている内容が view側に記入してあると肥大化するのでcontroller側に書きたいのですが可能でしょうか?foreachで回しているのでviewにかくしかないでしょうか?もしも可能であればcontroller側へのデータの渡し方も教えていただけるとありがたいのですが。。。よろしくお願いします。 $ym = date("2022-04-22"); $tm = date("n",strtotime($ym));//月 $ty = date("Y",strtotime($ym));//年 $countdate=date('t',mktime(0,0,0,$tm,1,$ty));//4月の日数を計算 $goukei = 0; for ($i = 0; $i < $countdate; ++$i) { $d = mktime(0, 0, 0, $tm, 16 + $i, $ty); //日付ごとの配列のキー $dd = date('Y-m-d', $d); foreach($e_all as $e_time){ if (in_array($dd, (array)$e_time->date_time)) { echo $e_time->start_time; echo $e_time->end_time; $sabun = (strtotime($e_time->end_time) - strtotime($e_time->start_time)) / 60; echo $sabun; $goukei += $sabun; echo $goukei; } } }

    • ベストアンサー
    • PHP