2012-12-05 51 views
7

Tôi muốn so sánh ngày ISO 8601 trong javascript dưới dạng chuỗi thay vì tạo đối tượng Ngày cho mỗi chuỗi và so sánh các đối tượng.So sánh các chuỗi ngày tháng ISO 8601 trong javascript

var date_array = ['2012-10-01','2012-11-27','2012-12-23']; 
console.log(date_array[0] < date_array[1]) // gives true 
console.log(date_array[1] > date_array[2]) // gives false 

Lý do của tôi để làm điều này là tôi tin rằng so sánh chuỗi phải nhanh hơn so với việc tạo đối tượng cho mỗi chuỗi ngày và so sánh các đối tượng.

Những so sánh này dường như hoạt động như mong đợi trong một số trình duyệt. Tôi có thể mong đợi loại số này là chữ cái từ điển so sánh chuỗi để hoạt động trên tất cả các trình duyệt không? Phương pháp so sánh ngày này có thực sự nhanh hơn so với sử dụng các đối tượng Ngày tháng không?

+2

Nếu định dạng từ đơn vị lớn -> đơn vị nhỏ và tất cả các chuỗi có cùng độ dài cho mỗi trường (điền vào số 0 nếu cần), thì sẽ không có vấn đề gì. – nhahtdh

+1

Các liên kết có liên quan: [Ở đây] (http://jsperf.com/date-object-creation/2) hiển thị các op/giây sử dụng hàm tạo _Date_, [ở đây] (http://jsperf.com/operator-vs -localecompage/3) là so sánh chuỗi và [ở đây] (http://jsperf.com/inequality-str-vs-int) int so sánh. –

+0

Theo [wikipedia] (https://en.wikipedia.org/wiki/ISO_8601#General_principles), Các thành phần của một ngày ISO 8601 được sắp xếp theo thứ tự từ điển, vì vậy bạn nên làm điều này ở trên – Dogoku

Trả lời

6

Sử dụng toán tử so sánh đó sẽ xem các giá trị chuỗi lexicographically, có nghĩa là thứ tự từ từ điển.

Trong ASCII, các chữ số thập phân được lưu trữ tuần tự nhỏ nhất (0, 0x30) đến lớn nhất (9, 0x39). Nếu chúng nhất quán ở định dạng này, giá trị lớn nhất (năm) đến nhỏ nhất (ngày) và luôn luôn là 0 đệm thành giá trị lớn nhất có thể, thì những so sánh này sẽ ổn.

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