Disons que j'ai un objet datetime, par exemple DateTime.now
. Je veux régler les heures et les minutes sur 0 (minuit). Comment puis je faire ça?
104
Grâce à ActiveSupport, vous pouvez utiliser:
DateTime.now.midnight
DateTime.now.beginning_of_day
OU
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)
OU
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
Nevermind, compris. Besoin de créer un nouveau DateTime:
la source
DateTime.new(Time.now.year, Time.now.month, Time.now.day, 0, 0, 0)
cela fonctionne.now = DateTime.now
DateTime
. Vous aurez des problèmes ennuyeux si vous vivez dans un pays qui a l'heure d'été comme le Royaume-Uni. Voir une explication ici. gist.github.com/pixeltrix/e2298822dd89d854444bAttention :
DateTime.now.midnight
etDateTime.now.beginning_of_day
renvoyez la même valeur (qui est l'heure zéro du jour en cours - minuit ne renvoie pas 24:00:00 comme vous l'attendriez 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:
est le matin du 14e jour, ce qui équivaut à un essai de 13.x jours (x est la partie de la journée restante - si maintenant c'est midi, alors c'est un essai de 13,5 jours).
Vous auriez en fait besoin de faire ceci:
pour obtenir minuit le 14e jour.
Pour cette raison, je préfère toujours utiliser
beginning_of_day
, car c'est 00:00:00. Utiliser minuit peut être trompeur / mal compris.la source
Si vous l'utilisez souvent, pensez à installer cette gemme pour améliorer l'analyse des dates:
https://github.com/mojombo/chronic
la source