简体   繁体   English

如何计算两个日期之间的天数

[英]How to calculate number of days between two dates

I have two input dates taking from Date Picker control.我有两个来自日期选择器控件的输入日期。 I have selected start date 2/2/2012 and end date 2/7/2012.我选择了开始日期 2/2/2012 和结束日期 2/7/2012。 I have written following code for that.我为此编写了以下代码。

I should get result as 6 but I am getting 5.我应该得到 6 的结果,但我得到 5。

function SetDays(invoker) {   
    var start = $find('<%=StartWebDatePicker.ClientID%>').get_value();
    var end = $find('<%=EndWebDatePicker.ClientID%>').get_value();

    var oneDay=1000 * 60 * 60 * 24;
    var difference_ms = Math.abs(end.getTime() - start.getTime())
    var diffValue = Math.round(difference_ms / oneDay);
}

Can anyone tell me how I can get exact difference?谁能告诉我如何才能得到确切的区别?

http://momentjs.com/ or https://date-fns.org/ http://momentjs.com/https://date-fns.org/

From Moment docs:来自 Moment 文档:

var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b, 'days')   // =1

or to include the start:或包括开始:

a.diff(b, 'days')+1   // =2

Beats messing with timestamps and time zones manually.击败手动处理时间戳和时区。

Depending on your specific use case, you can either根据您的特定用例,您可以

  1. Use a/b.startOf('day') and/or a/b.endOf('day') to force the diff to be inclusive or exclusive at the "ends" (as suggested by @kotpal in the comments).使用a/b.startOf('day')和/或a/b.endOf('day')强制差异在“结束”处包含或排除(如@kotpal 在评论中所建议的)。
  2. Set third argument true to get a floating point diff which you can then Math.floor , Math.ceil or Math.round as needed.将第三个参数设置为true以获得浮点差异,然后您可以根据需要Math.floorMath.ceilMath.round
  3. Option 2 can also be accomplished by getting 'seconds' instead of 'days' and then dividing by 24*60*60 .选项 2 也可以通过获取'seconds'而不是'days'然后除以24*60*60

If you are using moment.js you can do it easily.如果您使用的是moment.js ,则可以轻松完成。

var start = moment("2018-03-10", "YYYY-MM-DD");
var end = moment("2018-03-15", "YYYY-MM-DD");

//Difference in number of days
moment.duration(start.diff(end)).asDays();

//Difference in number of weeks
moment.duration(start.diff(end)).asWeeks();

If you want to find difference between a given date and current date in number of days (ignoring time), make sure to remove time from moment object of current date as below如果您想在天数(忽略时间)中找到给定日期和当前日期之间的差异,请确保从当前日期的时刻对象中删除时间,如下所示

moment().startOf('day')

To find difference between a given date and current date in number of days查找给定日期和当前日期之间的天数差异

var given = moment("2018-03-10", "YYYY-MM-DD");
var current = moment().startOf('day');

//Difference in number of days
moment.duration(given.diff(current)).asDays();

Try:尝试:

//Difference in days

var diff =  Math.floor(( start - end ) / 86400000);
alert(diff);

This works for me:这对我有用:

 const from = '2019-01-01'; const to = '2019-01-08'; Math.abs( moment(from, 'YYYY-MM-DD') .startOf('day') .diff(moment(to, 'YYYY-MM-DD').startOf('day'), 'days') ) + 1 );

Try this Using moment.js (Its quite easy to compute date operations in javascript)试试这个使用 moment.js (在 javascript 中计算日期操作很容易)

firstDate.diff(secondDate, 'days', false); firstDate.diff(secondDate, 'days', false); // true|false for fraction value // true|false 表示分数

Result will give you number of days in integer.结果将为您提供整数天数。

Also you can use this code: moment("yourDateHere", "YYYY-MM-DD").fromNow().您也可以使用此代码:moment("yourDateHere", "YYYY-MM-DD").fromNow()。 This will calculate the difference between today and your provided date.这将计算今天和您提供的日期之间的差异。

I made a quick re-usable function in ES6 using Moment.js.我使用 Moment.js 在 ES6 中创建了一个快速可重用的函数。

 const getDaysDiff = (start_date, end_date, date_format = 'YYYY-MM-DD') => { const getDateAsArray = (date) => { return moment(date.split(/\\D+/), date_format); } return getDateAsArray(end_date).diff(getDateAsArray(start_date), 'days') + 1; } console.log(getDaysDiff('2019-10-01', '2019-10-30')); console.log(getDaysDiff('2019/10/01', '2019/10/30')); console.log(getDaysDiff('2019.10-01', '2019.10 30')); console.log(getDaysDiff('2019 10 01', '2019 10 30')); console.log(getDaysDiff('+++++2019!!/###10/$$01', '2019-10-30')); console.log(getDaysDiff('2019-10-01-2019', '2019-10-30')); console.log(getDaysDiff('10-01-2019', '10-30-2019', 'MM-DD-YYYY')); console.log(getDaysDiff('10-01-2019', '10-30-2019')); console.log(getDaysDiff('10-01-2019', '2019-10-30', 'MM-DD-YYYY'));
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js"></script>

MVC i have two input text 1: number of day 2: datetime picker MVC 我有两个输入文本 1:天数 2:日期时间选择器

 @Html.TextBox("HeaderINVID", null, new { @id = "HeaderINVID", @type = "number", @class = "form-control", autocomplete = "off", placeholder = "Day Count " })

  @Html.TextBox("HeaderINVDT", null, new { id = "HeaderINVDT", @class = "form-control format-picker", autocomplete = "off", placeholder = " Date" })

javascipt脚本

to calculate number from date use从日期使用计算数字

    $("#HeaderINVID").bind("keyup", function (e) {
        var INVID = $("#HeaderINVID").val();
        var date = moment()
            .add(INVID, 'd')
            .toDate(); 
        $("#HeaderINVDT").val(moment(date).format('YYYY-MM-DD')) ;
    })

to calculate number of days between two dates use计算两个日期之间的天数使用

  $("#HeaderINVDT").bind('change', function (e) {
        var StDT = moment($("#HeaderINVDT").val()).startOf('day');
        var NODT = moment().startOf('day');
        $("#HeaderINVID").val(StDT.diff(NODT, 'days'));
    })

do not forget to add http://momentjs.com/不要忘记添加http://momentjs.com/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM