首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >javascript循环遍历日期-停止并显示正确的日期

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

Stack Overflow用户
提问于 2016-05-17 21:47:42
回答 1查看 187关注 0票数 0

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

逻辑如下

如果是当前工作日,则显示今天的日期,如果是上一个工作日,则显示该日期+7以获得下一周日期,如果是即将到来的一天,则显示该日期。

这是我整理好的代码。

代码语言:javascript
运行
复制
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加到所有的日期。我错过了什么。似乎盯着这个看了好几天了。

谢谢你的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-18 01:10:39

不是一个完整的答案,因为你的代码的每一行都有问题。

使用窗口属性而不是变量声明是可行的,但可能最好使用变量声明而不是属性赋值,因此,而不是:

代码语言:javascript
运行
复制
window.myDate = new Date(); 

考虑:

代码语言:javascript
运行
复制
var myDate = new Date();

有微妙但有用的好处。类似地,以window.varName的形式访问全局变量只是一种冗长的访问varName的方式,如果代码打算在非浏览器主机上运行(这看起来不是,但不是一个好习惯),就会有问题。

然后:

代码语言:javascript
运行
复制
if(localStorage.getItem("setDate") != null && localStorage.setDate != null && localStorage.setDate!="0000-00-00" && localStorage.setDate!=""){

API非常简单,它只有两个方法,没有"setDate“方法,所以上面的方法总是返回false,因为localStorage.setDate将返回未定义的== null。

因此,if块中的任何代码都不会运行。

此外,还有:

代码语言:javascript
运行
复制
var weekdays = new Array();
weekdays['Sunday'] = 0;

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

代码语言:javascript
运行
复制
var weekdays = new Object();
weekdays['Sunday'] = 0;

大多数人会使用一个对象文本对其进行编码:

代码语言:javascript
运行
复制
var weekdays = {Sunday: 0, Monday: 1, Tuesday: 2, Wednesday: 3,
                Thursday: 4, Friday: 5, Saturday: 6};

据推测,从本地存储返回的值类似于'2016-05-19',然后将其正确解析为一个日期。

然后:

代码语言:javascript
运行
复制
if (window.myDate.getDay() > weekdays[localStorage.day]) 

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

if (window.myDate.getDay() > weekdayslocalStorage.getItem('day'))

不管怎么说,这是你们问题的开始。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37286762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档