2010-10-25 49 views
9

Tôi đang sử dụng thư viện tuyệt vời (nhưng lớn) DateJS để xử lý ngày và giờ trong ứng dụng web của tôi. Tôi chỉ gặp một vài thứ mà tôi không biết phải xử lý như thế nào.Phân tích cú pháp CHỈ một chuỗi thời gian với DateJS

Tôi muốn người dùng của mình chỉ có thể nhập chuỗi Thời gian mà không có ngày, nhưng họ có thể nhập vào theo bất kỳ cách nào họ muốn. Ví dụ:

  • 5:00 pm
  • 17:00
  • 5:00 pm
  • 5: 00p
  • 5p
  • , vv

Sử dụng Date.parse(value) chuyển đổi những chuỗi thành một ngày đầy đủ, đó là chính xác những gì tôi muốn. Tuy nhiên, nó cũng cho phép người dùng nhập vào bất kỳ phần nào khác của một chuỗi ngày, chẳng hạn như:

  • ngồi 5:00
  • 1/1/2010 17:00
  • , vv

tôi m cố gắng sử dụng DateJS để xác thực một trường đầu vào cho một giá trị thời gian. Một cái gì đó như:

function validateTime(value) { 
    return Date.parse(value) !== null; 
} 

Có cách nào để sử dụng các tính năng DateJS để giải quyết vấn đề này không? Có SO questions cung cấp các giải pháp khác, nhưng nếu DateJS có cách để làm điều này, tôi không thực sự muốn thêm mã tùy chỉnh vào ứng dụng của mình để thực hiện việc này.

Trả lời

9

Ngay sau khi đặt câu hỏi, tôi phát hiện ra rằng Date.parseExact() có thể lấy một mảng các chuỗi định dạng. Bằng cách nào đó tôi đã bỏ lỡ điều đó. Tôi quản lý để có được một cái gì đó làm việc với đoạn mã sau:

function validateTime(input) { 
    return Date.parseExact(input, [ 
      "H:m", 
      "h:mt", 
      "h:m t", 
      "ht","h t"]) != null || 
     Date.parseExact(input, [ 
      "h:mtt", 
      "h:m tt", 
      "htt","h tt"]) != null; 
}; 

Lưu ý rằng một số định dạng dường như không có khả năng được bao gồm cùng nhau tại cùng một thời điểm, đó là lý do tôi chia chúng thành hai riêng biệt ParseExact() cuộc gọi. Trong trường hợp này, tôi không thể bao gồm bất kỳ chuỗi nào có chứa một đơn t trong đó với chuỗi định dạng có chứa một đôi tt trong đó.

+1

Cũng sử dụng mẫu "HHmm" để cho phép ký hiệu 24 giờ (còn gọi là thời gian quân sự hoặc thời gian thiên văn). – JustinStolle

5

Phương pháp phụ gia có vẻ cồng kềnh. Đưa đi vẻ đẹp của DateJS theo ý kiến ​​của tôi. Tôi cần thiết cùng một giải pháp và quyết định chỉ lén lút thêm ngày trước chuỗi đầu vào của tôi trước khi phân tích với DateJS:

var parsed = Date.parse(Date.today().toString('M/d/yyyy') + ' ' + this.value); 

if (parsed) { 
    alert(parsed.toString('h:mm tt')); 
} 

Bây giờ DateJS sẽ không được đánh hơi xung quanh cho bất kỳ ngày-một phần mẫu phân tích cú pháp của nó, như bạn đã điền nó vào.

Hy vọng điều này sẽ giúp ai đó!

+1

Ý tưởng hay, đơn giản hơn nhiều so với giải pháp mà tôi đã đề xuất! Và khá rõ ràng ... thất vọng vì tôi không nghĩ về nó;) – Tauren

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