[RUBY] Une collection de méthodes souvent utilisées lors de la manipulation du temps avec TimeWithZone of Rails

J'ai souvent utilisé l'application Rails pour calculer le prix pour une période spécifique et jouer avec le temps pour le vérifier, mais j'ai été impressionné par le fait qu'il était assez facile d'obtenir l'heure que je voulais, alors je l'ai utilisée à ce moment-là. Les méthodes de manipulation du temps sont résumées au lieu de mémorandum.

Qu'est-ce que Time ou TimeWithZone en premier lieu?

Je vais le présenter car il a été écrit en détail dans l'article suivant. En conclusion, lors de l'utilisation avec Rails, l'utilisation de TimeWithZone fait beaucoup de progrès. Cet article est écrit sur l'hypothèse que cette classe sera utilisée. Différences entre l'heure, la date, la date et l'heure, TimeWithZone entre Ruby et Rails \ -Qiita

Obtenez l'heure actuelle

Système d'acquisition du temps super basique. Pour le moment, c'est basique. Je pense qu'il est souvent converti en différentes formes sur cette base.

#Obtenez l'heure actuelle
Time.current
=> Wed, 15 Jan 2020 13:18:07 UTC +00:00

#Vérifier la classe
Time.current.class
=> ActiveSupport::TimeWithZone

#Convertir en type chaîne
Time.current.strftime("%F")
=> "2020-01-15"

Conseils: Différence par rapport à Time.now

Vous pouvez également obtenir l'heure actuelle en utilisant Time.now, mais dans ce cas, il existe les différences suivantes.

Puisque vous pouvez utiliser la méthode de la classe TimeWizhZone, il semble bon de l'obtenir ici.

Obtenez la veille ou le lendemain

Je voudrais obtenir les données d'hier et les données du mois prochain, mais à ce niveau, c'est pratique car je peux les apporter en une seule fois, comme indiqué ci-dessous.

#hier
Time.current.yesterday

#le prochain jour
Time.current.tomorrow

#le mois dernier
Time.current.prev_month

#Le mois prochain
Time.current.next_month

#Début du mois
Time.current.beginning_of_month

#Fin du mois
Time.current.end_of_month

#Année précédente
Time.current.prev_year

#l'année suivante
Time.current.next_year

Obtenir l'heure il y a N jours, N mois, N ans

Si vous souhaitez le modifier à n'importe quelle date ou mois, vous pouvez l'obtenir en écrivant comme suit.

#Il ya 3 jours/3 jours plus tard
Time.current.ago(3.days)
Time.current.since(3.days)

#il y a 3 mois/3 mois plus tard
Time.current.ago(3.month)
Time.current.since(3.month)

#il y a 3 ans/3 années plus tard
Time.current.ago(3.years)
Time.current.since(3.years)

Obtenez la date et le jour

Lors du calcul du nombre de jours, chaque nombre peut être introduit en écrivant comme suit. Le type à ce moment est le type int de base.

#Année
Time.current.year
=> 2020

#Mois
Time.current.month
=> 6

#Date
Time.current.day
=> 7

Différence de temps

La soustraction de TimeWithZone renvoie UNIXTIME (secondes). En convertissant cela en utilisant Time.zone.at, vous pouvez l'utiliser lorsque vous voulez obtenir la date, etc. à partir de la différence entre deux dates et heures.

#Convertir le temps du réglage en TimeWithZone
time1 = Time.zone.parse('2020-01-05 12:00:00')
time2 = Time.zone.parse('2020-01-01 10:00:00')

#Soustraire pour obtenir UNIXTIME (secondes)
time1 - time2
=> 352800.0

#Convertir les secondes en TimeWithZone
Time.zone.at(time1 - time2)

Obtenez à tout moment

Il est utilisé lorsque vous souhaitez acquérir des données générées à une date spécifique dans un test.

Time.zone.parse('2020-01-01')
=> Wed, 01 Jan 2020 00:00:00 UTC +00:00

Time.zone.parse('2020-01-01 12:00:00')
=> Wed, 01 Jan 2020 12:00:00 UTC +00:00

#Créer un nouveau TimeWithZone basé sur l'heure actuelle
Time.zone.parse("#{Time.current.strftime('%F')} #{Time.current.hour}:00:00")
=> Wed, 15 Jan 2020 13:00:00 UTC +00:00

Résumé

Avant de le toucher, j'étais un peu faible à contrôler le temps, mais j'en ai appris plus en le touchant. S'il existe d'autres méthodes de fonctionnement pratiques qui peuvent être effectuées, je les ajouterai.

Articles que j'ai utilisés comme référence

Recommended Posts

Une collection de méthodes souvent utilisées lors de la manipulation du temps avec TimeWithZone of Rails
Liste des méthodes utilisées lors de la manipulation de chaînes de caractères
Méthodes Ruby souvent utilisées dans Rails
Collection RSpec que j'ai fréquemment utilisée
Une collection de méthodes qui remplacent les caractères saisis dans la recherche de balises de hachage avec une sensation agréable
Une revue du code utilisé par les rails débutants
[Rails] Précautions lors de la comparaison de la date et de l'heure avec DateTime
Une collection de commandes fréquemment utilisées dans heroku
Faites attention au moment d'initialisation lors de l'utilisation de MessageEncryptor avec Rails 5.2 / 6.0
Résumé du travail initial lors de la création d'une application avec Rails
Une série d'étapes pour créer des livrables pour les portefeuilles avec Rails
Les enregistrements existants disparaissent lors de la construction du modèle has_one (rails)
L'histoire du refactoring avec un assistant personnel pour la première fois dans une application Rails
[Rails] Evitez le SELECT émis lors de la création d'un modèle avec appartient_to défini!
Mécanisme et caractéristiques de la classe d'implémentation Collection souvent utilisés en Java
Règles de dénomination lors de la création de nouveaux contrôleurs et modèles avec rails