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