显示日期取决于是否是js月份中的最后一天

时间:2019-01-16 15:40:30

标签: javascript jquery

我无法显示正确的日期。如果今天是该月的最后一天,并且时间是20:00 PM及以后,我想显示明天。

我已经尝试过examplethisthis这两个方法,但是对我没有用。

function isLastDay(dt) {
      return new Date(dt.getTime() + 86400000).getDate() === 1;
  }

function changeDay() {
  var d = new Date();
  d.setHours(d.getHours() + (d.getTimezoneOffset() / 60) + 3);
  d.setDate(31);
  d.setHours(20);
  var day = d.getDate();
  var hrs = d.getHours();
  var min = d.getMinutes();
  var sec = d.getSeconds();

  var dayString = 'today';

  var mnt = new Array("january", "february", "march", "april", "may",
    "june", "july", "august", "september", "october", "november", "december");
  var lastday = new Date(new Date().getFullYear(), new Date().getMonth() + 1, 0).getDate();

  if (((hrs == 19) && (min > 45)) || (hrs > 19)) {
    day = day + 1;
    dayString = 'tomorrow';
  }

  if (day === lastday) {
    $(".start-web").html(day + " " + mnt[d.getMonth() + 1, 0]);
  } else {
    $(".start-web").html(day + " " + mnt[d.getMonth()]);
  }

  $(".start-web-d").html(dayString);
}

setInterval("changeDay()", 1000);
<div>
  <p>
    <strong>
      Start 
      <span class="start-web-d">&nbsp;</span>&nbsp;
      <span class="start-web">&nbsp;</span>&nbsp;
      20:00 
    </strong>
  </p>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

例如,我的脚本显示1月32日,而我的目的是显示2月1日。任何帮助将不胜感激,谢谢。

这里是link to my example

4 个答案:

答案 0 :(得分:1)

此逻辑应该是您所需要的:如果明天是第一天,那么今天是一个月的最后一天,并且如果日期getHours方法返回20或更大,则您应该满足您的条件。

const dt = new Date();
const tomorrow = new Date(dt.getTime() + 60 * 60 * 24 * 1000).getDate();

if (tomorrow === 1 && dt.getHours() >= 20) {
  console.log('criteria met!');
} else {
  console.log(dt, tomorrow);
}

答案 1 :(得分:0)

我看到您那里有lastday变量,但是我看不到您如何使用它。您需要检查一下当前日期是否是31日。

答案 2 :(得分:0)

只需使用===更改>=运算符

if (day >= lastday) {
  $(".start-web").html(day + " " + mnt[d.getMonth() + 1, 0]);
} else {
  $(".start-web").html(day + " " + mnt[d.getMonth()]);
}

说明

在此行之前:

if (((hrs == 19) && (min > 45)) || (hrs > 19))

您的day的值为31,然后由于满足条件而将day的值与1相加,因此在if else范围之后,{ {1}}的值为day

然后您将32day分别比较32lastday,因此不满足条件,而是显示31

答案 3 :(得分:0)

该月的最后一天20:00 PM与该月的第一天-4小时相同,我们可以使用它来创建一个函数来检查是否超过该日期:

function lastMinus4(){
  let now = new Date();
  let lastM4 = new Date(now.getFullYear(), now.getMonth() + 1, 1, -4);

  return (now > lastM4);  
}

now变量是当前日期和时间,lastM4是当前年份,当前月+1是下个月,1是该月的第一天,而-4是过去4小时这是该月的最后一天下午20:00。另一种方法是将日设置为-1,然后将小时设置为20。

在Date构造函数中,您上面使用0作为日期表示上个月的最后一天,因此只需在构造函数的末尾加上20,就可以确定小时数。

>