• ベストアンサー

ある日付から○年○月○日目の計算

ウェブログを始めました。 記事の隣に配置されているメニューカラムとでも申しましょうか。 そこに、自分の好きなカテゴリーを設置できると最近知りました。 そこで、「2014年3月28日から、今日で○年○月○日」と表示させるようにしたいです。 現在、「○日」という表示は出来るようになったのですが(サンプルをこぴぺで…) 未来、桁数がすさまじいことになっていくので、年月日にしたいのですが 知識がないので、どなたか、例文をご存じでしたら教えて下さい。

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

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

ちなみに#4例で、0年1月-1日後でよければ以下 <script> var startDay = new Date(2014,0,31);// 1月31日 var endDay = new Date(2015,2,2);// 3月2日 function ddiff(s,e){ if(s > e) return false; var y1=s.getFullYear(),m1=s.getMonth(),d1=s.getDate(); var y2=e.getFullYear(),m2=e.getMonth(),d2=e.getDate(); var y0=y2-y1,m0=m2-m1,d0=d2-d1; y0-=(m1>m2 || (m1==m2 && d1>d2))?1:0; m0=(12+m0-(d1>d2?1:0))%12; d0+=d1>d2?(new Date(y2,m2,0)).getDate():0; return y0+"/"+m0+"/"+d0; } document.write(ddiff(startDay,endDay)); </script>

-Jelly-
質問者

お礼

丸投げなのにどうもありがとうございます! 早速試してみたところ、理想の結果になりました! しかしながら、ブログ自体毎日更新しないのに、endDayを毎日手作業で変えるのは自分にはとても出来ません。 endDayへは、固定値ではなく本日日付を取得させたいです。 自分なりに調べてみて、new Date()にしたら、1か月ずれました。 何か、ずれるのは仕様っぽいことが書いてあったので、開始日(本当は3月28日)を、2月28日にしました。 本日(12月22日)時点で、0年8か月25日と表示されて欲しいのですが、1日ずれて0年8か月24日と表示されています。 日も、月と同じように1日ずれるものなんでしょうか? (そういう記述は、見つけられませんでした) もしそうだとしたら、開始日を2月27日にすれば良いのでしょうか。 現在、こうなっています。 (開始日の固定日、終了日、document.writeを"○/○/○"から"(○年○か月○日)”と表示させるようにしたの3点しか変えていません。) <script type="text/javascript"> var startDay = new Date(2014,2,27); var endDay = new Date(); function ddiff(s,e){ if(s > e) return false; var y1=s.getFullYear(),m1=s.getMonth(),d1=s.getDate(); var y2=e.getFullYear(),m2=e.getMonth(),d2=e.getDate(); var y0=y2-y1,m0=m2-m1,d0=d2-d1; y0-=(m1>m2 || (m1==m2 && d1>d2))?1:0; m0=(12+m0-(d1>d2?1:0))%12; d0+=d1>d2?(new Date(y2,m2,0)).getDate():0; return "("+y0+"年"+m0+"か月"+d0+"日)"; } document.write(ddiff(startDay,endDay)); </script> 肝心のプログラミングの中身は全く理解出来ていない訳ですが、 とりあえず今は、やりたかった事が出来ています。 これを機にちょっとデキるようになりたいなーとか思ったけど、難しすぎでした。

その他の回答 (4)

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

○年○月○日後というものをどう定義するか指示してもらえれば 実現はできるでしょう(それが正しいかどうかは別として) たとえば2/28までだとして3/2は1/31の何年何月何日後ですか?

-Jelly-
質問者

お礼

2016年なら3日後です。 と、お返事しておりませんでした。 もうしわけありませんでした。。。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

日数の差などは簡単に求められますが、他の回答者様がお答えのように、月の大小やうるう年などを考慮しなければならず、差の日数だけから換算しようとすると難しいですね。 年や月(必ず12ヶ月なので12進法)はあまり問題はないので、日の計算をどのように考えるかということになりそうです。 何が正しいというのはなさそうですが、まぁ、翌月の同じ日までを1ヶ月とするような考え方にすれば、違和感は少ないのではないかと思います。 ただし、例えば同じ15日であっても、何月の15日かによって日数が変わってしまいます。 要は、前月の日数に依存してしまうので、例えば基準日が16日の場合、〇ヶ月30日(前月が31日ある)となったり、△ヶ月29日(前月が30日まで)となったりします。 そんな考え方で良ければ・・・ A(年A,月A,日A) - B(年B,月B,日B) をそれぞれ筆算的に日→月→年の順に計算してゆけばよいのではないでしょうか。 それぞれで負数になる場合は、上位の桁から繰り下げて計算することになりますが、例えば、日の計算で負数になった場合は、Bの日付を1ヶ月前にして(setMonth()でできます)その1ヶ月分の日数を加算し、それ以後の計算(月、年)は繰り下げた日付を基に計算する・・といった要領でよさそうです。 月の計算の場合は月数が固定なので、負数になったら単に12を加算して年を繰り下げという普通の計算ですみますね。

-Jelly-
質問者

お礼

>同じ15日であっても、何月の15日かによって日数が変わってしまいます 同じ15日なら、28日だろうが31日だろうが、0年1月1日で良いです。 たとえば、自分の誕生日の場合。 1月1日に産まれて、うるう年があろうが、28日の月があろうが、31日までの月を過ごそうが、 30年後の1月1日は、30年0月0日目と考えますよね。 厳密に何日目なのかは、現在使っているカウントアップで良いです。

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

>DATEDIF(A1,B1,"Y") & "年"& DATEDIF(A1,B1,"YM") & "月"& DATEDIF(A1,B1,"MD") 上記例だとたとえばA1に2014/1/31、B1に14/3/1といれてみてください いかにおかしいかがわかると思います 月をまたぐときはどうするか、小の月があるときはどうするか うるう年の2月をどうするかなど きちんと場合分けを考えればできないことはないと思います

-Jelly-
質問者

お礼

本当だ、どうしてそうなるのか分かりませんがおかしいですね。 面白い現象を見ました。 自分は特にパソコンでOfficeのソフトを使うような仕事をしていないのですが、そのうち何故なのか調べてみたいです。 で、今教えて頂きたいのはJavascrptなのですが、どうでしょうか。 ネットで転がっていたサンプルがあったのですが、そちらをこぴぺしたらちょっと日にちがずれました。 やっぱり難しいということでしょうか。

  • FEX2053
  • ベストアンサー率37% (7987/21355)
回答No.1

これ、Excelでも困った問題になるんですが・・・。 1か月は28日だったり、31日だったり、1年も366日だったりしますよね。 なので、たとえば開始から31日目は31日目なのか、1か月と1日目なのか、 それこそ1か月と3日目なのか判らないんです。 その辺をどう決めるかって話で、単純に1カ月は30日、1年は360日と 割り切るなら、割れば済む話なんですけどね。後はそれでいいかという 「考え方」の問題になります。

-Jelly-
質問者

お礼

Excelは「セル」を持っています。セルがあれば結構何でも出来ますよ。 関数も豊富ですし、そもそも日付の概念もしっかり持って単純に足し算と引き算も出来ますから普段の使い方してれば怖いものないです。 A1が開始日、B1がtodayだったとしますね。 DATEDIF(A1,B1,"Y") & "年"& DATEDIF(A1,B1,"YM") & "月"& DATEDIF(A1,B1,"MD") 簡単でしょ? Javaとかそういうプログラミング系は素人なんで教えて下さい。

関連するQ&A

  • 本日の日付け表示で「年」「月」「日」も画像にしたい

    http://www.usagi-js.com/sample/sample1/sample38.htm このサンプルで、「年」「月」「日」(「曜日」は省きたい)も画像で表示できますか? よろしくお願いします。

  • (年/月/日)の正しい順序は?

    年月日を略式に表示する場合: (1)(月/日/年) (2)(日/月/年) (3)(年/月/日)もありますね。 国際的に通用するのに正しいのはどれですか?

  • Excelの時間計算(年・月・日 別々のセルで…)

    Excelの時間計算で悩んでいます。 2つの異なる日付(年、月、日別々のセルに入力したもの)の 日数の差を関数で表示させたいのですがうまく行きません。 例えば、 A列にスタート年、B列にスタート月、C列にスタート日、D列にエンド年、E列にエンド月、F列にエンド日を入力し G列にエンド年月日-スタート年月日の日数させたいと考えています。 +----A----B----C----D----E----F----G 1   2008      2      1   2008      2     28     24 G1にDATE(D1,E1,F1)-DATE(A1,B1,C1)の数値を表示させたいのです。 ひとつのセルに日付形式で年月日を持たせれば DATEIF関数で実現可能なのは判りましたが 運用上、年月日を別のセルにして管理したいと考えています。 どなたかお解りになる方、いらっしゃいませんでしょうか。

  • エクセルの日付表示の書式設定

    こんにちはお世話になっております 教えていただきたいのは、エクセルの日付表示についてです。 条件としてはセルに日付を入力したときに以下のように表示したいです。 8/1と入力したとき  2006年 8月  1日 8/13と入力したとき 2006年 8月13日 10/3と入力したとき 2006年10月 3日 様はセルの中で数字が1桁でも2桁でも位置が会うようにしたいです。 配置で均等とかにしてもずれてしまうので、何か言い方法があればと思うのですが、教えてください なお、年月日になるようにするのはセルの書式設定でユーザー定義で[DBNum3]ggge"年"m"月"d"日"の設定で表示させています。 mmやddにしてしまうと08などになってしまうので、そうではなく 8と表示させたいです。 分かりにくい説明ですが、教えてください。

  • エクセルの日付表示を揃える

    いつもお世話になっております。 エクセルの日付表示について質問します。 平成21年5月8日と平成21年10月12日では、縦に配列すると 月と日で桁数が違うため、月日の位置がずれてきます。 これを解消する方法はあるのでしょうか? どなたかよろしくお願いします。

  • 日付の計算方法(1970年以前のデータを含む)

    過去の日付のデータがあって、今日までのの経過年月日を求めたいです。 (例)  データ 1980年1月5日  本日が2004年2月6日なので、求めたい結果は24年1月1日 日付のデータには1970年以前のデータも含まれるためタイムスタンプ(グリニッジ標準時)が使用できません。 関数などを使って簡単に求める方法はあるのでしょうか? どのようにしたら求められるかわかる方教えていただけませんでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 日付型のデータに変換するには!?

    初めて、利用します!! テキストボックスに日付型のデータを入れたら、 指定した日付型のフォーマットに変換する関数を作ってます。 例えば、[20010101]と入力したら[2001/01/01]に変換! それで、入力桁数によって・・・年月日をそれぞれ算出しようとしてました。 例えば、2桁入力時は[1桁目]を「月」[2桁目]を「日」という具合に! そうしていくうち、5桁入力時に、年と月と日の判断をどうやったら良いのか わからなくなってしまいました。 今、考えられるケースとしては [YYYYM][YYMMD][YYMDD]なのですが 判断の方法を教えてください。_(_^_)_ ※Y:年 M:月 D:日

  • 日付を使った計算式を教えてください

    [環境紹介] WINDOWS10、ACCESS2007(令和表示はテンプレートを使用して表示中) 「令和表示の式です」 =DLookUp("和暦","T_和暦マスタ","開始年月日<= #" & [txt日付] & "#and 終了年月日>=#" & [txt日付] & "#") [やりたいこと] 過去や未来の対象日や日数を下記のやり方で実施しています。「曜日」と「和暦」の表示方法(式)が分からずアドバイスをお願いできませんでしょうか。今の知識レベルで質問内容に対する可能可否の判断ができませんので、無理難題の質問内容でしたらご理解とご了承を賜りたいと思います。 [やっていること] 事前に設計しないでテーマを増やしたこともあり、テキストボックスの名前に整合性がありません。将来新たなデータベースを作る時(自分で納得できる知識が習得・・・)の課題と認識しております。 ■起点日→幾日後の月日(起点日から後日の西暦日を表示) テキストボックス名:西暦2「カレンダー入力」 テキストボックス名:日数2 手打ち テキストボックス名:対象2 コントロールソース「 =[西暦]+[日数] 」 ■起点日→対象日迄の日数(起点日から後日の日数を表示) テキストボックス名:開始「カレンダー入力」 テキストボックス名:終了 手打ち テキストボックス名:日数 コントロールソース「 =[着地日]-[開始日] 」 ■起点日→幾日前の月日(起点日から前日の日数を表示) テキストボックス名:西暦55「カレンダー入力」 テキストボックス名:日数55 手打ち テキストボックス名:対象55 コントロールソース「 =[西暦1]+[日数1] 」 [やってみたこと] ■起点日→幾日前の月日(起点日から前日の日数を表示)を例にとりあえず曜日でのチャレンジです。 テキストボックス名:西暦1「カレンダー入力」 テキストボックス名:日数1 手打ち テキストボックス名:対象1 コントロールソース「=[西暦1]+[日数1] テキストボックス名:曜日1 コントロールソース「 =WeekdayName(Weekday(対象1)) 」 結果はエラーでした。 以上ですが、宜しくお願いします。

  • 日付リストボックスの制御について

    現在、フォームに 年、月、日のリストボックスをそれぞれ配置して、たとえば、月を選択したときに、その月に対応する日(たとえば、6月を選択した場合は、日のリストボックスには、1~30までの値が入る)を表示させると言う 制御をJavaScriptで実現させたいと考えています。 うるう年の場合も対応したいと考えています。 しかし、JavaScript初心者のために、まったくわからない状態です。 経験者の方々、サンプルソースもしくは、参考になるURL等ありましたら、ご教授お願いします。 よろしくお願いします。

  • エクセルの経験年月を表す関数について

    エクセルで業務の経験年月を表示させたいと思っています。 「開始年月日」「終了年月日」があれば =DATEDIF(開始年月日,終了年月日,"Y")&"年" &DATEDIF(開始年月日,終了年月日,"YM")&"ヶ月" で経験年月として「〇年〇ヶ月」と表示されますが、 もし、現在も業務を継続して担当している場合に 「終了年月日」を今日に置き換えて計算させたいと思っています。 「終了年月日」に日付が入力されている場合にはその日付を採用し 「終了年月日」に日付が入力されていない場合には今日の日付を採用したい場合に どのように関数を設定したらよいか教えていただけますか? よろしくお願いします。

専門家に質問してみよう