2013-09-22 41 views
19

Tôi chắc rằng điều này phải đơn giản (có thể thiếu một số thứ hiển nhiên), nhưng ... Tôi có chuỗi cơ sở dữ liệu là mili giây mà tôi muốn chuyển đổi thành ngày có định dạng của Hoa Kỳ trong Rails. Gọi điện thoại số .to_date sẽ là bạn của tôi, nhưng đó là một lỗi lạ.Chuyển đổi mili giây sang ngày được định dạng trong Rails

article.date => "1379844601000" 

article.date.to_date 
NoMethodError: undefined method `div' for nil:NilClass 

Có ai có thể tư vấn đúng cách để làm điều này không?

Trả lời

12

Sử dụng Date.strptime - nhưng trước khi điều này, chuyển nó sang giây đầu tiên:

sec = ('1379844601000'.to_f/1000).to_s 
Date.strptime(sec, '%s') 
//Sun, 22 Sep 2013 
+0

Điều này hoạt động tuyệt vời, cảm ơn - có cách nào để hiển thị nó dưới dạng MM-DD-YYYY không thay vì DAY, DD MMM YYYY? – Nick

+0

sử dụng: 'strftime': http://apidock.com/ruby/DateTime/strftime – shem

-1

Time.parse ("1379844601000") sẽ cung cấp cho bạn ngày và thời gian

+2

Điều đó có hiệu quả với bạn không? Nó cho tôi 'ArgumentError: không có thông tin thời gian trong" 1379844601000 "'. Date.parse cung cấp 'ArgumentError: ngày không hợp lệ'. – Nick

+0

Nó hoạt động tốt cho tôi >> Time.parse ("1379844601000") => Sun Sep 22 16:32:36 +0530 2013 – vigneshre

+2

Có vẻ như đó là vấn đề phiên bản Ruby. Các phiên bản Ruby 1.9.x không có tùy chọn phân tích cú pháp này. Vì vậy, bạn có thể sử dụng phương thức Time.strptime() hoặc sử dụng một số đá quý như https://github.com/jeremyevans/ruby-american_date – vigneshre

29

Chuyển nó sang giây (milliseconds/1000) và cuộc gọi Time::at vào kết quả:

Time.at(1379844601000/1000) 
# => 2013-09-22 12:10:01 +0200 

Time::at on ruby-doc.org

24
Time.strptime(milliseconds.to_s, '%Q') 
// %Q - Number of milliseconds since 1970-01-01 00:00:00 UTC. 
+0

đây phải là câu trả lời được chấp nhận – pungoyal

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