【问题标题】:hours difference between two years (With leap year) in javascriptjavascript中两年(闰年)之间的小时差
【发布时间】:2015-04-08 07:18:43
【问题描述】:

如何在 javascript 中获取两年(闰年)之间的小时差

我有两个2015和2014年

var year1="2015";
var year="2016";

我想通过一行代码(有闰年和没有闰年)获得上述年份之间的总小时数!。

我已经尝试过下面的代码

// get hours from one year
    var date = new Date;        
    var Hours= date.getFullYear().getHours();


 // get hours between two years    

    var Hours= (date.getFullYear()-dat2.getFullYear()).getHours()

但这对我来说有些不对劲。

【问题讨论】:

  • 你有没有尝试过?
  • @KooiInc 是的,我尝试了一些代码,但我的代码只在没有闰年的情况下工作。
  • 如果您在问题中显示您的试用版,我们可以为您提供更好的帮助
  • 我已经更新了我的问题
  • var date = new Date();使用括号!

标签: javascript jquery angularjs momentjs


【解决方案1】:

你可以使用类似这样的函数:

function getHoursBetweenYears(startYear, endYear) {
    var startDate = new Date(startYear, 0, 1),
        endDate = new Date(endYear, 0 ,1);

    return (+endDate - +startDate) / 3600000;
}

这样的用法:

getHoursBetweenYears(2012, 2013) // 8784

【讨论】:

  • 可以放在一行 tbh
【解决方案2】:

日期对象是你的保护者。 获取时差。然后乘以 min、s、ms。 为您提供不同年份之间的总时差。

var year=2015,
year1=2016,
timeDiff =(new Date("01/01/"+year1)-new Date("01/01/"+year))/(1000*60*60);

【讨论】:

    【解决方案3】:

    闰年应按年和月指定。所以 三月 d + 59 如果闰年加 1 …。取决于 十二月 d + 334 闰年加 1

    【讨论】:

      【解决方案4】:

      你可以试试这样的。

      hours = ((new Date()).setFullYear( 2016 ) - (new Date()).setFullYear( 2015 ))/(1000*3600);
      

      【讨论】:

        【解决方案5】:

        查看演示jsFiddle

        var start = new Date(2015, 0, 0);
        var end = new Date(2016, 0, 0);
        var diff = end - start;
        var oneDay = 1000 * 60 * 60;
        var day = Math.floor(diff / oneDay);
        alert("Hours: " + day);
        

        回答

        Hours: 8760
        

        【讨论】:

        • 你好@RameshRajendran 因为它有效。我是 Date 对象,因此检查休假是否使用 366 天,否则为 365 天。
        【解决方案6】:

        计算两个日期(包括开始年份的第一天和结束年份的最后一天)的毫秒差,然后将结果除以 3600000(1000 * 60 * 60 = 毫秒为一小时):

        // difference in hours for two whole years (2015-2016)
        var hourdiff = (new Date('2017/01/01') - new Date('2014/12/31'))/(1000*60*60);
        

        您可以创建一个Date 扩展来计算某一年的小时数:

        Date.prototype.hoursInYear = function() {
          return ( (new Date(this.getFullYear()+1, 0, 1)) - 
                   (new Date(this.getFullYear()-1, 11, 31)) ) / 3600000; }
        // usage
        new Date(1997, 0, 1).hoursInYear(); // => 8784 
        new Date(2008, 0, 1).hoursInYear(); // => 8808 (leap year)
        

        甚至(闰年的小时数不变)

        Date.prototype.hoursInYear = function() {
          return new Date(this.getFullYear(), 1, 29).getMonth() == 1 
                  ? 8808 : 8784;
        }
        

        最后,使用Date 扩展,这可能是一种计算从 [startyear] 开始的 [n 年] 中小时数的方法:

        function calcHours(startyear, numyears) {
          return isNaN(new Date(startyear, 0, 1))
                 ? null // invalid year value
                 : Array.apply(null, {0: startyear, length: numyears})
                   .map(function(v, i) {return v == this ? v : this + 1;}, startyear)
                   .reduce( function(a, b) { 
                             return a +  new Date(b, 0, 1)
                                           .hoursInYear();}, 0);
        }
        // usage
        calcHours(2000, 2); //=> 17592 (2000 is leap year)
        calcHours(2001, 2); //=> 17568
        

        【讨论】:

          【解决方案7】:

          获取这两年的秒数。 setFullYear 为您提供以毫秒为单位的 unix 时间戳。除以 1000,你有几秒钟。得到两年之间的差,然后除以 3600(每小时秒数)。那么你就有了不同的小时数。

          function getDiffHours (year1, year2) {
              var d1 = new Date().setFullYear(year1) / 1000;
              var d2 = new Date().setFullYear(year2) / 1000;
              var diff = Math.abs(d2 - d1);
              return  Math.floor(diff / 3600);
          }
          

          【讨论】:

            猜你喜欢
            • 2021-03-11
            • 2016-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-04-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多