2013-09-22 83 views
19

我确定这应该很简单(可能缺少一些明显的),但是...我有一个毫秒数据库字符串,我想在Rails中将其转换为US格式的日期。想到调用.to_date将是我的朋友,但它抛出了一个奇怪的错误。将毫秒数转换为Rails中的格式化日期

article.date => "1379844601000" 

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

任何人都可以建议正确的方法来做到这一点?

回答

12

使用Date.strptime - 而在此之前,先将其转换为秒:

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

这很好,谢谢 - 有什么方法可以显示它为MM-DD-YYYY而不是DAY,DD MMM YYYY? – Nick

+0

使用:'strftime':http://apidock.com/ruby/DateTime/strftime – shem

-1

Time.parse( “1379844601000”)会给你的日期和时间

+2

这是为您工作吗?它给了我'ArgumentError:'1379844601000''中没有时间信息。 Date.parse给出了'ArgumentError:无效的日期'。 – Nick

+0

它对我来说工作正常 >> Time.parse(“1379844601000”) => Sun Sep 22 16:32:36 +0530 2013 – vigneshre

+2

看起来像它的一个红宝石版本问题。 Ruby 1.9.x版本没有这个解析选项。所以,你可以使用Time.strptime()方法或使用像这样的一些宝石https://github.com/jeremyevans/ruby-american_date – vigneshre

29

将其转换为秒(milliseconds/1000)和呼叫Time::at的结果:

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

这应该是接受的答案 – pungoyal