【问题标题】:Edit JavaScript (Tomorrow's date)编辑 JavaScript(明天的日期)
【发布时间】:2015-11-05 00:05:00
【问题描述】:

我正在尝试编辑一些基本上显示明天日期的 JavaScript 代码。但是对于周五和周末(周五、周六和周日),它应该显示下周一的日期。

这是我的代码:

var date = new Date(); //  timezone
date.setDate(date.getDate() + 1); // move to tomorrow
date.setUTCHours(11,0,0,0); // set time using UTC(GMT) timezone
document.getElementById("next-shipment").textContent = date.toLocaleString();

JSFiddle

例如,假设今天是 2015 年 11 月 4 日,星期二。javascript 代码应以这种格式显示“2015 年 11 月 5 日”--->。 在周五、周六和周日,代码应显示:下周一的日期:2015 年 11 月 9 日

代码应该全年都可以使用。

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    试试这个:

    var today = new Date(); //  timezone
    document.getElementById("result").innerHTML = "<br/>Today's next day is: " + FormatDate(GetNextDay(today));
    
    
    function GetNextDay(date){
      date.setDate(date.getDate() + 1); // move to next day.
      switch(date.getDay()) {
      case 0: //Sunday
      case 6: //Saturday
        date = GetNextDay(date);
      }
      return date;
    }
    
    function FormatDate(date){
      var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
    
      return months[date.getMonth()] + " " + date.getDate() + ", " + date.getFullYear();
    }
    
    function TestDate(){
      var date = new Date(document.getElementById("TestDate").value);
      document.getElementById("result").innerHTML += "<br/>Selected day's next day is: " + FormatDate(GetNextDay(date));
    }
    <input type="text" id="TestDate" value="November 06, 2015" />
    <input type="button" value="Get Next Day" onclick="TestDate();" />
    <div id="result"></div>

    这个想法很简单:

    前两行和末尾的TestDate() 函数仅用于测试,您的代码中不需要它们。

    这项工作主要由GetNextDay()函数完成。你给它一个日期,它会计算并给你下一个日期(跳过周末)。它分两步完成:

    1- 首先它在给定日期date.setDate(date.getDate() + 1); 上增加一天。

    2- 它检查新日期date.getDay() 的日期。如果它是 6 或 0(星期六或星期日),它会再次调用自己 date = GetNextDay(date);,这意味着它将在日期上再增加一天。这种函数调用自身的概念在编程中称为“递归”。当它到达星期一时,它将停止调用自己并返回日期。

    正确计算第二天的唯一方法是在日期上加上一天。这利用了知道如何进行计算的 JavaScript 日期库。例如,它知道在“11 月 30 日”加上一天是“12 月 1 日”,而不是“11 月 31 日”。如果我们尝试通过将 1 添加到当天的数字来手动执行此操作:30 + 1 = 31,但“11 月 31 日”不是有效日期。为了解决这个问题,我们需要编写一个类似于 JavaScript 的库。显然,这就像重新发明轮子一样,没有任何意义。

    【讨论】:

    • 任何想法如何使它显示日期为“2015 年 11 月 5 日”而不是 11/6/2015, 6:00:00 AM?同样对于每个星期五、星期六和星期日,日期必须显示为下星期一。顺便说一句,我的时区是 EST (EDT)
    • 它已经做到了。它显示每个星期五、星期六和星期日的星期一。你可以测试一下。我将更新我的答案,以您想要的格式显示日期。
    • 我添加了格式化功能。您还希望显示当地时间,不是吗?如果没有,只需删除末尾的+ date.toLocaleTimeString()
    • 就在这一分钟,太平洋时间 2015 年 11 月 4 日 17:17,使用“运行代码 sn-p”向我显示 Today's next day is: November 6, 201520153:00:00 AM(错误的日期 - 6 而不是 5 - 并运行格式化一起)
    • @StephenP 那是因为 OP 在他的代码中有这一行 date.setUTCHours(11,0,0,0);。我认为他需要它,所以我把它留在那里。现在看了他的cmets,好像他不在乎时间,所以我把它删了。
    【解决方案2】:

    Date 构造函数还有一个名为getDay() 的函数,它返回一个介于 0 和 6 之间的整数(0 = 星期日,6 = 星期六)。您可以使用它来检测 Friday(0)、Saturday(6)、Sunday(0) 并忽略它们。

    这是一个演示,它会在周末提醒您:

    var myDate = new Date();
    myDate.setFullYear(2015);
    myDate.setMonth(11);
    myDate.setDate(6);
    
    if(myDate.getDate() == 5 || myDate.getDay() == 6 || myDate.getDay() == 0) alert('Weekend!');
    
    document.write(myDate);
    

    要查找下一天,请传递 Date 构造函数一次,它将为您完成工作。但是,您需要创建一个数组以按照您希望的方式对其进行格式化2015 年 11 月 5 日

    JS:

    var monthNames = ["January", "February", "March", "April", "May", "June",
      "July", "August", "September", "October", "November", "December"
    ];
    
    var tomDate = new Date(new Date().getTime() + 24 * 60 * 60 * 1000);
    var day = tomDate.getDate();
    var month = monthNames[tomDate.getMonth()];
    var year = tomDate.getFullYear()
    
    var d = new Date();
    var n = d.getDay();
    
    
    if(n == 5){
       var fromFri = n + 4;
       document.write("<b>" + month + " " + fromFri + ", " + year + "</b>");
    
    }else if (n == 6){
       var fromSat = n + 3;
       document.write("<b>" + month + " " + fromSat + ", " + year + "</b>"); 
    
    }else if (n == 0) {
       var fromSun = n + 2;
       document.write("<b>" + month + " " + fromSun + ", " + year + "</b>");
    
    }else{
       document.write("<b>" + month + " " + day + ", " + year + "</b>");
    }
    

    更新:CODEPEN DEMO

    【讨论】:

    • 我刚刚检查过,看起来代码可以完成这项工作。但是代码会在每个星期五、星期六和星期日显示星期一的日期吗?
    • 我为你修好了,如果是周末它会提醒你,如果不是它会打印日期!
    • 看起来很酷!有什么办法可以将这两个代码合二为一吗?第二个代码给出了正确的日期,但如果它可以显示星期五、星期六和星期日的星期一日期,那就太好了。
    • 如果代码可以只显示每个星期五、星期六和星期日的星期一日期而不发出警报,那将是最好的。因为我会将这段代码放在我的网站上,所以不需要警告消息。
    • 是的,我想我是为你准备的!起初我很困惑,因为我们为明天设置了今天的日期 + 1。当我去设置我使用明天日期的条件语句时,我知道我在数学 xP 上并没有那么差
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多