Katakanlah saya memiliki objek datetime misalnya DateTime.now
. Saya ingin menyetel jam dan menit ke 0 (tengah malam). Bagaimana saya bisa melakukan itu?
104
Berkat ActiveSupport, Anda dapat menggunakan:
DateTime.now.midnight
DateTime.now.beginning_of_day
ATAU
DateTime.now.change({ hour: 0, min: 0, sec: 0 })
# More concisely
DateTime.now.change({ hour: 0 })
now = DateTime.now
DateTime.new(now.year, now.month, now.day, 0, 0, 0, now.zone)
ATAU
now = DateTime.now
DateTime.parse(now.strftime("%Y-%m-%dT00:00:00%z"))
DateTime.new(now.year, now.month, now.day, 0,0,0, now.zone) != now.to_date.to_datetime
Tidak apa-apa, mengerti. Perlu membuat DateTime baru:
sumber
DateTime.new(Time.now.year, Time.now.month, Time.now.day, 0, 0, 0)
ini berhasil.now = DateTime.now
DateTime
. Anda akan mendapatkan masalah yang mengganggu jika Anda tinggal di negara yang memiliki waktu musim panas seperti Inggris. Lihat penjelasannya di sini. gist.github.com/pixeltrix/e2298822dd89d854444bPeringatan :
DateTime.now.midnight
danDateTime.now.beginning_of_day
kembalikan nilai yang sama (yang merupakan jam nol pada hari ini - tengah malam tidak menghasilkan 24:00:00 seperti yang Anda harapkan dari namanya).Jadi saya menambahkan ini sebagai info lebih lanjut bagi siapa saja yang mungkin menggunakan jawaban yang diterima untuk menghitung tengah malam x hari di masa mendatang.
Misalnya, uji coba gratis 14 hari yang akan berakhir pada tengah malam pada hari ke-14:
adalah pagi hari ke-14, yang sama dengan percobaan 13,5 hari (x adalah sisa sisa hari - jika sekarang siang, maka percobaan 13,5 hari).
Anda sebenarnya perlu melakukan ini:
untuk mendapatkan tengah malam pada hari ke-14.
Untuk alasan ini saya selalu lebih suka menggunakan
beginning_of_day
, karena itu adalah 00:00:00. Menggunakan tengah malam bisa menyesatkan / disalahpahami.sumber
Jika Anda menggunakannya, pertimbangkan untuk menginstal permata ini untuk meningkatkan penguraian tanggal:
https://github.com/mojombo/chronic
sumber