Saya ingin menampilkan tanggal dalam format: hari pendek dalam seminggu, bulan pendek, hari dalam sebulan tanpa memimpin nol tetapi termasuk akhiran "th", "st", "nd", atau "rd".
Misalnya, hari pertanyaan ini ditanyakan akan menampilkan "Kamis 2 Oktober".
Saya menggunakan Ruby 1.8.7, dan Time.strftime sepertinya tidak melakukan ini. Saya lebih suka perpustakaan standar jika ada.
ruby-on-rails
ruby
date
Jonathan Tran
sumber
sumber
Jawaban:
Gunakan metode ordinalize dari 'active_support'.
Catatan, jika Anda menggunakan IRB dengan Ruby 2.0, Anda harus terlebih dahulu menjalankan:
sumber
Anda dapat menggunakan metode helper bantu ordinalalize active_support pada angka.
sumber
Mengambil jawaban Patrick McKenzie sedikit lebih jauh, Anda dapat membuat file baru di
config/initializers
direktori Anda yang disebutdate_format.rb
(atau apa pun yang Anda inginkan) dan memasukkan ini ke dalamnya:Kemudian dalam kode tampilan Anda, Anda dapat memformat tanggal apa pun hanya dengan menetapkannya sebagai format tanggal baru:
Sederhana, ini bekerja, dan mudah untuk dikembangkan. Cukup tambahkan lebih banyak baris format dalam file date_format.rb untuk masing-masing format tanggal yang berbeda. Ini adalah contoh yang lebih sempurna.
sumber
Time::DATE_FORMATS.merge!(:my_date => lambda { |time| time.strftime("%a, %b #{ActiveSupport::Inflector.ordinalize(time.day)}") })
sumber
Saya suka jawaban Bartosz, tapi hei, karena ini Rails yang sedang kita bicarakan, mari kita selangkah lebih maju dengan licik. (Sunting: Meskipun saya hanya akan monkeypatch metode berikut, ternyata ada cara yang lebih bersih.)
DateTime
instance memilikito_formatted_s
metode yang disediakan oleh ActiveSupport, yang menggunakan simbol tunggal sebagai parameter dan, jika simbol itu dikenali sebagai format standar yang valid, mengembalikan sebuah String dengan pemformatan yang sesuai.Simbol-simbol tersebut didefinisikan oleh
Time::DATE_FORMATS
, yang merupakan hash simbol untuk string baik untuk fungsi format standar ... atau procs. Bwahaha.Tapi hei, jika Anda tidak bisa menolak kesempatan untuk melakukan monkeypatch, Anda selalu bisa memberikan antarmuka yang lebih bersih:
sumber
Buat
%o
format Anda sendiri .Inisialisasi
config/initializers/srtftime.rb
Pemakaian
Anda dapat menggunakan ini dengan
Date
danDateTime
juga:sumber
Time
dalam proyek Anda?Meskipun Jonathan Tran memang mengatakan dia mencari hari yang disingkat dalam minggu pertama diikuti oleh bulan yang disingkat, saya pikir mungkin berguna bagi orang-orang yang berakhir di sini untuk mengetahui bahwa Rails memiliki dukungan out-of-the-box untuk lebih biasanya bulan panjang yang dapat digunakan, bilangan bulat hari ordinalized, diikuti oleh tahun, seperti pada
June 1st, 2018
.Itu dapat dengan mudah dicapai dengan:
Atau:
Anda dapat tetap menggunakan contoh waktu jika ingin juga:
Anda dapat menemukan lebih banyak format dan konteks tentang cara membuat custom di Rails API docs .
sumber