2010-02-25 27 views
5

Tôi nhận được hai chuỗi được định dạng như (Định dạng Braxin): "DD/MM/YYYY", tôi cần so sánh cả hai. Kể từ khi trường đầu tiên là bắt đầu và cuối cùng là kết thúc,Javascript để so sánh hai ngày, từ chuỗi, bắt đầu <= end

xác nhận của tôi là bắt đầu < = cuối

Date.new (bắt đầu) đang tạo 'ngày không hợp lệ' ngay cả trên ISO!

Trả lời

8

Không sử dụng Date.new. Sử dụng new Date(). Bởi vì định dạng của chuỗi ngày của bạn, tôi muốn giới thiệu grabbing từng lĩnh vực riêng biệt và chuyển chúng thành các nhà xây dựng:

var startYear = parseInt(document.getElementById('startYear'), 10); 
var startMonth = parseInt(document.getElementById('startMonth'), 10) - 1; // as per Residuum's comment 
var startDay = parseInt(document.getElementById('startDay'), 10); 
var start = new Date(startYear, startMonth, startDay); 

vv Nếu bạn đang trao một chuỗi ngày, sau đó bạn có thể sử dụng phương pháp mờ kẹo để có được mỗi trường từ chuỗi. Tôi không chắc chắn nếu các nhà xây dựng ngày sẽ chấp nhận chuỗi unparsed cho các lĩnh vực cá nhân, tuy nhiên.

, một khi bạn có hai ngày mà bạn muốn so sánh, chỉ cần so sánh giá trị của họ trong mili giây kể từ khi kỷ nguyên:

function isValid(start, end) { 
    return start.getTime() < end.getTime(); 
} 
+0

tháng được zero-có trụ sở tại Javascript, do đó hãy chắc nó startMonth = parseInt (document.getElementById ('startMonth'), 10) - 1; – Residuum

+0

Rất tiếc. Cảm ơn! –

+0

Ok, cảm ơn đặc biệt cho quan sát tháng - 1 .. Nếu không, tất cả các ngày tháng 12 sẽ không thành công =) –

2

bạn có thể làm được điều này, nếu bạn biết ngày của bạn sẽ luôn được định dạng theo cùng một cách dd/mm/yyyy

today = "23/02/1001"; 
dateComponents = today.split("/"); 
date = new Date(dateComponents[2], dateComponents[1] - 1, dateComponents[0]); 

nhưng một giải pháp tốt hơn là nhìn vào trang này có Datejs mà là một lựa chọn tốt để xử lý ngày.

+0

Số tháng không dựa trên Javascript, vì vậy hãy đặt ngày tháng = Ngày mới (dateComponents [2], dateComponents [1] - 1, dateComponents [0]); – Residuum

5

Có thư viện xử lý ngày đẹp gọi là datejs có phương thức parseExact(dateStr, format).

+0

Tôi sẽ kiểm tra điều này, tnxs! –

1

nhanh 'n bẩn:

function is_valid (start , end) { 
    return start.split('/').reverse().join('') <= end.split('/').reverse().join('') ; 
} 

Đó là, chia ngày thành các thành phần, đảo ngược thứ tự tham gia cùng họ một lần nữa và làm một so sánh chuỗi.

Chỉnh sửa: Như đã lưu ý trong nhận xét, tất nhiên điều này sẽ không hoạt động nếu tháng/ngày nhỏ hơn 10 của bạn không được đệm.

+0

Chuỗi định dạng ngày dd/mm/yyyy thường không giả định không có đệm. Điều này không hoạt động nếu các thành phần ngày không phải lúc nào cũng không được đệm. Ví dụ: '9/1/2010' và '10/1/2010 '. –

+0

nếu nó không có đệm thì nó sẽ không hoạt động ... với tôi chỉ ra dd thay vì d và mm thay vì m có nghĩa là 2 chữ số nhưng tôi đoán đó không nhất thiết phải là trường hợp. – Pat

0

Dưới đây là tất cả các nhà xây dựng sẵn cho các đối tượng ngày trong Javascript:

dateobject = new Date(); // returns date of current time stamp 
         // on the browser 
dateobject = new Date("Month Day, Year Hours:Minutes:Seconds"); 
dateobject = new Date(Year, Month, Day); 
dateobject = new Date(Year, Month, Day, Hours, Minutes, Seconds); 
dateobject = new Date(Milliseconds); 

Chọn một trong những bạn cố gắng sử dụng, nhưng tôi sẽ đi cho new Date(Year, Month, Day); trong trường hợp của bạn.

EDIT: Lưu ý: Month là zero-based trong Javascript, vì vậy ngày 1 tháng 1 năm 2010, sẽ new Date(2010, 0, 1) và ngày 31 tháng 12 2011 là new Date(2010, 11, 31).

+0

Quan sát tháng này rất tiện dụng, và JS rất ngu ngốc –

+0

Các công cụ tháng là một câu hỏi rất kỳ lạ JS, như có một số người khác, nhưng nếu bạn bẻ JS nó có thể là một ngôn ngữ thực sự tốt đẹp. – Residuum

1

mới 'nóng bỏng' trong thời gian thế giới JS: http://momentjs.com/ Phù hợp sử dụng hợp cụ thể này cũng