2010-07-08 31 views
6

Vì vậy, tôi đã nhìn vào như thế nào tôi có thể hiển thị một thông báo Desktop sử dụng một phần mở rộng của Google Chrome khi tôi đi qua những dòng mã:Câu lệnh JavaScript này tính toán ngày như thế nào?

var time = /(..)(:..)/(Date());    // The prettyprinted time. 
var hour = time[1] % 12 || 12;    // The prettyprinted hour. 
var period = time[1] < 12 ? 'a.m.' : 'p.m.'; // The period of the day. 

Cái quái gì không tất cả điều này làm gì?

+0

nếu bạn đang thực hiện tiện ích chrome, hãy kiểm tra http://area51.stackexchange.com/proposals/10910/google-chrome-extensions-webstore?referrer=SDGU8262nOKdp17Pr161Vw2 – Lizard

Trả lời

9

Hấp dẫn, tôi đã không nhìn thấy điều này trước đây:

/regex/(...); 

EDIT: see this!

này:

/(..)(:..)/(Date()); 
// seems to emulate the functionality of exec() 

Sẽ trở lại trận đấu (mảng của các nhóm phù hợp) của biểu thức chính quy, /(..)(:..)/, chống lại chuỗi (Date()):

"Thu Jul 08 2010 09:40:38 GMT+0200 (W. Europe Daylight Time)" 

(hoặc bất cứ thời gian nó sẽ xảy ra)

Mảng trả về (kết quả phù hợp), trong th là trường hợp, là:

["09:40", "09", ":40"] 

dòng này:

var hour = time[1] % 12 || 12; 

... chỉ đơn giản là xác định giờ. Nếu giờ là falsey (ví dụ: 0) thì giờ đó mặc định là 12 - điều này có thể làm cho câu lệnh tiếp theo trả lại hậu tố am/pm chính xác. (12:00 là am).

+1

Bạn thực sự có thể rút ngắn mã ở trên bằng cách thay thế dòng đầu tiên bằng 'var hour =/(..) (: ..)/(Date()) [1];' và sau đó chỉ đơn giản là tham chiếu đến 'hour' thay vì' time [1] '. –

1

Dòng đầu tiên sử dụng biểu thức chính quy để trích xuất phần tử thời gian từ chuỗi được trả về bởi Date(). Ví dụ, điều này có thể là '08: 37 'Các dấu ngoặc trong biểu thức chính quy này cho hai nhóm' ký tự 'khác nhau, nhóm đầu tiên khớp với' 08 ', kết hợp thứ hai' 37 '

Dòng thứ hai là lấy tập ký tự đầu tiên, sẽ được tự động chuyển đổi thành một số và nhận phần còn lại chia cho 12. Có lẽ để chuyển số đồng hồ 24 giờ thành số đồng hồ 12 giờ. '|| 12 'hành động trả lại 12 chỉ trong trường hợp số dư còn lại là 0.

Dòng thứ ba sử dụng toán tử điều kiện bậc ba để thêm' a.m 'chỉ trong trường hợp giờ nhỏ hơn 12, nếu không' p.m. '

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