2016-05-17 10 views
0

日曜日から土曜日までの現在の日付をチェックし、それが過去、現在、または期日であるかどうかを確認するループがあります。来週はいつもショー!javascriptループスルー日付 - 停止して正しい日付を表示

を次のようにロジックが、それは現在の平日、その後の表示今日の日付、 であれば、それは過去の平日であれば、それは来る日の場合、次の週の日付、 を取得するには、その日+ 7を表示でその日付を表示します。

ここに私がまとめたコードがあります。

document.getElementById('youchose').innerHTML = localStorage.day; 

window.myDate = new Date(); 
if(localStorage.getItem("setDate") != null && localStorage.setDate != null && localStorage.setDate!="0000-00-00" && localStorage.setDate!=""){ 
    a = localStorage.setDate; 
    a = a.split("-"); 
    if(a.length >= 1){ 
     window.myDate= new Date(a[0],a[1]-1,a[2]); 
    } else { 
     window.myDate = new Date(); 
    } 
} 
var weekdays = new Array(); 
weekdays['Sunday'] = 0; 
weekdays['Monday'] = 1; 
weekdays['Tuesday'] = 2; 
weekdays['Wednesday'] = 3; 
weekdays['Thursday'] = 4; 
weekdays['Friday'] = 5; 
weekdays['Saturday'] = 6; 

//loop starts 

for(weeki=0; weeki <= 7; weeki++){ 
    if(window.myDate.getDay() == weekdays[localStorage.day]){ //for current day 
     SelectFromDB(); 
     window.myDate.setDate(window.myDate.getDate()); 
     weeki = 100; 
     break; 
    }else if(window.myDate.getDay() > weekdays[localStorage.day]) { //for previous days 
     window.myDate.setDate(window.myDate.getDate()-1); 
    }else{ 
     window.myDate.setDate(window.myDate.getDate()+1); // for next days 
    } 
} 

すべての日付に7を加算するだけではありません。 私は何が不足しています。それを数日見ていたようです。

ありがとうございました

+0

これはあなたの質問に対する直接的な答えではないので、ここでそれを説明します。あなたがJavaScriptで多くの日付を扱っているなら、http://momentjs.com/を見てください。 – Luke3butler

+0

ありがとうルーク、私はそれを調べます。私はmoment.minとmoment.maxを使って簡単にすると思いますか? – Diggetydog

+0

正直言って、私はあなたが達成しようとしていることについて少し混乱しています。あなたが期日に期日のようなものを取得しようとしている場合(期日、期限、期限までにどれくらいの期間が経過しているかを見るために)、あなたは 'moment(dateobject).isBefore(dateobject)'や ' (dateobject).isAfter(dateobject) 'と' .from(date) 'と' .to(date) ' – Luke3butler

答えて

1

コードの各行に問題があるため、完全な回答ではありません。

変数宣言の性質代わりウィンドウの使用は動作しますが、変数の宣言ではなく、プロパティの割り当てを使用して、おそらく優れているので、代わりに:

window.myDate = new Date(); 

を考える:

var myDate = new Date(); 

は微妙だが便利な利点がある。同様に、のwindow.varNameとしてグローバル変数にアクセスすると、varNameにアクセスするのは長年にわたる方法であり、コードが非ブラウザのホストで実行されることになっていると問題があります。良い習慣ではない)。

その後:

if(localStorage.getItem("setDate") != null && localStorage.setDate != null && localStorage.setDate!="0000-00-00" && localStorage.setDate!=""){ 

localStorage APIは非常に簡単です、それが唯一の方法のカップルを持っているlocalStorage.setDateを返しますので、上記は常にfalseを返しますので、何も「SETDATE」方法がありません定義されていない == null。

ブロック内のコードは、ブロック内で実行されません。

もあります:

var weekdays = new Array(); 
weekdays['Sunday'] = 0; 

配列だけで特別なlengthプロパティを持つオブジェクトです。ほとんど

var weekdays = new Object(); 
weekdays['Sunday'] = 0; 

オブジェクトリテラルを使用してコーディングするであろう:

var weekdays = {Sunday: 0, Monday: 1, Tuesday: 2, Wednesday: 3, 
       Thursday: 4, Friday: 5, Saturday: 6}; 

おそらくローカルストレージから返された値が何である上記次いで普通オブジェクトとして扱い、と等価であるが、アレイを作成します'2016-05-19'のように、日付を正しく解析します。その後

if (window.myDate.getDay() > weekdays[localStorage.day]) 

は、おそらくあなたは意味、正しいように見えるしません:

を(window.myDate.getDay()>平日[localStorage.getItem( '日')])場合

とにかく、それはあなたの問題の始まりです。

+0

ありがとうRob、私はこのコードを継承し、それを理解しようとしています。あなたは本当に助けてくれました。再度、感謝します。 – Diggetydog

+0

すべての行に問題がありました。あなたのコメントを送ってクライアントの状況を収縮させることができたので、私はあなたに言及してうれしいです。乾杯! – Diggetydog

関連する問題