3

これは、基本的に、特定のイベントの最初の日付を設定してから、繰り返し期間を設定できるシステム用です。

例えば。今から1週間後の2012年7月19日に日付を設定したので、猫をミルクと一緒に出さなければならないことを知っています。また、毎週の通知に設定しているので、今後数週間は通知を受け取りたいと思います。

その元の日付は私のデータベースにあります。これは第1週には問題ありませんが、第2週には、元の日付に1週間を加えたものとして返す必要があります。

一見、それは簡単に思えるかもしれませんが、うるう年とさまざまな再発頻度(隔週、毎月、毎年など)を考慮できるようにする必要があります。

これをjavascriptの実装として保持したいと思います。これは、データベースの日付を更新するよりも高速で、必要なコードが少ないと思われるためです。多分それは達成可能ではないでしょう、どんなポインタも素晴らしいでしょう。

私はこれらが出発点かもしれないと思います:

開始日を指定して、javascriptで現在の日付までの年数を計算する方法

日付が与えられた場合、特定の順序(毎週、毎月、毎年)で次の日付を効率的に計算するにはどうすればよいですか?

更新、私はそれぞれの異なるケースで追加する時間を返すために以下を書きました、そこから私は以下の答えを使うことができます:

var strDate = $(this).find('.next').text();
            var frequency = $(this).find('.occurs').text();
            var frmDate = getDateObject(strDate);
            var toDate = new Date();

            var days = parseInt(Math.floor((frmDate - toDate) / 86400000));

            if(days < 0) {
                // find out how many WHOLE 'frequencies' have passed
                var weeks = Math.ceil(0 - (days / 7));
                var months = Math.ceil(0 - (monthDiff(toDate,frmDate)));
                var years = Math.ceil(months / 12);
                //alert(days + '/' + weeks + '/' + fortnights + '/' + months + '/' + quarters + '/' + years);

                if(frequency == 'Weekly') { frmDate.add(weeks).weeks(); }
                if(frequency == 'Fortnightly') { frmDate.add(weeks*2).weeks(); }
                if(frequency == 'Monthly') { frmDate.add(months).months(); }
                if(frequency == 'Quarterly') { frmDate.add(months*3).months(); }
                if(frequency == 'Annually') { frmDate.add(years).years(); }

                var newdate = frmDate.toString("dd/MM/yyyy");
                //alert(newdate);

                $(this).find('.next').text(newdate);
            }
4

3 に答える 3

0

私がすること(おそらく最善の解決策ではない、私は今それを思いついている)は、最初の日付から開始し、ループを使用することです:whileあなたが観察している日付は現在の日付よりも短いです、観察された日付を増やします1週間ごと(2週間、1か月、1年など)。現在の日付に着陸すると、イベントが発生します。それ以外の場合は別の日です。

date.setDate(date.getDate()+1);たとえば、日付を1日ずつインクリメントしたり+7、1週間同じように、月と年をそれぞれ使用しset/getMonthたりできます。set/getFullYear範囲外の値を指定すると、JSはそれをラップします(したがって、3月32日は4月1日になります)

于 2012-07-12T12:43:20.947 に答える
0

また、このためのSQL実装はDATEADDを使用します。

http://sql-plsql.blogspot.com/2010/07/dateadd.html

ほとんどの日付関数がうるう年などの特別な日付を処理するため、うるう年などの特別な日付について心配する必要はありません。

または、他のユーザーが提案したように、getDate()、getMonth()を使用することもできます。var today = new Date(); today.setDate(today.getDate()+ numberOfDaysToAdd);

于 2012-07-12T12:47:54.283 に答える
0

いくつかの生のアイデアについては、次のコードをチェックしてください

    var someDate = new Date();
for(var i = 0 ; i < 7 ; i++)
    {
someDate.setDate(someDate.getDate() + 1);   
        console.log(someDate)
    }

以下のフィドルで同じことをテストできます

当日から7日連続

于 2015-06-30T08:57:08.393 に答える