2013-06-29 4 views
1

Я пытаюсь вычислить разницу между двумя датами, я написал функцию java script, и она отлично работает, но проблема в том, что она имеет дело с днями как месяц, так и наоборот.рассчитать разницу между двумя датами

например: , если первая дата 2/7/2013, а вторая дата - 3/7/2013, то дает мне результат 30 дней вместо 1 дня.

вот мой код:

<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery- ui.css" /> 
<script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script> 

<script> 
$(function() { 
$("#from").datepicker({ 
defaultDate: "+1w", 
changeMonth: true, 
numberOfMonths: 3, 
onClose: function(selectedDate) { 
$("#to").datepicker("option", "minDate", selectedDate); 
}}); 
$("#to").datepicker({ 
defaultDate: "+1w", 
changeMonth: true, 
numberOfMonths: 3, 
onClose: function(selectedDate) { 
$("#from").datepicker("option", "maxDate", selectedDate); 
} 
}); 
}); 
</script> 
<form method="post" action="" name="date"> 

<label for="from"> Start Date : </label> 
<input type="text" id="from" name="start" /> 
<br/> 
<label for="to"> End Date : </label> 
<input type="text" id="to" name="end"/> 
<br/> 
<input type="submit" name="Submit" value="reserve" onclick="setDifference(this.form);"/></p> 

<input type="hidden" name="result" /> 
</form> 


<script type="text/javascript"> 

function setDifference(frm) { 
var dtElem1 = frm.elements['start']; 
var dtElem2 = frm.elements['end']; 
var resultElem = frm.elements['result']; 

if(!dtElem1 || !dtElem2 || !resultElem) { 
return; 
} 

var x = dtElem1.value; 
var y = dtElem2.value; 
var arr1 = x.split('/'); 
var arr2 = y.split('/'); 


var dt1 = new Date(); 
dt1.setFullYear(arr1[2], arr1[1], arr1[0]); 
var dt2 = new Date(); 
dt2.setFullYear(arr2[2], arr2[1], arr2[0]); 

resultElem.value = (dt2.getTime() - dt1.getTime())/(60 * 60 * 24 * 1000); 
} 
</script> 

<?php 

$from= $_POST['start']; 
$to= $_POST['end']; 
$result = $_POST['result']; 
?> 

Check In Date : <?php echo $from; ?></label><br /> 
Check Out Date : <?php echo $to; ?></label><br /> 
Number Of days: <?php echo $result; ?></label><br /> 
<BR/> 
+1

выглядит формате мм/дд/гггг не дд/мм/гггг –

+1

Java ! = JavaScript. –

+1

Использовать moment.js (http://momentjs.com/docs/) – Kersten

ответ

0

мм/дд/гггг не дд/мм/гггг

var dt1 = new Date(); 
dt1.setFullYear(arr1[1], arr1[2], arr1[0]); 
var dt2 = new Date(); 
dt2.setFullYear(arr2[1], arr2[2], arr2[0]); 

resultElem.value = (dt2.getTime() - dt1.getTime())/(60 * 60 * 24 * 1000); 
+1

Я пробовал код, и он дал мне этот результат: Дата заезда: 07/02/2013 Дата выезда: 07/03/2013 Номер Из дней: 365 – user2521365

+0

он должен быть 1 день не 365 – user2521365

+0

Не нужно вызывать '.getTime()' на '' '' '' '' '' '' '' '' '' '' '' '' '' 'можно просто вычесть объекты' Date' ... так '(dt2 - dt1) 'будет работать нормально – Ian