2016-04-28 7 views
-1

Ich habe ein Problem mit dem Zählen der Tage zwischen Ende_at und Start_at im Objekt @nearest_vacation. Struktur des Objekts @nearest_vacation:Wert von Array erhalten und Unterschiede zwischen Daten zählen

[#<Vacation id: 11, start_at: "2016-04-30", end_at: "2016-05-02", free: false, reason: "Rocznica", person_id: 1>] 

Wenn ich @nearest_vacation.map{|x| x.end_at} versuchen, es zurückgibt: [Mon, 02 May 2016] Dieses Format des Datums erlaubt mir nicht, wie das zu tun: (end_at - start_at).to_i. Wie erhalten Sie die Werte end_at und start_at, um die Differenz zwischen den Daten zu berechnen?

+0

Warum haben Sie ein Array? Sicherlich wollen Sie nur eine einzige Instanz von Urlaub. Wie haben Sie diesen Datensatz abgerufen? – DickieBoy

+3

'Dieses Format des Datums erlaubt mir nicht, so zu tun: (end_at - start_at) .to_i' Haben Sie das versucht? Was ist der Fehler, den Sie bekommen? – Alfie

+0

@Alfie das 'Format' dieses Datums ist in Ordnung, es ist die Tatsache, dass es in einem Array das Problem ist. – DickieBoy

Antwort

2

Ihr Problem ist, dass Sie eine Reihe von Vacations haben.

Wenn Sie wirklich ein Array brauchen, kein Problem.

# notice the pluralised variable name 
@nearest_vacations.map{|nv| (nv.end_at - nv.start_at)} 

Das obige gibt Ihnen ein Array mit den Unterschieden in den Daten zurück.

Was ich hier vermute, ist, dass Sie Arrays und Instanzen verwirrt haben. Aus diesem Grund müssen Sie .map verwenden, um den Wert end_at aus Ihrem Urlaubsgebiet zu erhalten.

I denke, die eigentliche Frage ist, warum Ihre nearest_vacation ist ein Array. Der Name der Variablen und die Tatsache, dass sie nicht plural ist, sagt mir, dass Sie kein Array, sondern nur eine Instanz haben wollen. Finden Sie, wo Ihre nearest_vacation Variable auf ein Array gesetzt wird, beheben Sie das, dann sollte Ihr Code funktionieren.

2

können Sie mjd Methode verwenden:

Date.parse("2016-05-02").mjd - Date.parse("2016-04-20").mjd 
=> 12 #days 
Verwandte Themen