4

Tasker で 2 つの日付の間の月曜日、水曜日、金曜日の数を計算しようとしています。そのため、おそらく日付を秒形式、つまり UNIX 時間、または JavaScript コードで利用する数式が必要です。私はグーグルを試して、これを開始する方法について頭を悩ませましたが、道に迷ったので、まだ何も試していません. 私が考えることができた唯一のことは、合計日数を取得して 7 で割ることでした。誰かが私をより良い方向に向けることができますか?

4

3 に答える 3

11

O(1) の 2 つの日付の間の特定の曜日を数える方法:

// days is an array of weekdays: 0 is Sunday, ..., 6 is Saturday
function countCertainDays( days, d0, d1 ) {
  var ndays = 1 + Math.round((d1-d0)/(24*3600*1000));
  var sum = function(a,b) {
    return a + Math.floor( ( ndays + (d0.getDay()+6-b) % 7 ) / 7 ); };
  return days.reduce(sum,0);
}

[1,3,5]2 つの日付の間の月曜、水曜、金曜を数える例:

countCertainDays([1,3,5],new Date(2014,8,1),new Date(2014,8,1)) // 1
countCertainDays([1,3,5],new Date(2014,8,1),new Date(2014,8,2)) // 1
countCertainDays([1,3,5],new Date(2014,8,1),new Date(2014,8,3)) // 2
countCertainDays([1,3,5],new Date(2014,8,1),new Date(2014,8,4)) // 2
countCertainDays([1,3,5],new Date(2014,8,1),new Date(2014,8,5)) // 3
countCertainDays([1,3,5],new Date(2014,8,1),new Date(2014,8,6)) // 3
countCertainDays([1,3,5],new Date(2014,8,1),new Date(2014,8,7)) // 3

月のパラメーター toDateは 0 ベースなので、2014 年 9 月 1 日はDate(2014,8,1)です。

于 2014-09-04T18:36:44.727 に答える
1

合計日数が であると仮定しnます。その場合、任意の曜日の番号は最初はn / 7です。今取るn = n % 7。現在の値に応じてn、最終的な日数を簡単に計算できます。

例として:

初日がFridayで、合計日数が であるとし100ます。だから、n = 100。最小100/7または14各平日が間隔内にあります。100 % 7 = 2. したがって、最終的なカウントは、

Friday -> 14+1 = 15
Saturday -> 14+1 = 15
Sunday -> 14
Monday -> 14
Tuesday -> 14
Wednesday -> 14
Thursday -> 14
于 2014-08-29T05:40:10.327 に答える