アプリ版:「スタンプのみでお礼する」機能のリリースについて

以前こちらで同じ質問をさせていただきました。
教えていただいた方にもう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>

お願いします!!

A 回答 (5件)

strDate = "約"+(strDate + 31)



の部分を

var misoka= new Date
misoka.setTime(today.getTime()-today.getDate()*24*60*60*1000)
strDate = (strDate + misoka.getDate())

にして下さい.このコードでは,
「前月最終日までの日数」+「その日から今日までの日数」
として計算します.
    • good
    • 0
この回答へのお礼

できました!
ありがとうございました!
わがまま言ってすみませんでした。
ほんとにありがとうございました。

お礼日時:2002/05/04 23:50

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>
    • good
    • 0
この回答へのお礼

5月4日現在では22日らしいんです。
でも、ありがとうございました!
いろいろな計算(?)の方法があるんですね。
勉強になりました。
ありがとうございました。

お礼日時:2002/05/04 23:52

> strDate = "約"+(strDate + 31)


の部分の31が場合によって30になったり28に
なったりするようにすればいいので,
できないことはないですが,

「1ヶ月と28日経過しました.」
の28日が正確である意味はあまりないですよ.
そもそも1ヶ月の部分が1日程度の誤差があるのですから.
    • good
    • 0
この回答へのお礼

そうなんですか?
すいません、どうしても「何日」と明確にしたかったもので・・・。
ありがとうございました!

お礼日時:2002/05/04 23:46

とりあえず,スクリプトの頭から出力部分の冒頭まで書き直してみました.



注意:

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へと出力する

この回答への補足

回答ありがとうございます!
もうひとついいでしょうか?
「約」というのをはずすことは無理でしょうか?
ぴったり合わせるということはむずかしいのですか?

すみません、スクリプトの組み立ては
全然わからないので・・・。
無理な質問だったらごめんなさい。
お願いします。

補足日時:2002/05/04 18:35
    • good
    • 0

このスクリプト,だめですよ.


ごく特定の場合は動くけれど,
根本的に書きなおさないと‥‥.

ちなみに,もとのスクリプトは,

1a.開設月の翌月なら,0ヶ月,翌々月なら1ヶ月,……とする.
1b.開設月と同じ月なら,1ヶ月,前の月なら2ヶ月とする.
2a.(月を無視した)日が開設日以後なら,今日の日-開設日の日
2b.(月を無視した)日が開設日より前なら,開設日の日-今日の日

ということをやっていますが,

1bは必要ありません.
1aは,(月を無視した)日が開設日より前なら正しいですが,後なら間違っています.
2aはこれでよい.
2bまちがってます.今日の前の月の日数(30か31か,28か)を使った計算になるはずです.
    • good
    • 0
この回答へのお礼

ありがとうございます!
スクリプトってむずかしいんですね。
これではダメなんですか。
私にはさっぱりわからないので、少しはわかるように勉強してみます!

お礼日時:2002/05/04 18:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!