Javascript yyyy-mm-dd格式中两天之间的差异(以天为单位)?

Javascript yyyy-mm-dd格式中两天之间的差异(以天为单位)?,javascript,date,datetime,Javascript,Date,Datetime,很抱歉,如果以前有人问过这个问题,但我找不到任何东西。下面是我想做的: new Date(response.departureDate).getTime() - new Date(response.arrivalDate).getTime() 我需要计算到达日期和离开日期之间的总天数(始终为整数)。这些日期是字符串,结构为'YYYY-MM-DD' 我该怎么做呢?您可以使用RegEx来更改它们 new Date(response.departureDate.replace(/-/g, "/"))

很抱歉,如果以前有人问过这个问题,但我找不到任何东西。下面是我想做的:

new Date(response.departureDate).getTime() - new Date(response.arrivalDate).getTime()
我需要计算到达日期和离开日期之间的总天数(始终为整数)。这些日期是字符串,结构为
'YYYY-MM-DD'


我该怎么做呢?

您可以使用
RegEx
来更改它们

new Date(response.departureDate.replace(/-/g, "/")).getTime()
    - new Date(response.arrivalDate.replace(/-/g, "/")).getTime()
因此,RegEx
.replace(/-/g,“/”
将所有的
-
替换为
/
,JavaScript将能够正确读取它。

您可以使用regexp,或者更简单的方法是熟悉
MomentJS
API,它可以让您非常顺利地处理JS中的日期(在节点和浏览器中工作)

它确实为您的工具箱添加了另一个工具,但只要您处理日期,它就绝对值得

与MomentJS同行的方式:

var depDate = moment(response.departureDate);
var arrDate = moment(response.arrivalDate);
var nbDays = depDate.diff(arrDate, 'days');

我希望这个例子对您有所帮助

除了.diff(),还可以使用力矩持续时间:

小提琴示例

示例代码片段:

$("#btn").on('click', function(e) {
    var fromDate = $('#fromDate').val(), 
        toDate = $('#toDate').val(), 
        from, to, druation;

    from = moment(fromDate, 'YYYY-MM-DD'); // format in which you have the date
    to = moment(toDate, 'YYYY-MM-DD');     // format in which you have the date

    /* using duration */
    duration = moment.duration(to.diff(from)).days(); // you may use duration

    /* using diff */
    //duration = to.diff(from, 'days')     // alternatively you may use diff

    /* show the result */
    $('#result').text(duration + ' days');

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.1/moment.min.js"></script>
From: <input id="fromDate" type='date' />
To: <input id="toDate" type='date' />&nbsp;&nbsp;
<button id="btn">Submit</button><hr />
<p id="result"></p>
$(“#btn”)。在('click',函数(e){
var fromDate=$('#fromDate').val(),
toDate=$('#toDate').val(),
从,到,德鲁瓦;
from=时刻(fromDate,'YYYY-MM-DD');//日期的格式
to=时刻(toDate,'YYYY-MM-DD');//日期的格式
/*使用期限*/
duration=矩.duration(to.diff(from)).days();//您可以使用duration
/*使用差异*/
//duration=to.diff(从'days')//或者您可以使用diff
/*显示结果*/
$(“#结果”).text(持续时间+天数);
});
发件人:
致:
提交


您可以使用类似的方法

function countDays(date1, date2)
{
    var one_day=1000*60*60*24;
    return Math.ceil((date1.getTime()- date2.getTime()) /one_day);
}

countDays(new Date(response.departureDate), new Date(response.arrivalDate));
看看迈尔斯的答案 只需将其更改为:

function parseDate(str) {
var mdy = str.split('-')
return new Date(mdy[2], mdy[0]-1, mdy[1]);
}

function daydiff(first, second) {
    return Math.round((second-first)/(1000*60*60*24));
}
和使用:

daydiff(parseDate(response.departureDate), parseDate(response.arrivalDate));

您必须使用MomentJS解决问题的更好方法我让JSFIDLE demo检查它是否非常有用最好添加一些代码。现在这是一个链接唯一的答案和链接可能腐烂。这是现在更好吗?现在更好<代码>:)好的,但区别大约是
86400000
。如何将这样的日期引用转换为天,Math.ceil?@JohnDoe
86400000
毫秒=
/1000
=
86400
秒,然后
/(60*60*24)
天。。。将是1天。最后您需要做:
date/(60*60*24*1000)
NO,不要用日期构造函数(或date.parse)解析字符串,这是非常不可靠的。手动解析日期字符串(2行代码或使用库)。@RobG您有更好的建议吗<代码>:)是的,可以使用两行函数(例如答案)安全且一致地解析字符串。否,不要使用日期构造函数(或Date.parse)解析字符串,这是非常不可靠的。手动解析日期字符串(两行代码或使用一个库)。我认为这取决于您是否可以信任响应:看起来John Doe可以,所以我不介意)OP正在征求建议。格式“YYYY-MM-DD”(ISO 8601无时区日期)将由兼容ECMAScript 2015的浏览器解析为UTC,这将使那些希望将其解析为本地格式的人感到惊讶。IE8将不会解析它,它仍然有大约8%的使用率(这比所有版本的桌面Safari加起来还要多)。某些浏览器的某些版本会将其解析为本地。因此,即使格式得到了保证,也无法进行适当的解析。