- ベストアンサー
「~○ヶ月○日」という表示方法 2
以前こちらで同じ質問をさせていただきました。 教えていただいた方にもう1度聞こうと思ったんですが ここではそれはできないようなので、どなたか教えてください! 「HPを開設してから○ヶ月と○日が経ちました」 というような表示をしたいのです。 以前教えていただいた方法でうまく表示されていたのですが、 最近ちょっとくるってるんです。 本当は4ヶ月と22日(5/4現在)なんですが 5ヶ月と8日と表示されてしまいます。 なぜでしょうか? いろいろ検索してまわったのですが、 どれも何日という表示方法で、○ヶ月というのは見つかりませんでした。 以前教えていただいたのは↓です。 <SCRIPT> var StrMsg = ""; var dtToday = new Date;//現在の日付を取得する。 var StDay = new Date(2001,12,12);//Date(年,月,日)開設した年月日を入れておく。 //現在の日付から開設日付を引き何日経過したのかを取得する if(StDay.getMonth()>=dtToday.getMonth()+1){ var strMonth = StDay.getMonth()-(dtToday.getMonth()+1); }else{ var strMonth = (dtToday.getMonth()+1)-StDay.getMonth(); } if(dtToday.getDate()>=StDay.getDate()){ var strDate = dtToday.getDate()-StDay.getDate(); }else{ var strDate = StDay.getDate()-dtToday.getDate(); } //HTMLへと出力する if(strMonth != 0){ StrMsg = StrMsg + strMonth+"ヶ月と"; } if(Date != 0){ StrMsg = StrMsg + strDate+"日"; } if(StrMsg.length != 0){ document.write("HPを開設してから"+ StrMsg +"が経ちました"); }</SCRIPT> お願いします!!
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
strDate = "約"+(strDate + 31) の部分を var misoka= new Date misoka.setTime(today.getTime()-today.getDate()*24*60*60*1000) strDate = (strDate + misoka.getDate()) にして下さい.このコードでは, 「前月最終日までの日数」+「その日から今日までの日数」 として計算します.
その他の回答 (4)
- A__
- ベストアンサー率47% (22/46)
2001,12,12 → 2002,5,4 なら、4ヶ月と23日経ったことになると思うよ。 2001,12,12 → 2001,12,31 で19日経過。 2001,12,31 → 2002,1,1 で1日経過。ここまであわせて20日経過。 2002,1,1 → 2002,5,1 で4ヶ月経過。ここまであわせて4ヶ月と20日経過。 2002,5,1 → 2002,5,4 で3日経過。ここまであわせて4ヶ月と23日経過。 <SCRIPT> dtToday = new Date // 現在の日付を取得する。 StDay = new Date(2001,11,12) // 開設した年,月-1,日。 xxDay = 31 // ←は、開設した、1を引いていない月の最終日を入れておく。 // 2001年12月の最終日は31日だから、31を代入した。 strMonth = (dtToday.getYear()-StDay.getYear())*12+dtToday.getMonth()-StDay.getMonth() StrDate = dtToday.getDate()-StDay.getDate() if(StDay.getDate()>dtToday.getDate()){ StrDate+=xxDay strMonth-- } //HTMLへと出力する StrMsg = strMonth + "ヶ月" if(StrDate != 0)StrMsg += "と" + StrDate + "日" document.write("HPを開設してから"+ StrMsg +"が経ちました"); </SCRIPT>
お礼
5月4日現在では22日らしいんです。 でも、ありがとうございました! いろいろな計算(?)の方法があるんですね。 勉強になりました。 ありがとうございました。
- wolv
- ベストアンサー率37% (376/1001)
> strDate = "約"+(strDate + 31) の部分の31が場合によって30になったり28に なったりするようにすればいいので, できないことはないですが, 「1ヶ月と28日経過しました.」 の28日が正確である意味はあまりないですよ. そもそも1ヶ月の部分が1日程度の誤差があるのですから.
お礼
そうなんですか? すいません、どうしても「何日」と明確にしたかったもので・・・。 ありがとうございました!
- wolv
- ベストアンサー率37% (376/1001)
とりあえず,スクリプトの頭から出力部分の冒頭まで書き直してみました. 注意: 1. 開設日の「月」は,12月なら 11と書きます. どうやら,Jan -> 0, Feb -> 1, ... という対応をしています. 2. 開設日が某月10日で今日の日付が(某+1)月5日の場合など, 経過日は25日なのか26日なのかは判定が面倒なので, 約26日という表示になるようにしてあります. 3. 一部,変数名を変更しましたので, このスクリプトをcopy&pasteで使う場合は, var today 以下 strMonth+=の行までを全て変更してください. <SCRIPT> var StrMsg = ""; var today = new Date;//現在の日付を取得する。 var openDay = new Date(2001,11,22);//Date(年,月,日) //開設した年月日を入れておく。 //0: 1月, 1: 2月, 2: 3月, 3: 4月, 4: 5月, 5: 6月 //6: 7月, 7: 8月, 8: 9月, 9: 10月, 10: 11月, 11: 12月 var strDate = today.getDate()-openDay.getDate(); var strMonth = today.getMonth()-openDay.getMonth() if(today.getDate()<openDay.getDate()){ strMonth = strMonth -1 strDate = "約"+(strDate + 31) } strMonth+= 12*( today.getYear()-openDay.getYear() ) //HTMLへと出力する
補足
回答ありがとうございます! もうひとついいでしょうか? 「約」というのをはずすことは無理でしょうか? ぴったり合わせるということはむずかしいのですか? すみません、スクリプトの組み立ては 全然わからないので・・・。 無理な質問だったらごめんなさい。 お願いします。
- wolv
- ベストアンサー率37% (376/1001)
このスクリプト,だめですよ. ごく特定の場合は動くけれど, 根本的に書きなおさないと‥‥. ちなみに,もとのスクリプトは, 1a.開設月の翌月なら,0ヶ月,翌々月なら1ヶ月,……とする. 1b.開設月と同じ月なら,1ヶ月,前の月なら2ヶ月とする. 2a.(月を無視した)日が開設日以後なら,今日の日-開設日の日 2b.(月を無視した)日が開設日より前なら,開設日の日-今日の日 ということをやっていますが, 1bは必要ありません. 1aは,(月を無視した)日が開設日より前なら正しいですが,後なら間違っています. 2aはこれでよい. 2bまちがってます.今日の前の月の日数(30か31か,28か)を使った計算になるはずです.
お礼
ありがとうございます! スクリプトってむずかしいんですね。 これではダメなんですか。 私にはさっぱりわからないので、少しはわかるように勉強してみます!
お礼
できました! ありがとうございました! わがまま言ってすみませんでした。 ほんとにありがとうございました。