2012-03-08 19 views

Trả lời

2

Cảm ơn tất cả! Didnt tìm thấy bất kỳ điều nào ở trên để làm việc, nhưng cuối cùng nó đã làm việc. Đã phải hack một chút;)

Tôi đã làm điều đó bằng cách tách ngày bằng cách sử dụng getMonth, getDate và getYear và phân tích cú pháp và sau đó so sánh nó. Nó hoạt động giống như tôi muốn:

Date.parse(document.getElementById("DateId").value) < Date.parse(dateToday.getMonth() + "/" + dateToday.getDate() + "/" + dateToday.getYear()) 
1

Nhìn vào Date object tài liệu.

Bạn cần một đối tượng Ngày có ngày đã nhập (sử dụng phương thức khởi tạo hoặc phương thức setMonth vv) và một với ngày hiện tại (không có đối số cho hàm tạo). Sau đó, bạn có thể sử dụng getTime để nhận dấu thời gian UNIX trên cả hai đối tượng và so sánh chúng.

0

Hãy xem http://www.datejs.com/. Nó sẽ giúp bạn với thao tác ngày chuẩn

+0

Datejs quá mức cần thiết để so sánh ngày đơn giản, đặc biệt là khi ngày ở định dạng đã biết. Nó không đáng giá bao gồm cả thư viện * khác *. Nó làm tôi ấn tượng như một ứng dụng đồ chơi - ấn tượng lúc đầu, nhưng khi thử một số biểu diễn ngôn ngữ tự nhiên trong thế giới thực, nó không đủ mạnh. Ví dụ: "mười giờ", "6 tối nay", "hai ngày kể từ hôm nay". Nó chưa được cập nhật từ năm 2007, do đó, không có nhiều hy vọng về sự mạnh mẽ được thêm vào. – gilly3

+0

Vâng, tôi hiểu ý bạn là gì, nhưng việc thực hiện các công cụ ngày trong JavaScript có thể mất rất nhiều thời gian nếu bạn muốn làm điều đó đúng. Tôi nghĩ rằng việc sử dụng một thư viện bên ngoài có giá trị thêm chi phí, nhưng tôi đồng ý rằng nó phải được duy trì và ổn định. Cá nhân tôi đã không thực hiện rất nhiều công việc với datejs, vì vậy tôi chỉ có thể cho rằng bạn đúng. Tự mình xây dựng những thứ này là phản tác dụng và tất cả mã mới đều có lỗi, vì vậy tôi luôn cố gắng sử dụng lại các công cụ hiện có và thử nghiệm. – koenpeters

3

Chuyển đổi chuỗi thành một ngày bằng cách sử dụng new Date(dateString). Sau đó bình thường hóa ngày hôm nay để bỏ qua thông tin thời gian bằng cách sử dụng today.setHours(0, 0, 0, 0). Sau đó, bạn chỉ có thể so sánh số ngày là bạn có trên:

var date = new Date(dateInput); 
if (isNaN(date)) { 
    alert("please enter a date"); 
} 
else { 
    var today = new Date(); 
    today.setHours(0, 0, 0, 0); 
    date.setHours(0, 0, 0, 0); 
    var dateTense = "present"; 
    if (date < today) { 
     dateTense = "past"; 
    } 
    else if (date > today) { 
     dateTense = "future"; 
    } 
    alert("You entered a " + dateTense + " date"); 
} 

Demo:http://jsfiddle.net/w2sJd/

+0

Điều này làm việc cho tôi. –

-3
function compareDate(inputDateString) { 
    var inputDate, now; 
    inputDate = new Date(inputDateString); 
    now = new Date(); 
    if (inputDate < now) { 
    console.log("You entered past date"); 
    } 
    else if (inputDate > now) { 
    console.log("You entered future date"); 
    } 
    else if (inputDate === now) { 
    console.log("You entered present date"); 
    } 
    else { 
    console.log("please enter a date"); 
    } 
} 
+3

Điều này sẽ không hoạt động cho ngày hôm nay vì hai lý do. Đầu tiên, bạn đang so sánh bằng tham chiếu thay vì theo giá trị. 'inputDate' không tham chiếu cùng một đối tượng Date như' now', mặc dù giá trị của chúng có thể bằng nhau. Thứ hai, một ngày được tạo bằng cách phân tích cú pháp 'MM/dd/yyyy' sẽ có giờ, phút, giây và ms bằng' 0', trong khi 'new Date()' sẽ chứa thông tin thời gian (trừ 1 ms mỗi ngày) . – gilly3