DateTime.now
บอกว่าผมมีเช่น datetime วัตถุ ฉันต้องการตั้งค่าชั่วโมงและนาทีเป็น 0 (เที่ยงคืน) ฉันจะทำเช่นนั้นได้อย่างไร?
DateTime.now
บอกว่าผมมีเช่น datetime วัตถุ ฉันต้องการตั้งค่าชั่วโมงและนาทีเป็น 0 (เที่ยงคืน) ฉันจะทำเช่นนั้นได้อย่างไร?
คำตอบ:
ขอบคุณActiveSupportคุณสามารถใช้:
DateTime.now.midnight
DateTime.now.beginning_of_day
หรือ
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)
หรือ
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
ไม่เป็นไรเข้าใจแล้ว ต้องสร้าง DateTime ใหม่:
DateTime.new(now.year, now.month, now.day, 0, 0, 0, 0)
DateTime.new(Time.now.year, Time.now.month, Time.now.day, 0, 0, 0)
มันได้ผล
now = DateTime.now
DateTime
ถ้าคุณกำลังติดต่อกับวันที่ประวัติศาสตร์ไม่ได้ใช้ คุณจะได้รับปัญหาที่น่ารำคาญหากคุณอาศัยอยู่ในประเทศที่มีเวลาออมแสงเช่นสหราชอาณาจักร ดูคำอธิบายที่นี่ gist.github.com/pixeltrix/e2298822dd89d854444b
คำเตือน : DateTime.now.midnight
และDateTime.now.beginning_of_day
ส่งคืนค่าเดียวกัน (ซึ่งเป็นศูนย์ชั่วโมงของวันปัจจุบัน - เที่ยงคืนจะไม่ส่งคืน 24:00:00 ตามที่คุณคาดหวังจากชื่อ)
ดังนั้นฉันจึงเพิ่มสิ่งนี้เป็นข้อมูลเพิ่มเติมสำหรับทุกคนที่อาจใช้คำตอบที่ยอมรับเพื่อคำนวณเที่ยงคืน x วันในอนาคต
ตัวอย่างเช่นการทดลองใช้ฟรี 14 วันที่ควรจะหมดอายุในเวลาเที่ยงคืนของวันที่ 14:
DateTime.now.midnight + 14.days
คือเช้าของวันที่ 14 ซึ่งเท่ากับการทดลอง 13.x วัน (x คือส่วนของวันที่เหลือ - ถ้าตอนนี้เป็นเวลาเที่ยงจะเป็นการทดลองใช้ 13.5 วัน)
คุณจะต้องทำสิ่งนี้จริง ๆ :
DateTime.now.midnight + 15.days
ถึงเที่ยงคืนของวันที่ 14
ด้วยเหตุนี้ฉันจึงชอบใช้เสมอbeginning_of_day
เนื่องจากเป็นเวลา 00:00:00 น. การใช้เวลาเที่ยงคืนอาจทำให้เข้าใจผิด / เข้าใจผิด
หากคุณใช้บ่อยๆให้พิจารณาติดตั้งอัญมณีนี้เพื่อปรับปรุงการแยกวิเคราะห์วันที่:
https://github.com/mojombo/chronic
require 'chronic'
Chronic.parse('this 0:00')