2017-04-16 8 views
-1

Dateオブジェクトを使用してJavaScriptでデッドライン計算機能を作成しています。週末を省略して日付オブジェクト時間を増やす方法

私は入力のための日付とターンアラウンドタイムを持っており、アルゴリズムは日付の期限を戻します。今はうまく動作しますが、新しいオブジェクトを作成するのに十分なターンアラウンドタイムで日付オブジェクトをインクリメントすると、週末も同様に含まれます。週末を正当な勤務時間と見なしたくないので、これはアルゴリズム全体を破壊します。

Dateオブジェクトに何らかの設定をして、週末の日を省略することはできますか?たとえば、次のように

0 = "Sunday"; 
1 = "Monday"; 
2 = "Tuesday"; 
3 = "Wednesday"; 
4 = "Thursday"; 
5 = "Friday"; 
6 = "Saturday"; 

Thursday date + 24 hours => Friday date. But Friday date + 72 hours => Monday date 
instead of Wednesday date. 

どのように私は例えば金曜日までに72時間を与えるときに、私が代わりに月曜日得るが、水曜日はないだろう、週末を使用せずに期限を計算するだろうか? Dateオブジェクトが週末の日を超えてジャンプする場合と同様です。

+1

の可能性のある重複した[Moment.jsを使用して、2つの日付の間の週末を除外する方法](http://stackoverflow.com/questions/20788411/how-to-exclude-weekends- – Julian

+0

@Julianええ、私はMoment.jsを使用していません – MattSom

+1

良い点は、 Moment.jsを使用することをお勧めしますが、 – Julian

答えて

0

さて、クリーンコードの概念に従おうとして、私はアルゴリズム全体をseparete関数に入れました。私は他のいくつかの関数を省略していますが、主要部分は次の要素で覆われています:

function incrementWithTime(submit, days, hours_to_increment) { 
    let date = new Date(submit); 
    repeatThis(days) (() => date = pushToNextWeekIfReachedWeekend(new Date(date.getTime() + (24*1000*3600)))); 
    date = new Date(date.getTime() + (hours_to_increment*1000*3600)); 
    return date; 
} 

これは、Dateオブジェクトを日々増やします。なぜ私たちはこれが必要なのですか?あなたはどのように疑問に思うならば、

function pushToNextWeekIfReachedWeekend(submit) { 
    let date = new Date(submit); 
    let day = date.getDay(); 
    const saturday = 6, sunday = 0; 

if(day == saturday) 
    date.setDate(date.getDate() + 2);  
if(day == sunday) 
    date.setDate(date.getDate() + 1); 
return date; 
} 

今:pushToNextWeekIfReachedWeekend()メソッドを使用して、まあ、私は時間間隔が週末の日に到達した場所を知る必要があったので、私はそれで「ステップ」することができ、およびスキップreapeatThis()作品:

const repeatThis = x => f => { 
    if (x > 0) { 
     f(); 
     repeatThis(x - 1)(f); 
    } 
} 
関連する問題