[RUBY] Ich möchte nur die Zeit aus Zeittypdaten abrufen ...! [Strftime] * Zusätzliche Hinweise

Einführung / Situation, wenn ein Problem auftritt

Entwicklungsumgebung

Ruby 2.6.5 Rails 6.0.3.4 MySQL Visual Studio Code (GoogleChrome)

Ich mache so etwas wie eine Kalender-App. Ich möchte das Datum und die Start- / Endzeit separat in der Datenbank speichern, daher habe ich ein Formular mit "time_select" in der Spalte "Zeittyp" für die Uhrzeit erstellt.

new.html.erb(Auszug nur für Zeitform)


<div class="start-date-input">
  <div class="form-title">
Startzeit
    <span class="indispensable">Verpflichtend</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">
Endzeit
    <span class="indispensable">Verpflichtend</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

Wenn Sie Datum und Uhrzeit wie oben in das Formular eingeben und die Daten als Testversion einreichen,

db

Es scheint, dass Datum und Uhrzeit sowie jedes Mal sicher in der Datenbank gespeichert sind. Wenn ich dann versuche, es in der Ansicht anzuzeigen ...

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

!!!?!!!?

Das mysteriöse Jahr und der mysteriöse Monat werden ebenfalls für jedes Mal angezeigt ... Wer zum Teufel ist dieses Kind des 20. Jahrhunderts ...

Berücksichtigung und Überprüfung der Ursache

Einmal habe ich die Parameter der übertragenen Daten überprüft.

[1] pry(#<EventsController>)> params
=> <ActionController::Parameters {
(Kürzung)

 "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", 

(Kürzung)
} permitted: false>

(1i)… Jahr (2i)… Monat (3i)… Sonne (4i)… Zeit (5i)… Minuten Wie Sie sehen können, wird das Datum zusammen mit jeder Zeit angegeben.

Da dies Zeit spart, habe ich es zu einem Zeittyp gemacht, damit es nicht in der Datenbank angezeigt wird. Als Spezifikation von "time_select" kann davon ausgegangen werden, dass es mit "1" behandelt wird, das dem Datum hinzugefügt wird. Diese "1" wird so wie sie ist in die Ansicht abgerufen, was die Ursache für das Beispiel "2000-01-01" zu sein scheint.

** Wie bekommst du dann nur die Zeit ...? ~ **

Ich möchte etwas auf der Ansichtsseite erfinden. Ich überprüfte ...

[Official] Ruby 2.7.0 Referenzhandbuch Instanzmethode Time # strftime

strftime(format) -> String Gibt das Ergebnis der Konvertierung der Zeit in eine Zeichenfolge gemäß der Formatzeichenfolge zurück.

In Bezug auf das oben Gesagte scheint "strftime" eine aktive Rolle zu spielen! Verwenden Sie "strftime" für die Startzeit- / Endzeitklasse und formatieren Sie sie in eine Zeichenfolge.

Ergebnis

Da wir nur die Zeit bekommen, verwenden wir das folgende Format.

-% H: 24-Stunden-System (00-23) -% M: Minuten (00-59)

Ich habe der Ansichtsdatei ".strftime ("% H:% M ")" hinzugefügt.

show.html.erb(Fix)


<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

Es konnte nur die Uhrzeit angezeigt werden !!

Am Ende / Eindruck

strftime und time_select waren eine tolle Kombination!

In Bezug auf den Umgang mit Zeit, wenn es um eine groß angelegte Implementierung in der Zukunft geht Ich hatte auch das Gefühl, dass besondere Überlegungen wie Zeitzone und Nebenjahr erforderlich sind. Ich möchte diese Gelegenheit nutzen, um mein Verständnis für Zeitklassen zu vertiefen.

Dies ist ein schlechter Artikel für Anfänger, aber ich hoffe, er wird Ihnen helfen. Vielen Dank für das Lesen bis zum Ende.

Nachtrag

11/11 21:40 In Bezug auf das Datums- und Zeitformat wurde ich unter dem Gesichtspunkt von DRY angewiesen, dass es besser ist, der Zeitzone und dem Gebietsschema sowie der l -Methode zu entsprechen. Bitte beachten Sie den Artikel unten.

[Für Anfänger mit Video] Verwenden Sie beim Formatieren von Datum und Uhrzeit mit Rails die Methode l anstelle von strftime.

Vielen Dank, dass Sie @jnchito!

Referenzartikel

[Official] Ruby 2.7.0 Referenzhandbuch Instanzmethode Time # strftime

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

[Qiita] Was ist Strftime?

[Qiita] Zeigt den Wert der Zeittypdaten nur für den Zeitteil an

[Hatena Blog] Lassen Sie time_select nur time [Rails] eingeben.

Recommended Posts

Ich möchte nur die Zeit aus Zeittypdaten abrufen ...! [Strftime] * Zusätzliche Hinweise
[Android] Ich möchte den Listener über die Schaltfläche in ListView abrufen
Ich möchte den Wert in Ruby erhalten
[Java] Ich möchte die Differenz zum Datum berechnen
Ich möchte eine Liste nur eindeutiger Zeichenfolgen erhalten, indem feste Zeichenfolgen vom Dateinamen ausgeschlossen werden
Ändern Sie nur ein Zeichen vom String vom Typ String in Großbuchstaben
[IOS 14] Wie erhalte ich Bilddaten vom Datentyp direkt von PHPickerViewController?
Ich möchte mit Java8 StreamAPI redu () einen anderen Typ als das Eingabeelement zurückgeben.
Ich möchte nur dem Poster Bearbeitungs- und Löschberechtigungen erteilen
[Java] So konvertieren Sie vom Typ String in den Pfadtyp und erhalten den Pfad
[Ruby] Ich möchte nur das ungerade Zeichen in der Zeichenfolge ausgeben
Glassfish Tuning List, die ich vorerst behalten möchte
[Ruby] Ich möchte nur den Wert des Hash und nur den Schlüssel extrahieren
Wie man nur die Zeit mit Rails vergleicht (von welcher Zeit bis zu welcher Zeit, so etwas wie)
Ich möchte den Feldnamen des [Java] -Felds erhalten. (Alter Ton)
Ich habe versucht, die Grammatik von R und Java zu übersetzen [Von Zeit zu Zeit aktualisiert]
Ich möchte den Wert von Cell unabhängig vom CellType (Apache POI) transparent erhalten.
[Rails / ActiveRecord] Ich möchte den Wert überprüfen, bevor der Typ konvertiert wird (_before_type_cast).
Entwicklungsnotiz ~ Ich möchte nur das erste Bild anzeigen, das mehrmals gepostet wurde ~
Ich möchte, dass Sie Scala vorerst als besseres Java verwenden
So ermitteln Sie das Datum aus dem Datumstyp von JavaScript, von dem C # -Entwickler abhängig sind
Ich möchte rekursiv die Oberklasse und die Schnittstelle einer bestimmten Klasse erhalten
R von Java ausführen Ich möchte rJava ausführen
[Rails] Ich habe versucht, die Version von Rails von 5.0 auf 5.2 zu erhöhen
Ich möchte den Inhalt der Absicht var_dump
Ich möchte mit Firestore von Rails spielen
Ich möchte schnell von Java nach SQLite schreiben
Ich möchte nach dem Dezimalpunkt abschneiden
Ich möchte ausgeben, welches Zeichen eine beliebige Zeichenfolge von links erscheint
Ich möchte nur das Neueste sehen, da das Docker-Protokoll zu groß geworden ist
Enum Fehlkonfiguration. Aus irgendeinem Grund kann ich keine Daten aus der von Enum angegebenen Spalte abrufen ...
# 1_JAVA Ich möchte die Indexnummer durch Angabe eines Zeichens in der Zeichenfolge erhalten
Ich möchte eine TraceId in das Protokoll einbetten
Tokoro habe ich in der Migration von Wicket 7 auf 8 umgeschrieben
Ich möchte den Bereich anhand des monatlichen Abschlusses beurteilen
Ich möchte die Antwort der Janken-App wissen
Ich möchte den Namen des Posters des Kommentars anzeigen
Ich möchte die Hauptmethode mit Reflektion aufrufen
[Grober Kommentar] Ich möchte die Zupfmethode heiraten
Ich möchte die Bildlaufposition von UITableView zurückgeben!
Ich möchte die Protokollausgabe unter Android vereinfachen
Ich möchte eine generische Anmerkung für einen Typ erstellen
Ich möchte der Kommentarfunktion eine Löschfunktion hinzufügen
Ein Memorandum, als ich untersuchte, wie man mit Scala vom Typ Epoch Time to Date konvertiert
Ich möchte eine Liste des Inhalts einer Zip-Datei und ihrer unkomprimierten Größe erhalten
Ich möchte die Videowiedergabezeit (HH: MM: SS) auf die Anzahl der Sekunden einstellen und umgekehrt