[RUBY] Je veux obtenir uniquement l'heure à partir des données de type Time ...! [Strftime] * Notes supplémentaires

Introduction / Situation lorsqu'un problème survient

Environnement de développement

Ruby 2.6.5 Rails 6.0.3.4 MySQL Visual Studio Code (GoogleChrome)

Je crée quelque chose comme une application de calendrier. Je veux enregistrer la date et l'heure de début / fin séparément dans la base de données, j'ai donc créé un formulaire en utilisant time_select dans la colonne de type d'heure pour l'heure.

new.html.erb(Extrait uniquement pour la forme horaire)


<div class="start-date-input">
  <div class="form-title">
Heure de début
    <span class="indispensable">Obligatoire</span>
  </div>
  <div class='input-date-wrap'>
    <%= f.time_select(:start_time, {class:'select-date', id:"start-time", prompt:'--', time_separator: ':'}, ignore_data: true) %>
  </div>
</div>
<div class="start-date-input">
  <div class="form-title">
heure de fin
    <span class="indispensable">Obligatoire</span>
  </div>
  <div class='input-date-wrap'>
    <%= f.time_select(:start_time, {class:'select-date', id:"start-time", prompt:'--', time_separator: ':'}, ignore_data: true) %>
  </div>
</div>
form

Si vous entrez la date et l'heure dans le formulaire comme ci-dessus et soumettez les données à titre d'essai,

db

Il semble que la date, l'heure et chaque heure soient sauvegardées en toute sécurité dans la base de données. Ensuite, quand j'essaye de l'afficher dans la vue ...

show.html.erb


<div class="event-show-info-left">
  <p><%= @event.day %></p>
  <p><strong><%= @event.start_time %></strong></p>
  <p><strong>↓</strong></p>
  <p><strong><%= @event.finish_time %></strong></p>
</div>
before

!!!?!!!?

L'année et le mois mystérieux sont également affichés pour chaque fois ... Qui diable est cet enfant du 20e siècle ...

Examen et vérification de la cause

Une fois, j'ai vérifié les paramètres des données transmises.

[1] pry(#<EventsController>)> params
=> <ActionController::Parameters {
(réduction)

 "day(1i)"=>"2020", "day(2i)"=>"12", "day(3i)"=>"2", 
"start_time(1i)"=>"1", "start_time(2i)"=>"1", "start_time(3i)"=>"1", "start_time(4i)"=>"10", "start_time(5i)"=>"00", 
"finish_time(1i)"=>"1", "finish_time(2i)"=>"1", "finish_time(3i)"=>"1", "finish_time(4i)"=>"13", "finish_time(5i)"=>"30", 

(réduction)
} permitted: false>

(1i)… an (2i)… Mois (3i)… Soleil (4i)… heure (5i)… minutes Comme vous pouvez le voir, la date est donnée avec chaque heure.

Comme cela fait gagner du temps, je lui ai fait un type de temps, donc il ne sera pas reflété dans la DB, En tant que spécification de time_select, on peut considérer qu'il est traité avec" 1 "ajouté à la date. Ce "1" est récupéré dans la vue tel quel, ce qui semble être la cause de l'exemple "2000-01-01".

** Alors, comment obtenez-vous seulement le temps ...? ~ **

Je voudrais imaginer quelque chose du côté de la vue. J'ai vérifié ...

[Officiel] Ruby 2.7.0 Manuel de référence méthode d'instance Time # strftime

strftime(format) -> String Renvoie le résultat de la conversion de l'heure en chaîne selon la chaîne de format.

En référence à ce qui précède, «strftime» semble jouer un rôle actif! Utilisez strftime pour la classe heure de début / heure de fin et formatez-la dans une chaîne.

résultat

Puisque nous ne recevons que l'heure, nous utilisons le format ci-dessous.

-% H: système 24 heures (00-23) -% M: minutes (00-59)

J'ai ajouté .strftime ("% H:% M ") au fichier de vue.

show.html.erb(Réparer)


<div class="event-show-info-left">
  <p><%= @event.day %></p>
  <p><strong><%= @event.start_time.strftime( "%H:%M" ) %></strong></p>
  <p><strong>↓</strong></p>
  <p><strong><%= @event.finish_time.strftime( "%H:%M" ) %></strong></p>
</div>
after

Seule l'heure pouvait être affichée !!

À la fin / impression

strftime et time_select étaient une excellente combinaison!

En ce qui concerne la gestion du temps, lorsqu'il s'agit d'une mise en œuvre à grande échelle dans le futur J'ai également estimé qu'une attention particulière telle que le fuseau horaire et hors de l'année était nécessaire. Je voudrais profiter de cette occasion pour approfondir ma compréhension des cours de Time class.

C'est un mauvais article pour les débutants, mais j'espère qu'il vous sera utile. Merci d'avoir lu jusqu'au bout.

Postscript

11/11 21:40 En ce qui concerne le format de la date et de l'heure, du point de vue de DRY, on m'a dit qu'il vaut mieux correspondre avec le fuseau horaire et les paramètres régionaux, et la méthode l. Veuillez vous référer à l'article ci-dessous.

[Pour les débutants, avec vidéo] Utilisez la méthode l plutôt que strftime lors du formatage de la date et de l'heure avec Rails

Merci @jnchito!

Article de référence

[Officiel] Ruby 2.7.0 Manuel de référence méthode d'instance Time # strftime

[[Officiel] Module Ruby on Rails 6.0.3.4 ActionView :: Helpers :: DateHelper](https://api.rubyonrails.org/v6.0.3.4/classes/ActionView/Helpers/DateHelper.html#method-i- date_select)

[Qiita] Qu'est-ce que strftime?

[Qiita] Afficher la valeur des données de type Heure uniquement pour la partie heure

[Blog Hatena] Demandez à time_select de saisir uniquement l'heure [rails]

Recommended Posts

Je veux obtenir uniquement l'heure à partir des données de type Time ...! [Strftime] * Notes supplémentaires
[Android] Je souhaite obtenir l'auditeur à partir du bouton de ListView
Je veux obtenir la valeur en Ruby
[Java] Je souhaite calculer la différence par rapport à la date
Je souhaite obtenir une liste de chaînes de caractères uniques uniquement en excluant les chaînes de caractères fixes du nom de fichier
Changer un seul caractère de la chaîne de type String en majuscule
[IOS 14] Comment obtenir des données d'image de type Data directement à partir de PHPickerViewController?
Je veux renvoyer un type différent de l'élément d'entrée avec Java8 StreamAPI Reduce ()
Je souhaite accorder des autorisations de modification et de suppression uniquement à l'affiche
[Java] Comment convertir du type String en type Path et obtenir le chemin
[Ruby] Je souhaite afficher uniquement le caractère impair dans la chaîne de caractères
Liste de réglages de Glassfish que je souhaite conserver pour le moment
[Ruby] Je souhaite extraire uniquement la valeur du hachage et uniquement la clé
Comment comparer uniquement le temps avec Rails (de quelle heure à quelle heure, quelque chose comme)
Je veux obtenir le nom de champ du champ [Java]. (Vieux ton d'histoire)
J'ai essayé de traduire la grammaire de R et Java [Mis à jour de temps en temps]
Je veux obtenir la valeur de Cell de manière transparente quel que soit CellType (Apache POI)
[Rails / ActiveRecord] Je souhaite valider la valeur avant la conversion du type (_before_type_cast)
Mémo de développement ~ Je souhaite afficher uniquement la première image publiée plusieurs fois ~
Je veux que vous utilisiez Scala comme meilleur Java pour le moment
Comment obtenir la date du type Date de JavaScript auquel les développeurs C # sont accros
Je veux obtenir récursivement la superclasse et l'interface d'une certaine classe
Exécuter R à partir de Java Je veux exécuter rJava
[Rails] J'ai essayé de faire passer la version de Rails de 5.0 à 5.2
Je veux var_dump le contenu de l'intention
Je veux jouer avec Firestore de Rails
Je veux écrire rapidement de java vers sqlite
Je veux tronquer après la virgule décimale
Je veux afficher quel caractère une chaîne de caractères arbitraire apparaît à partir de la gauche
Je veux voir uniquement les dernières car le journal Docker est devenu trop volumineux
Mauvaise configuration d'énumération. Pour une raison quelconque, je ne peux pas obtenir de données de la colonne spécifiée par Enum ...
# 1_JAVA Je veux obtenir le numéro d'index en spécifiant un caractère dans la chaîne de caractères
Je veux intégrer n'importe quel TraceId dans le journal
Tokoro j'ai réécrit dans la migration de Wicket 7 à 8
Je veux juger la gamme en utilisant le diplôme mensuel
Je veux connaître la réponse de l'application Janken
Je souhaite afficher le nom de l'affiche du commentaire
Je veux appeler la méthode principale en utilisant la réflexion
[Commentaire approximatif] Je veux épouser la méthode du pluck
Je veux retourner la position de défilement de UITableView!
Je souhaite simplifier la sortie du journal sur Android
Je souhaite créer une annotation générique pour un type
Je souhaite ajouter une fonction de suppression à la fonction de commentaire
Un mémorandum quand j'ai étudié comment convertir du type Epoch Time en Date avec Scala
Je veux obtenir une liste du contenu d'un fichier zip et sa taille non compressée
Je souhaite régler la durée de lecture de la vidéo (HH: MM: SS) sur le nombre de secondes, et vice versa