Disons que j'ai un objet datetime, par exemple DateTime.now
. Je veux régler les heures et les minutes à 0 (minuit). Comment puis je faire ça?
Grâce à ActiveSupport vous pouvez utiliser:
DateTime.now.midnight
DateTime.now.beginning_of_day
OR
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)
OR
now = DateTime.now
DateTime.parse(now.strftime("%Y-%m-%dT00:00:00%z"))
Pas grave, compris. Besoin de créer un nouveau DateTime:
DateTime.new(now.year, now.month, now.day, 0, 0, 0, 0)
Avertissement: DateTime.now.midnight
et DateTime.now.beginning_of_day
retourne la même valeur (qui correspond à l'heure zéro du jour actuel - minuit ne renvoie pas 24:00:00 comme on pourrait s'y attendre de son nom).
J'ajoute donc ceci comme information supplémentaire pour quiconque pourrait utiliser la réponse acceptée pour calculer minuit x jours dans le futur.
Par exemple, un essai gratuit de 14 jours qui devrait expirer à minuit le 14e jour:
DateTime.now.midnight + 14.days
est le matin du 14ème jour, ce qui équivaut à un essai de 13.x jours (x est la partie de la journée qui reste - si c'est maintenant midi, alors il s'agit d'un essai de 13.5 jours).
Vous auriez réellement besoin de faire ceci:
DateTime.now.midnight + 15.days
pour arriver à minuit le 14e jour.
Pour cette raison, je préfère toujours utiliser beginning_of_day
, puisque c'est 00:00:00. L'utilisation de minuit peut être trompeuse/mal comprise.
Si vous l'utilisez souvent, pensez à installer cette gemme pour améliorer l'analyse de la date:
https://github.com/mojombo/chronic
require 'chronic'
Chronic.parse('this 0:00')