Ruby/Rails: converting a Date to a UNIX timestamp

后端 未结 5 1885
迷失自我
迷失自我 2020-12-07 08:12

How would I get a UNIX timestamp (number of seconds since 1970 GMT) from a Date object in a Rails app?

I know Time#to_i returns a timestamp, but doing <

相关标签:
5条回答
  • 2020-12-07 08:25

    The code date.to_time.to_i should work fine. The Rails console session below shows an example:

    >> Date.new(2009,11,26).to_time
    => Thu Nov 26 00:00:00 -0800 2009
    >> Date.new(2009,11,26).to_time.to_i
    => 1259222400
    >> Time.at(1259222400)
    => Thu Nov 26 00:00:00 -0800 2009
    

    Note that the intermediate DateTime object is in local time, so the timestamp might be a several hours off from what you expect. If you want to work in UTC time, you can use the DateTime's method "to_utc".

    0 讨论(0)
  • 2020-12-07 08:25
    DateTime.new(2012, 1, 15).to_time.to_i
    
    0 讨论(0)
  • 2020-12-07 08:36

    Solution for Ruby 1.8 when you have an arbitrary DateTime object:

    1.8.7-p374 :001 > require 'date'
     => true 
    1.8.7-p374 :002 > DateTime.new(2012, 1, 15).strftime('%s')
     => "1326585600"
    
    0 讨论(0)
  • 2020-12-07 08:41

    The suggested options of using to_utc or utc to fix the local time offset does not work. For me I found using Time.utc() worked correctly and the code involves less steps:

    > Time.utc(2016, 12, 25).to_i
    => 1482624000 # correct
    

    vs

    > Date.new(2016, 12, 25).to_time.utc.to_i
    => 1482584400 # incorrect
    

    Here is what happens when you call utc after using Date....

    > Date.new(2016, 12, 25).to_time
    => 2016-12-25 00:00:00 +1100 # This will use your system's time offset
    > Date.new(2016, 12, 25).to_time.utc
    => 2016-12-24 13:00:00 UTC
    

    ...so clearly calling to_i is going to give the wrong timestamp.

    0 讨论(0)
  • 2020-12-07 08:42

    I get the following when I try it:

    >> Date.today.to_time.to_i
    => 1259244000
    >> Time.now.to_i
    => 1259275709
    

    The difference between these two numbers is due to the fact that Date does not store the hours, minutes or seconds of the current time. Converting a Date to a Time will result in that day, midnight.

    0 讨论(0)
提交回复
热议问题