js 日期 跨月的计算问题(跨月的话就不对,求高手解答):

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 日期 跨月的计算问题(跨月的话就不对,求高手解答):相关的知识,希望对你有一定的参考价值。

var fArray = rowCostDateFrom.value.split("-");
var sArray = rowCostDateTo.value.split("-");
var fDate = new Date(fArray[0],fArray[1],fArray[2]);
var sDate = new Date(sArray[0],sArray[1],sArray[2]);
var t = Math.abs(fDate.getTime()-sDate.getTime());
var days = t/1000/60/60/24;
if(days+1< rowNumber.value)
window.alert("所填数量超过所选的日期差!");
rowNumber.focus();
return false;

  var d1 = new Date(2014, 11, 4);
  var d2 = new Date(2014, 10, 29);
  alert( (d1.getTime() - d2.getTime()) / 60000 /24/60);

这个计算本身在是没有问题的,不管是否跨月。

看你的array的值是否正常, 看 rowNumber.value 是否正确引用到你期望的数字。

追问

非常感谢,
你这方法计算结果是“5”,但是应该6才对,然后6+1=7,实际应该为7天;
我原来的方法也是的,结果是5,不知道问题出现在哪里

追答

第二个参数的month是从0-11的,不是从1-12.
所以上边的代码两个日期之间是没有31日的。

此对象启用日期和时间的基本存储和检索。Date 构造函数有两种形式。

function Date( [dateVal : Number | String | System.DateTime ] )

function Date( year : int, month : int, date : int[, hours : int [, minutes : int [, seconds : int [, ms : int]]]] )

参数
dateVal
可选项。如果是数值,dateVal 以协调通用时间表示指定日期与 1970 年 1 月 1 日午夜之间相差的毫秒数。如果是字符串,则按照 parse 方法中的规则对 dateVal
进行分析。dateVal 也可以是 .NET 日期值。

year
必选。年份全称,如 1976(而不是 76)。

month
必选。月份,用从 0 到 11 的整数表示(1 月至 12 月)。

date
必选。日期,用从 1 到 31 的整数表示。

hours
可选项。如果提供了 minutes 则必须给出该参数。一个指定小时的,从 0 到 23 的整数(午夜到 11pm)。

minutes
可选项。如果提供了 seconds 则必须给出该参数。一个指定分钟的,从 0 到 59 的整数。

seconds
可选项。如果提供了 milliseconds 则必须给出该参数。一个指定秒的,从 0 到 59 的整数。

ms
可选项。一个指定毫秒的,从 0 到 999 的整数。

追问

果然是的,谢谢!非常谢谢!

追答

如果解决了,别忘了采纳一下噢。

参考技术A function aa()
    var date1=new Date(2014,9,10);    //开始日期
    var date2=new Date(2014,10,10);    //结束时间
    var date3=date2.getTime()-date1.getTime()  //时间差的毫秒数
    var days=Math.floor(date3/(24*3600*1000))    //相差的天使
    alert(days);
    

追问

非常感谢,
不过你试下这两个日期:
var date1=new Date(2014,10,31); //开始日期
var date2=new Date(2014,11,01); //结束时间

追答

月份是从0开始的
你的第一个日期是2014年11月31日 没有这一天

计算两个时间相差的天数(支持跨月跨年)

计算两个时间相差的天数(支持跨月、跨年):

    /**
     * JDK 8计算两个时间相差的天数,支持跨月、跨年
     * @param startTimeStamp 开始时间戳
     * @param endTimeStamp 结束时间戳
     * @return 相距天数,若开始时间大于结束时间,
     * 则返回对应复数
     */
    public long diffDays(long startTimeStamp,long endTimeStamp)
        LocalDate startTime = Instant.ofEpochMilli(startTimeStamp).atZone(ZoneOffset.ofHours(8)).toLocalDate();
        LocalDate endTime = Instant.ofEpochMilli(endTimeStamp).atZone(ZoneOffset.ofHours(8)).toLocalDate();
        return ChronoUnit.DAYS.between(startTime, endTime);
    

以上是关于js 日期 跨月的计算问题(跨月的话就不对,求高手解答):的主要内容,如果未能解决你的问题,请参考以下文章

oracle编写存储过程计算一个月的数据

代码日期计算为何会差一个月那,求高手指点

计算两个时间相差的天数(支持跨月跨年)

计算两个时间相差的天数(支持跨月跨年)

vue:element.ui中中日期时间范围选择控件怎么设置选择的范围,不能跨月选择

js怎样获取当前日期前10天的日期,或者是前n天的