如何从JavaScript中的天数计算月份

时间:2014-04-28 00:49:43

标签: javascript clock

所以基本上我做了一个增加时钟时间的计算:

function Clock(year,month,day,hours,minutes,seconds){

  if(seconds !== null){
  this.seconds = seconds;
  }

  if(minutes !== null){
  this.minutes = minutes;
  }

  if(hours !== null){
  this.hours = hours;
  }

   if(day !== null){
  this.day = day;
  }

  if(month !== null){
  this.month = month;
  }

  if(year !== null){
  this.year = year;
  }

}


function incrementClock(){

clock.seconds++;
  if (clock.seconds >=60) {
    clock.seconds = 0;
    clock.minutes++;
    if (clock.minutes >=60) {
      clock.minutes = 0;
      clock.hours++;
      if (clock.hours >=24) {
        clock.hours = 0;
        clock.days++;
      }       
    }
  }    
}



function showClock(){

//prints clock in format yyyy/mm/dd hh:mm:ss

}

这会相应地增加秒,分,小时和天......

因此,如果我每秒打电话打印时钟,它将如下所示:

var c = new Clock(2014,04,01,12,13,01);

showClock();
  

2014/4/1 12:13:1

我被困在月份......

我的问题是我如何检查一个月是否过去,因为每个月有不同的天数?

修改

我正在创建自己的缩小日期函数...所以请不要建议使用Date个对象,因为我正在尝试实现自己的

3 个答案:

答案 0 :(得分:0)

这是你正在寻找的吗?

function incrementClock(){
  clock.seconds++;
  if (clock.seconds >=60) {
    clock.seconds = 0;
    clock.minutes++;
    if (clock.minutes >=60) {
      clock.minutes = 0;
      clock.hours++;
      if (clock.hours >=24) {
        clock.hours = 0;
        clock.days++;
        var months = [31,((clock.year%4==0)&&((clock.year%100!=0)||(clock.year%400==0)))?29:28,31,30,31,30,31,31,30,31,30,31];
        if (clock.days>months[clock.month-1]){
          clock.days = 0;
          clock.months++;
        }
      }       
    }
  }    
}

这一行:

var months = [31,((clock.year%4==0)&&((clock.year%100!=0)||(clock.year%400==0)))?29:28,31,30,31,30,31,31,30,31,30,31];

创建每个月的月份和日期数组。因此很容易确定每月的天数如下:

days_in_jan = months[0]
days_in_feb = months[1]
...
days_in_dec = months[11]

答案 1 :(得分:0)

你不是。实际上你不会增加任何东西。如果你想要自己的时钟,那很好,但你仍然需要使用Date对象访问当前时间,所以当你想知道已经过了多少时间时,得到一个新的{{1对象并弄明白:

伪结构:

Date

在该功能中,比较月,日等。

老实说,如果你不喜欢这个答案,那么你就是自己的答案,作为答案,我怎么做这个随机的事情纯粹是一个思想练习"就是这样 - 思考练习。没有真正的意义,因此不应该在SO上询问

答案 2 :(得分:0)

正如其他人所做的那样,我建议使用Date对象,或像MomentJS这样的日期库,但似乎你想自己做一个练习。在这种情况下,如果要正确进行计算,您的代码将需要知道每月有多少天。考虑在代码中包含几个月的数组:

var monthLengths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

您还需要一个函数来确定它是否是闰年:

function isLeapYear(year) {
  return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0));
}  

有了这些,您应该能够通过检查数组来确定某个日期是否已超过其月份,以及使用闰年函数确定是否应该知道该月份(如果是2月份) 2月份算29天。