2013-07-17 21 views
12

Globalize.js cho phép bạn phân tích một chuỗi ngày dựa trên nền văn hóa hiện hành áp dụngGlobalize.js - làm thế nào để phân tích ngày và thời gian thay vì chỉ hẹn hò với

var date = Globalize.parseDate("17/07/2013"); //Wed Jul 17 00:00:00 PDT 2013 

Những gì tôi muốn làm là phân tích một DateTime. Đối tượng Ngày javascript xử lý việc này, tôi ngạc nhiên khi thư viện Globalize.js không.

var date = new Date("07/17/2013 11:55 pm"); //Wed Jul 17 23:55:00 PDT 2013 
var date = Globalize.parseDate("07/17/2013 11:55 pm"); //null 

Tôi có thiếu gì đó không? Tôi đang nghiêng về việc phân tích phần thời gian cho bản thân mình. Có thư viện nào khác mở rộng Globalize.js cung cấp loại chức năng này không? Tôi đã nhìn xung quanh nhưng không tìm thấy nhiều.

CẬP NHẬT w/chấp nhận câu trả lời

Bạn có thể phân tích cú pháp ngày nếu bạn biết định dạng mà ngày đó tham gia.

var date = Globalize.parseDate("17/07/2013 11:55 pm", "MM/dd/yyyy hh:mm tt"); 
    //date = null 

Trong ví dụ của tôi ngày sẽ được null vì nó dự kiến ​​khoảng thời gian sẽ ở định dạng a.m hoặc p.m.. Khi tôi thay đổi, tôi đã có thể phân tích một ngày giờ.

var date = Globalize.parseDate("17/07/2013 11:55 p.m.", "MM/dd/yyyy hh:mm tt"); 
    //date = Wed Jul 17 23:55:00 PDT 2013 

Note: Đây là chỉ áp dụng đối với phản Toàn cầu hoá 0.x.

Lưu ý 2: Chuyển mẫu mã cứng là NOT đề xuất i18n.

+0

Vượt qua mẫu được mã cứng KHÔNG phải là đề xuất i18n. Bạn nên sử dụng bộ xương thay thế (Globalize 1.x) http://stackoverflow.com/a/30237866/798133. –

Trả lời

11

Nếu bạn biết mô hình bạn đang sử dụng:

var date = Globalize.parseDate("07/17/2013 11:55 pm", "MM/dd/yyyy hh:mm tt"); 

Nếu bạn không biết các mô hình:

var date = Globalize.parseDate("07/17/2013 11:55 pm", Globalize.culture().calendar.patterns.d + " " + Globalize.culture().calendar.patterns.t) 

Dòng trên là giả định nền văn hóa hiện nay, nếu bạn cần nó cho khác văn hóa hoặc nếu bạn chưa thiết lập văn hóa địa phương bằng cách gọi Globalize.culture ("") thì chỉ cần xác định văn hóa về văn hóa().

Tôi chỉ chạy trên kịch bản này vài phút trước, và tìm thấy giải pháp này, mới nhất nó là lộn xộn, tôi hy vọng có một cách sạch hơn để làm điều này.

Lưu ý: Điều này chỉ áp dụng cho Globalize 0.x.

Lưu ý 2: Chuyển mẫu mã cứng là NOT đề xuất i18n.

+0

Tôi chỉ muốn phân tích thời gian, vì vậy tôi đã sử dụng Globalize.parseDate ("11:55 pm", Globalize.culture(). Calendar.patterns.t). Nhưng tôi đã nhận được kết quả là null. Lời khuyên nào? –

+0

@MARKANDBhatt chỉ thêm một chuỗi ngày hợp lệ vào chuỗi thời gian của bạn và gọi Globalize.parseDate –

+1

Tôi nghĩ giải pháp này sẽ được áp dụng trên phiên bản 'globalize' 0.x, nhưng không phải cho phiên bản 1.x của thư viện –

2

tôi sẽ nhìn vào moment.js, với nó bạn có thể làm

d = moment("17/07/2013 11:55 pm" , "DD/MM/YYYY HH:mm a"); // parsed as 11:55pm local time 
d = d.toDate(); //get it as a native js date object 

Trừ khi bạn chỉ định một múi giờ bù đắp, phân tích một chuỗi sẽ tạo ra một ngày trong những người sử dụng múi giờ hiện hành.

+2

Tôi thấy moment.js rất hữu ích khi nói đến thao tác ngày/giờ. Tuy nhiên trong các tình huống mà tôi đối phó với hầu hết thời gian, văn hóa được xác định bởi người dùng hoặc trình duyệt, vì vậy tôi không biết đúng mẫu trước khi tay. Tôi thường kết thúc bằng nội dung: thời điểm ("16/07/2012 12:45", thời điểm(). Lang() ._ longDateFormat.L + "" + moment(). Lang() ._ longDateFormat.LT) .toDate() tương tự như câu trả lời của tôi dưới đây khi sử dụng Globalize. Bạn có biết nếu có một cách ngắn hơn? –

3

Toàn cầu hóa 1.x dựa trên CLDR và ​​hiện có API khác.Hãy làm theo mã mới để hoàn thành những gì bạn cần:

Globalize("en").parseDate("5/14/2015, 9:47 AM", {skeleton: "yMdhm"}); 
// > Thu May 14 2015 09:47:00 GMT-0300 (BRT) 

More information and examples.
More information on how to load CLDR.
Notes on how to use CLDR patterns

+0

Làm thế nào bạn đặt một dấu tách khác với dấu phẩy? yMdHm thi hành dấu phẩy (,) làm dấu phân cách trong khi tôi cần không gian. – Jimit

+0

Toàn cầu hóa không khoan dung về vấn đề đó, tức là, bỏ qua một chữ hoặc chấp nhận bất kỳ chữ nào. (Chú thích dấu phẩy và dấu cách là một chữ được định nghĩa theo định dạng). Một giải pháp hacky là sửa đổi dữ liệu CLDR trước khi bạn nạp nó vào Globalize. Ngoài ra, bạn có thể sử dụng đầu vào được hướng dẫn như https://github.com/rxaviers/react-date-input không? –

1

Câu trả lời được chấp nhận có nghĩa là tất cả các trường thời gian ngày phải có ngày và giờ đầy đủ. Tuy nhiên, nó là nhiều hơn chấp nhận được rằng một số lĩnh vực sẽ chỉ có một ngày. Vì vậy, tôi đã sửa đổi globalize.culture.en-AU.js để thêm mẫu tùy chỉnh của mình.

Globalize.addCultureInfo("en-AU", "default", { 
    name: "en-AU", 
    englishName: "English (Australia)", 
    nativeName: "English (Australia)", 
    numberFormat: { 
     currency: { 
      pattern: ["-$n","$n"] 
     } 
    }, 
    calendars: { 
     standard: { 
      firstDay: 1, 
      patterns: { 
       d: "d/MM/yyyy", 
       D: "dddd, d MMMM yyyy", 
       f: "dddd, d MMMM yyyy h:mm tt", 
       F: "dddd, d MMMM yyyy h:mm:ss tt", 
       M: "dd MMMM", 
       Y: "MMMM yyyy", 
       Z: "dd/MM/yyyy hh:mm:ss tt" // This is a custom one for our specifications. 
      } 
     } 
    } 
}); 

Đây không phải là giải pháp tốt nhất bằng cách sửa đổi, nhưng với mục đích của tôi và hầu hết những mục đích khác, chúng sẽ không sớm là upgrading the Globalization.js from version 0.x to 1.x.

Câu trả lời này có nghĩa là bạn có thể có ngày có thời gian và chỉ cần có trường ngày cùng nhau trong cùng một dự án và trên cùng một trang.

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