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>
Si vous entrez la date et l'heure dans le formulaire comme ci-dessus et soumettez les données à titre d'essai,
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>
!!!?!!!?
L'année et le mois mystérieux sont également affichés pour chaque fois ... Qui diable est cet enfant du 20e siècle ...
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.
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>
Seule l'heure pouvait être affichée !!
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.
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.
Merci @jnchito!
[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]