javascript循环日期 - 停止并显示正确的日期

时间:2016-05-17 21:47:43

标签: javascript loops date web-applications local-storage

我有一个循环,从周日到周六检查当前日期与星期,然后检查它是否过去,当前或到期。它总是在下周出现!

逻辑如下

如果是当前工作日,则显示今天的日期, 如果是过去的工作日,则显示该日期+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。 我错过了什么似乎已经盯着这几天了。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

不是一个完整的答案,因为几乎所有代码都存在问题。

使用 window 属性而不是变量声明有效,但使用变量声明而不是属性赋值可能更好,所以代替:

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非常简单,只有几种方法,没有“setDate”方法所以上面的内容总是会返回false,因为 localStorage.setDate 会返回 undefined = = null。

因此 if 块中的所有代码都不会运行。

还有:

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

数组只是具有特殊长度属性的对象。上面创建了一个数组,然后将其视为普通对象,相当于:

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]) 

似乎不正确,也许你的意思是:

if(window.myDate.getDay()&gt; weekdays [localStorage.getItem('day')])

无论如何,这是你问题的一个开始。