2012-02-29 76 views
5

Tôi có hai hộp văn bản chấp nhận Start DateEnd Date tương ứng, ở định dạng YYYY/MM/DD.Trừ ngày trong JavaScript

Tôi cần thông báo cho người dùng nếu anh ta chọn ngày kết thúc vượt quá ngày bắt đầu trước 50 ngày.

Dưới đây là những gì tôi có cho đến nay:

var startDate = new Date(document.getElementsByName('MYSTARTDATE').value); 
var endDate = new Date(document.getElementsByName('MYENDDATE').value); 
if ((endDate - startDate) > 50) 
{ 
    alert('End date exceeds specification'); 
    return false; 
} 

Chỉ cần làm ví dụ, khi tôi chọn Ngày bắt đầu như 2012/01/22 và ngày kết thúc như 2012/02/29

startDate = 'Sun Jan 22 00:00:00 UTC +0530 2012' 
endDate = 'Wed Feb 29 00:00:00 UTC +0530 2012' 

Và kết quả cho endDate - startDate3283200000, thay vì 38. Tôi đang làm gì sai?

Trả lời

9

3283200000 là 38 ngày tính bằng mili giây.

38 ngày x 24 giờ x 60 phút x 60 giây x 1000 mili giây

Ngoài ra, có 38 ngày giữa hai ngày, không phải 39.

Một giải pháp dễ dàng là để có một biến (không đổi thực sự) được định nghĩa là số mili giây trong một ngày:

var days = 24*60*60*1000; 

Và sử dụng biến đó như là một "đơn vị" trong so sánh của bạn:

if ((endDate - startDate) > 50*days) { 
    ... 
} 
+0

oh .. vậy tôi đoán tôi chỉ cần chia sự khác biệt bằng (24x60x60x1000) sau đó.Cảm ơn! – user656523

+0

Có, hãy xem chỉnh sửa của tôi để có giải pháp dễ đọc, dễ đọc. –

0

Giải pháp của Jeff B là không chính xác, vì thời gian tiết kiệm ánh sáng ban ngày. Nếu ngày bắt đầu là, giả sử, vào ngày 31 tháng 10 và ngày kết thúc là vào ngày 20 tháng 12, khoảng thời gian thực sự trôi qua giữa hai lần đó là 50 ngày cộng với 1 giờ, không phải 50 ngày. Điều này đặc biệt xấu nếu chương trình của bạn không quan tâm đến thời gian trong ngày và đặt tất cả thời gian vào lúc nửa đêm - trong trường hợp đó, tất cả các tính toán sẽ bị tắt bởi một cho toàn bộ mùa đông.

Một phần của cách chính xác để trừ ngày là khởi tạo đối tượng Ngày mới cho mỗi lần và sau đó sử dụng Mảng có số ngày trong mỗi tháng để tính số ngày thực sự đã qua.

Nhưng để làm mọi thứ tồi tệ hơn, những ngày mà Châu Âu thay đổi đồng hồ khác với ngày mà đồng hồ được thay đổi ở New York. Do đó, múi giờ một mình không đủ để xác định số ngày đã trôi qua; vị trí cũng là cần thiết.

Thời gian tiết kiệm ánh sáng ban ngày làm tăng thêm sự phức tạp đáng kể cho việc xử lý ngày. Trong trang web của tôi, chức năng cần thiết để tính chính xác số ngày trôi qua là gần một trăm dòng. Độ phức tạp thực sự phụ thuộc vào việc tính toán là phía máy khách hoặc phía máy chủ hoặc cả hai và ai đang xem dữ liệu.

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