2017-02-22 165 views
1

我想從兩個選定的日期計算天數,我的代碼不工作。是否有錯誤?計算兩天之間的天數

$(document).ready(function(){ 
 
      calulateDays() 
 
    }); 
 

 
    function calulateDays(){ 
 
     $('#levTo').blur(function(){ 
 
var levfrom=$('#levFrom').val(); 
 
    levto=$('#levTo').val(); 
 
    from, to,duration; 
 

 
from = moment(levfrom, 'YYYY-MM-DD'); 
 
to = moment(levto,'YYYY-MM-DD'); 
 
duration=to.diff(from,'days')  
 
$('#levDuration').val(duration + ' days'); 
 

 
}); 
 
}
\t \t \t \t  
 
    <label>Date From</label> 
 
    <input type="date" name="levFrom" id="levFrom" class="levFrom"> 
 
\t \t \t \t  
 
    <label >Date To</label> 
 
    <input type="date" name="levTo" id="levTo" class="levTo"> 
 
\t \t \t 
 
    <label >Duration</label> 
 
    <input type="text" name="levDuration" id="levDuration" class="levDuration" readonly="readonly"> 
 
\t \t \t \t

+0

您缺少對似乎正在使用的moment.js-library的引用。將其添加到您的頁面。 – Esko

+0

是的,我添加了插件'https:// cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.1/moment.min.js' – user7397787

回答

2

試試這個兄弟

$(document).ready(function(){ 
 
      calulateDays() 
 
     
 
    }); 
 

 
    function calulateDays(){ 
 
     //$('#levTo').on('keyup mouseup change',function(){ 
 
     $('#levTo').on('change',function(){ 
 
     var levfrom=$('#levFrom').val(); 
 
     var levto=$('#levTo').val(); 
 
     var from,to,duration; 
 
    
 
     from=moment(levfrom, 'YYYY-MM-DD'); 
 
     to=moment(levto,'YYYY-MM-DD'); 
 
     duration=to.diff(from,'days'); 
 
     $('#levDuration').val(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> 
 
<label>Date From</label> 
 
    <input type="date" name="levFrom" id="levFrom" class="levFrom"> 
 
\t \t \t \t  
 
    <label >Date To</label> 
 
    <input type="date" name="levTo" id="levTo" class="levTo"> 
 
\t \t \t 
 
    <label >Duration</label> 
 
    <input type="text" name="levDuration" id="levDuration" class="levDuration" readonly="readonly">

2

calulateDays功能缺失}。另外,js區分大小寫。因此,當您訪問它們時,您必須使用levfromlevto,小寫字母爲ft

$(document).ready(function(){ 
     calulateDays() 
}); 

function calulateDays(){ 
    $('#levTo').on('keyup mouseup change',function(){ 
    var levfrom=$('#levFrom').val(); 
     levto=$('#levTo').val(); 
     from,to,duration; 

    from=moment(levFrom, 'YYYY-MM-DD'); // HERE: levfrom 
    to=moment(levTo,'YYYY-MM-DD');  // HERE: levto 
    duration=to.diff(from,'days')  
    $('#levDuration').val(duration + ' days') 

    }); 
} // <==== HERE 

另外,還要考慮提高你的js代碼:

$(document).ready(calulateDays); 

    function calulateDays() { 
    $('#levTo').on('keyup mouseup change', function() { 
     var levfrom = $('#levFrom').val(), 
     levto = $('#levTo').val(), 
     from, to, duration; 

     from = moment(levfrom, 'YYYY-MM-DD'); 
     to = moment(levto, 'YYYY-MM-DD'); 
     duration = to.diff(from, 'days') 
     $('#levDuration').val(duration + ' days') 
    }); 
    } 
1

function calulateDays(){ 
 
     var levfromArr=$('#levFrom').val().split('-'),    levtoArr=$('#levTo').val().split('-'); 
 
     var leavefromDay=levfromArr.pop(); 
 
     var levfromMonth=levfromArr.pop(); 
 
     var levfromYear=levfromArr.pop(); 
 
     
 
     var levtoDay=levtoArr.pop(); 
 
     var levtoMonth=levtoArr.pop(); 
 
     var levtoYear=levtoArr.pop(); 
 
     
 
     var oneDay = 24*60*60*1000; 
 
     var firstDate = new Date(levfromYear,levfromMonth,leavefromDay); 
 
     var secondDate = new Date(levtoYear,levtoMonth,levtoDay); 
 

 
     var diffDays = Math.round(Math.abs((firstDate.getTime() -   secondDate.getTime())/(oneDay))); 
 
      
 
     $('#levDuration').val(diffDays + ' days') 
 
    
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> 
 
<label>Date From</label> 
 
    <input type="date" name="levFrom" id="levFrom" class="levFrom"> 
 
\t \t \t \t  
 
    <label >Date To</label> 
 
    <input type="date" name="levTo" id="levTo" class="levTo"> 
 
\t \t \t 
 
    <button onclick="calulateDays()" >Duration</button> 
 
    <input type="text" name="levDuration" id="levDuration" class="levDuration" readonly="readonly">

試試看。其工作片段

+0

謝謝。我可以使用'.blur() '?在我的代碼中輸入錯誤? – user7397787

+0

是的,您可以將此功能用於任何有效事件。我的函數是獨立於你的函數的,我使用了純粹的jQuery和JS的代碼inst.js。你的代碼中可能有初始化問題。 – RRajani

+0

您的代碼問題是導入librery。你可能不會導入你在代碼中使用的moment.js或jquery腳本。 – RRajani