Chuỗi ngày của bạn không ở định dạng được chỉ định để hoạt động với new Date
. Định dạng duy nhất trong thông số là a simplified version of ISO-8601, nhưng chỉ được thêm vào ES5 và do đó hỗ trợ có thể liên lạc và hoạt động. Chuỗi của bạn không có định dạng đó, nhưng nó thực sự rất gần.
Nếu bạn thay đổi không gian để một T
, bạn sẽ có trong spec:
var dateString = "2015-12-31 00:00:00";
var d = new Date(dateString.replace(' ', 'T'));
(tôi giả sử bạn không thực sự sử dụng một chuỗi chữ, vì thế mà replace
gọi.)
Lưu ý rằng có lỗi trong đặc tả ES5 đã được sửa trong ES2015 (ES6): Điều gì xảy ra khi không có chỉ báo múi giờ trên chuỗi. Trong ISO-8601, không có chỉ báo nào có nghĩa là "giờ địa phương", nhưng đặc điểm kỹ thuật ES5 cho biết nó mặc định là Z
(GMT). Họ đã sửa nó trong đặc tả ES2015, nhưng tiếc là một số công cụ JavaScript tuân theo đặc tả ES5 và các công cụ khác theo ISO-8601 (và bây giờ ES2015), vì vậy để hỗ trợ trình duyệt chéo vững chắc, bạn cần bao gồm chỉ báo múi giờ. biết liệu nó sẽ được hiểu là GMT hay giờ địa phương. Bạn được phép sử dụng Z
cho GMT hoặc +/-
theo sau là HH:MM
để bù trừ khoản bù trừ. (Các chữ viết tắt như CST
không được phép, vì không có tiêu chuẩn cho chúng.)
Nếu chúng chưa hỗ trợ, mặc dù nó không có giấy tờ, có hỗ trợ phổ quát cho YYYY/MM/DD HH:MM:SS
. Vì vậy:
var dateString = "2015-12-31 00:00:00";
var d = new Date(dateString.replace(/-/g, '/'));
Nguồn
2012-11-13 15:41:25
Chúc mừng, T đang làm các trick ! –
@PhilippSiegfried: Tuyệt vời, vui mừng đã giúp! –
@NULL: Tôi chưa bao giờ thấy một công cụ JavaScript không hỗ trợ nó.IE6 trở lên làm mọi phiên bản Firefox mà tôi từng thấy, mọi phiên bản Chrome, mọi phiên bản của Opera. ** Nhưng **, người ta phải luôn luôn kiểm tra trên những môi trường mục tiêu (cho dù cái gì đó là "tiêu chuẩn" hay không, thật đáng buồn). –