2013-04-18 52 views
41

Tôi cần một điều, Tôi cần kiểm tra xem một ngày, có phải là một chuỗi trong fomat dd/mm/yyyy được chứa giữa hai ngày, với cùng định dạng (dd/mm/yyyy)kiểm tra xem một ngày có giữa hai ngày (javascript)

tôi đã cố gắng này, nhưng không hoạt động:

var dateFrom = "02/05/2013"; 
var dateTo = "02/09/2013"; 
var dateCheck = "02/07/2013"; 

var from = Date.parse(dateFrom); 
var to = Date.parse(dateTo); 
var check = Date.parse(dateCheck); 

if((check <= to && check >= from))  alert("date contained"); 

tôi đã sử dụng trình gỡ lỗi và kiểm tra, đến và đi từ các biến đã isNaN giá trị Ông có thể giúp tôi?

Trả lời

59

Date.parse hỗ trợ định dạng mm/dd/yyyy không dd/mm/yyyy. Cho rằng hoặc là bạn phải sử dụng một thư viện như moment.js hoặc làm điều gì đó như đưa ra dưới đây

var dateFrom = "02/05/2013"; 
var dateTo = "02/09/2013"; 
var dateCheck = "02/07/2013"; 

var d1 = dateFrom.split("/"); 
var d2 = dateTo.split("/"); 
var c = dateCheck.split("/"); 

var from = new Date(d1[2], parseInt(d1[1])-1, d1[0]); // -1 because months are from 0 to 11 
var to = new Date(d2[2], parseInt(d2[1])-1, d2[0]); 
var check = new Date(c[2], parseInt(c[1])-1, c[0]); 

console.log(check > from && check < to) 
+1

+1 để phân tích cú pháp chuỗi ngày tháng một cách chính xác và không bỏ qua nó đến trình phân tích cú pháp phụ thuộc triển khai. – RobG

+0

Xem xét quy ước db, ngày đầu tiên phải được bao gồm. ví dụ. 'check> = from && check

+0

@Diode kiểm tra: 02/23/2018 từ: 11/20/2018 đến: 12/31/2018 nó trả về true. – chudasamachirag

20

Thay vì so sánh ngày trực tiếp, hãy so sánh giá trị getTime() của ngày. Hàm getTime() trả về số mili giây kể từ ngày 1 tháng 1 năm 1970 dưới dạng số nguyên - nên tầm thường để xác định xem một số nguyên có nằm giữa hai số nguyên khác hay không.

Something như

if((check.getTime() <= to.getTime() && check.getTime() >= from.getTime()))  alert("date contained"); 
+0

'NaN' không có một' GetTime' hay một 'phương pháp getTime'? – Bergi

+0

Yêu thích nó, đơn giản như vậy, cảm ơn –

8

Hãy thử như dưới đây, Nó sẽ Hep bạn ...

Fiddle:http://jsfiddle.net/RYh7U/146/

Script:

if(dateCheck("02/05/2013","02/09/2013","02/07/2013")) 
    alert("Availed"); 
else 
    alert("Not Availed"); 

function dateCheck(from,to,check) { 

    var fDate,lDate,cDate; 
    fDate = Date.parse(from); 
    lDate = Date.parse(to); 
    cDate = Date.parse(check); 

    if((cDate <= lDate && cDate >= fDate)) { 
     return true; 
    } 
    return false; 
} 
+0

WTH là sự khác biệt? – Bergi

+0

@Bergi: Nếu ngày là 'NAN' thì hàm này' return False' Vì vậy, 'Date bạn check Or Pass' là' Not Availed' hoặc 'In Valid' và đây là sự khác biệt HELL giữa mã của tôi và anh ta – Pandian

+0

Nhưng điều kiện if của OP thực hiện điều đó? Và câu hỏi là về ngày * là * 'NaN' ở vị trí đầu tiên (mà nó không nằm trong tất cả các trình duyệt) – Bergi

-1

Hãy thử

này
var gdate='01-05-2014'; 
     date =Date.parse(gdate.split('-')[1]+'-'+gdate.split('-')[0]+'-'+gdate.split('-')[2]); 
     if(parseInt(date) < parseInt(Date.now())) 
     { 
      alert('small'); 
     }else{ 
      alert('big'); 
     } 

Fiddle

4

Câu trả lời có 50 phiếu không kiểm tra ngày chỉ kiểm tra trong nhiều tháng. Câu trả lời đó không đúng. Mã bên dưới hoạt động.

var dateFrom = "01/08/2017"; 
var dateTo = "01/10/2017"; 
var dateCheck = "05/09/2017"; 

var d1 = dateFrom.split("/"); 
var d2 = dateTo.split("/"); 
var c = dateCheck.split("/"); 

var from = new Date(d1); // -1 because months are from 0 to 11 
var to = new Date(d2); 
var check = new Date(c); 

alert(check > from && check < to); 

Đây là mã đăng tải trong câu trả lời khác và tôi đã thay đổi ngày và đó là cách tôi nhận thấy nó không hoạt động

var dateFrom = "02/05/2013"; 
var dateTo = "02/09/2013"; 
var dateCheck = "07/07/2013"; 

var d1 = dateFrom.split("/"); 
var d2 = dateTo.split("/"); 
var c = dateCheck.split("/"); 

var from = new Date(d1[2], parseInt(d1[1])-1, d1[0]); // -1 because months are from 0 to 11 
var to = new Date(d2[2], parseInt(d2[1])-1, d2[0]); 
var check = new Date(c[2], parseInt(c[1])-1, c[0]); 


alert(check > from && check < to); 
0

Hãy thử điều này:

HTML

<div id="eventCheck"></div> 

JAVASCRIPT

// ----------------------------------------------------// 
// Todays date 
var today = new Date(); 
var dd = today.getDate(); 
var mm = today.getMonth()+1; //January is 0! 
var yyyy = today.getFullYear(); 

// Add Zero if it number is between 0-9 
if(dd<10) { 
    dd = '0'+dd; 
} 
if(mm<10) { 
    mm = '0'+mm; 
} 

var today = yyyy + '' + mm + '' + dd ; 


// ----------------------------------------------------// 
// Day of event 
var endDay = 15; // day 15 
var endMonth = 01; // month 01 (January) 
var endYear = 2017; // year 2017 

// Add Zero if it number is between 0-9 
if(endDay<10) { 
    endDay = '0'+endDay; 
} 
if(endMonth<10) { 
    endMonth = '0'+endMonth; 
} 

// eventDay - date of the event 
var eventDay = endYear + '/' + endMonth + '/' + endDay; 
// ----------------------------------------------------// 



// ----------------------------------------------------// 
// check if eventDay has been or not 
if (eventDay < today) { 
    document.getElementById('eventCheck').innerHTML += 'Date has passed (event is over)'; // true 
} else { 
    document.getElementById('eventCheck').innerHTML += 'Date has not passed (upcoming event)'; // false 
} 

Fiddle: https://jsfiddle.net/zm75cq2a/

Các vấn đề liên quan