Saya sedang menulis aplikasi Rails, tetapi tampaknya tidak dapat menemukan cara melakukan waktu relatif, yaitu jika diberi kelas Waktu tertentu, ia dapat menghitung "30 detik yang lalu" atau "2 hari yang lalu" atau jika lebih dari sebulan "9/1/2008", dll.
ruby-on-rails
ruby
John Topley
sumber
sumber
Jawaban:
Kedengarannya seperti Anda sedang mencari
time_ago_in_words
metode (ataudistance_of_time_in_words
), dari ActiveSupport. Sebut saja seperti ini:sumber
ActiveSupport
, itu didefinisikan dalamActionView::Helpers::DateHelper
.helper
yang dapat Anda panggil dan akses metode ini.helper.time_ago_in_words(timestamp)
require 'active_support/core_ext'
Pertama, dan kemudian Anda siap untuk menggunakan7.days.ago
dan konstruksi serupa lainnya.Saya sudah menulis ini, tetapi harus memeriksa metode yang ada disebutkan untuk melihat apakah mereka lebih baik.
sumber
return
baris terakhir dalamcase
pernyataan di bawahelse
, dan menghapus semuareturn
s.+99
+800
+180000
?Hanya untuk mengklarifikasi solusi Andrew Marshall untuk menggunakan time_ago_in_words
(Untuk Rails 3.0 dan Rails 4.0)
Jika Anda dalam tampilan
Jika Anda berada di controller
Pengontrol tidak memiliki modul ActionView :: Helpers :: DateHelper diimpor secara default.
NB Bukan "cara rel" untuk mengimpor pembantu ke pengontrol Anda. Pembantu adalah untuk membantu pandangan. The time_ago_in_words metode diputuskan menjadi pandangan entitas dalam MVC triad. (Saya tidak setuju tetapi ketika di Roma ...)
sumber
Bagaimana dengan
Atau sesuatu yang Anda tembak?
sumber
Anda dapat menggunakan operator aritmatika untuk melakukan waktu relatif.
Akan memberi Anda 2 hari yang lalu.
sumber
2.days.since
atau2.days.from_now
Sesuatu seperti ini akan berhasil.
sumber
#{diff_seconds/360}
seharusnya#{diff_seconds/3600}
. Saya sudah mengeditnya.Karena jawaban terbanyak di sini menyarankan time_ago_in_words .
Alih-alih menggunakan:
Di Rails, lebih suka:
bersama dengan perpustakaan jQuery http://timeago.yarp.com/ , dengan kode:
Keuntungan utama: caching
http://rails-bestpractices.com/posts/2012/02/10/not-use-time_ago_in_words/
sumber
time_ago_in_words
bukan waktu SLihatlah metode instance di sini:
http://apidock.com/rails/Time
Ini memiliki metode yang berguna seperti kemarin, besok, begin_of_week, lalu, dll.
Contoh:
sumber
Saya telah menulis permata yang melakukan ini untuk objek Rails ActiveRecord. Contoh ini menggunakan Created_at, tetapi itu juga akan bekerja pada updated_at atau apa pun dengan kelas ActiveSupport :: TimeWithZone.
Cukup instal dan panggil metode 'cantik' pada contoh TimeWithZone Anda.
https://github.com/brettshollenberger/hublot
sumber
Jika Anda sedang membangun aplikasi Rails, Anda harus menggunakan
Ini memberi Anda waktu atau tanggal di zona waktu yang Anda gunakan untuk mengkonfigurasi aplikasi Rails Anda.
Misalnya, jika Anda mengonfigurasi aplikasi Anda untuk menggunakan UTC, maka
Time.zone.now
akan selalu dalam waktu UTC (itu tidak akan terpengaruh oleh perubahan Musim Panas Inggris misalnya).Menghitung waktu relatif itu mudah, mis
sumber
Pendekatan lain adalah membongkar beberapa logika dari backend dan membuat browser melakukan pekerjaan dengan menggunakan plugin Javascript seperti:
jQuery waktu yang lalu atau adaptasinya Rails Gem
sumber