2016-01-04 40 views
11

Tôi đang cố định dạng chuỗi ngày trong phản hồi gốc.Định dạng chuỗi ngày trong React Native

Ví dụ: 2016-01-04 10:34:23

Sau đây là mã tôi đang sử dụng.

var date = new Date("2016-01-04 10:34:23"); 
console.log(date); 

Vấn đề của tôi là khi tôi mô phỏng trên iPhone 6S, nó sẽ in Mon Jan 04 2016 10:34:23 GMT+0530 (IST) mà không gặp bất kỳ sự cố nào. Nhưng nếu tôi thử với iPhone 5S, nó sẽ không in được gì cả. Và nếu bạn cố gắng lấy tháng bằng cách sử dụng phương thức như date.getMonth(), nó sẽ in "NaN".

Tại sao điều này? Cách giải quyết là gì?

+3

bạn đã bao giờ tìm thấy một giải pháp cho điều này? –

Trả lời

31

Vẻ đẹp của các Phản ứng Native là nó hỗ trợ rất nhiều JS Librarieis như Moment.js. Sử dụng moment.js sẽ là một/cách dễ dàng hơn tốt hơn để xử lý ngày/giờ thay vì mã hóa từ đầu

chỉ chạy trong terminal:

npm install moment --save 

Và trong bạn Phản ứng Native js page:

import Moment from 'moment'; 

render(){ 
    Moment.locale('en'); 
    var dt = '2016-05-02T00:00:00'; 
    return(<View> {Moment(dt).format('d MMM')} </View>) //basically you can do all sorts of the formatting and others 
} 

Bạn có thể kiểm tra chính thức moment.js tài liệu tại đây https://momentjs.com/docs/

1

Trình xây dựng ngày rất cầu kỳ về những gì nó cho phép. Chuỗi bạn truyền vào phải được Date.parse() hỗ trợ và nếu nó không được hỗ trợ, chuỗi sẽ trả về NaN. Các phiên bản JavaScript khác nhau hỗ trợ các định dạng khác nhau, nếu các định dạng đó lệch khỏi tài liệu ISO chính thức.

Xem ví dụ ở đây cho những gì được hỗ trợ: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

3

không cần phải bao gồm một bul thư viện ky như Moment.js để khắc phục vấn đề đơn giản như vậy.

Sự cố bạn đang gặp phải không có định dạng, nhưng với phân tích cú pháp.

Như John Shammas đề cập đến một câu trả lời khác, các nhà xây dựng Date (và Date.parse) là cầu kỳ về đầu vào. 2016-01-04 10:34:23 của bạn có thể hoạt động trong một quá trình triển khai JavaScript, nhưng không nhất thiết phải thực hiện ở chế độ khác.

According to the specification of ECMAScript 5.1, Date.parse hỗ trợ (đơn giản hóa) ISO 8601. Đó là tin tốt, vì ngày của bạn đã rất giống ISO 8601.

Tất cả những gì bạn phải làm là thay đổi định dạng đầu vào chỉ một chút. Trao đổi không gian cho một số T: 2016-01-04T10:34:23; và tùy ý thêm múi giờ (2016-01-04T10:34:23+01:00), nếu không UTC được giả định.

1
function getParsedDate(date){ 
    date = String(date).split(' '); 
    var days = String(date[0]).split('-'); 
    var hours = String(date[1]).split(':'); 
    return [parseInt(days[0]), parseInt(days[1])-1, parseInt(days[2]), parseInt(hours[0]), parseInt(hours[1]), parseInt(hours[2])]; 
} 
var date = new Date(...getParsedDate('2016-01-04 10:34:23')); 
console.log(date); 

Do chênh lệch trong phân tích cú pháp của chuỗi ngày tháng, nó được khuyến khích luôn tự phân tích chuỗi như kết quả không phù hợp, đặc biệt là qua triển khai ECMAScript khác nhau, nơi chuỗi như "2015/10/12 12 : 00: 00 "có thể được phân tích thành NaN, UTC hoặc địa phương múi giờ.

... như mô tả trong tài nguyên:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

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