Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save iamatypeofwalrus/d074d22a736d49459b15 to your computer and use it in GitHub Desktop.
Save iamatypeofwalrus/d074d22a736d49459b15 to your computer and use it in GitHub Desktop.
ActiveRecord: Store Milliseconds (or Microseconds) in Timestamps/Datetimes with Rails / MySQL

ActiveRecord: Store Milliseconds (or Microseconds) in Timestamps with Rails / MySQL

Milliseconds in your Timestamps.

We got 'em, you want 'em.

Why

Shit needs to be PRECISE

LICENSE

MIT

class MillisecondsMigration < ActiveRecord::Migration
# Include non default date stamps here
# Key :table_name
# value [:column_names]
# NOTE: only MySQL 5.6.4 and above supports DATETIME's with more precision than a second.
TABLES_AND_COLUMNS = {
# Your :table_names here
}
STANDARD_ACTIVE_RECORD_COLUMNS = [:created_at, :updated_at]
TABLE_AND_COLUMNS.each {|k,v| v.concat(STANDARD_ACTIVE_RECORD_COLUMNS)}
def up
TABLE_AND_COLUMNS.each do |table, columns|
columns.each do |column|
# MySQL supports time precision down to microseconds -- DATETIME(6)
change_column table, column, :datetime, limit: 3
end
end
end
def down
TABLE_AND_COLUMNS.each do |table, columns|
columns.each do |column|
echange_column table, column, :datetime
end
end
end
end
# Save this in config/initializers/WHATEVER.rb
class Time
# Ruby will complain that it has already initialzed DATE_FORMATS because it has...
DATE_FORMATS = {
# Where 3N is the number of places after the decimal (.)
# If you want microseconds change 3N to 6N
:db => '%Y-%m-%d %H:%M:%S.%3N'
}
end
@MarkMurphy
Copy link

MarkMurphy commented May 6, 2016

I've created an updated gist with feedback from this thread.

See https://gist.github.com/MarkMurphy/93adca601b05acffb8b5601df09f66df

  • Fixes a typo or two
  • Migrates all table columns with type :datetime
  • Adds default :limit to AbstractMysqlAdapter::NATIVE_DATABASE_TYPES[:datetime] for future migrations.
  • Fixes "Time::DATE_FORMATS is already initialized"
  • Defaults precision to 6 instead of 3 because may as well.

@p1swk
Copy link

p1swk commented Feb 2, 2024

Is there a way to implement this in Teensy 4.1 or Arduino ? I am trying to develop a gunshot localization program to solve local gunfire at 2AM-4AM.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment