2 Stimmen

Zeitobjekt mit Wochentag und Minuten seit Mitternacht generieren

Ich versuche, ein Time-Objekt zu erzeugen, das mit der nächsten Instanz eines bestimmten Wochentags und der Anzahl der Minuten nach Mitternacht initialisiert wird.

Meine Daten (die einen Zeitplan darstellen) sehen wie folgt aus: Wochentag, Beginn, Ende. Wochentag ist der Wochentag zwischen 0 und 6, und Start/Ende sind ganze Zahlen, die Minuten nach Mitternacht an diesem bestimmten Wochentag darstellen.

Ich würde gerne ein Zeitobjekt für das nächste Mal erhalten, so dass ich flexibler mit den Start- und Endzeiten für Frontend-Zwecke arbeiten kann.

Weiß jemand, wie man das macht? Ich habe mit Time.utc ohne viel Erfolg herumprobiert.

1voto

Jeremy Punkte 4800

Sie können dafür etwas Grundlegendes wie das Folgende tun:

class Schedule
  attr_accessor :day_of_week, :start_minute, :finish_minute

  def start(current_date = Time.zone.now)
    current_date.beginning_of_week + day_of_week.days + start_minute.minutes
  end

  def finish(current_date = Time.zone.now)
    current_date.beginning_of_week + day_of_week.days + finish_minute.minutes
  end

  def length
    (finish_minute - start_minute).minutes
  end
end

Da das ziemlich rudimentär ist und ich nicht genau weiß, wofür Sie es verwenden wollen, schlage ich vor, dass Sie sich einige der Bibliotheken ansehen, die in diese Stelle ice_cube und business_time sehen so aus, als ob sie für das, was Sie vielleicht wollen, geeignet sind

1voto

pushmatrix Punkte 726

Ich bin mir nicht sicher, ob ich das richtig interpretiere... Ist es so, dass Sie bei Angabe eines Wochentags das nächste verfügbare Datum finden, das auf diesen Wochentag fällt? Wenn zum Beispiel heute Dienstag ist und Ihr Zeitplan auf Donnerstag eingestellt ist, dann wird das Zeitobjekt um Mitternacht an diesem Donnerstag sein? Wenn das der Fall ist, sollte so etwas wie das hier funktionieren:

day_difference = @weekday - Time.now.wday
# If the difference is in the past, then add 7 so that it is next week.
if day_difference < 0
  day_difference = day_difference + 7
end
next_date = Time.now.midnight + day_difference.days
start_time = next_date + @start.minutes
end_time = next_date + @finish.minutes

Dónde Wochentag ist der Wert in Ihrem Schedule-Objekt. Noch einmal, ich bin nicht 100% sicher, was Sie fragen. Hier sind start_time und end_time Zeitobjekte, die den nächsten Wochentag repräsentieren und zu denen die entsprechende Anzahl von Minuten hinzugefügt wurde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X