ilość dni pomiędzy dwoma datami

Jako nowy użytkownik na wstępie chciałbym przywitać Wszystkich.
Zaczynam przygodę z R i RoR i mam problem - chciałbym dla testu napisać krótki program obliczający wysokość odsetek ustawowych - w jaki sposób określić ilość dni pomiędzy datą wymagalności roszczenia a datą zapłaty. Znalazłem informacje o przeliczeniu dat na sekundy i ich odjęcia ale nie bardzo wiem jak się do tego zabrać.
Dziękuję za pomoc

Z tego co kojarzę, obiekty typu Date w Rubym możesz normalnie dodawać i odejmować - wyjdzie Ci liczba dni. Próbowałeś w ten sposób?

Jak wpisze daty do kodu to mi rzeczywiście odejmuje ale muszę je wpisać z klawiatury i tu mam kłopot. Wiem że pewnie to są jakieś oczywistości ale dopiero zaczynam i troszkę się w tym wszystkim gubię:(

poczytaj o funkcjach, jesli taka funkcje stworzysz bedzie ona wymagala przeslania do niej 2 parametrow czyli tych dat, pozniej te daty ma od siebie odjac i na koncu zwroci roznice dni

Spróbuj użyć
Date.parse
Chociaż jeśli korzystasz z RoR, to powinien Ci sam ładnie opakować tekst wpisany z klawiatury do formularza w odpowiedni typ, o ile masz prawidłowo zdefiniowany model. Jakbyś mimo wszystko miał problem, to pokaż kawałek kodu - będzie łatwiej podać konkrety.

mam coś takiego:

require ‘date’

datew = Date.new(2005,03,03)
datew.to_s
puts datew

datez = Date.new(2006,06,23)
datez.to_s
puts datez

x = datez - datew
puts x

generalnie mi odejmuje daty ale nie wiem jak mam zrobić aby użytkownik mógł podawać te daty z klawiatury (np. x = gets) i te dane następnie podstawiane byłyby do kodu

x_year = gets.chomp 
x_month = gets.chomp 
x_day = gets.chomp 

Date.new(x_year, x_month, x_day) 

Chyba o coś takiego Ci chodziło, prawda?

wyszło mi tak:

system ‘cls’
require ‘date’
q = 1

puts “Obliczanie kwoty odsetek za opóźnienie w zapłacie”

loop do

print "Podaj kwotę (należność główna) >> "
kwota = gets.to_f

print  "Podaj datę wymagalności roszczenia (rok) >> "
x_year = gets.to_i
print "Podaj datę wymagalności roszczenia (miesiąc) >> "
x_month = gets.to_i
print "Podaj datę wymagalności roszczenia (dzień) >> "
x_day = gets.to_i

print "Podaj datę zapłaty roszczenia (rok) >> "
y_year = gets.to_i
print "Podaj datę zapłaty roszczenia (miesiąc) >> "
y_month = gets.to_i
print "Podaj datę zapłaty zoszczenia (dzień) >> "
y_day = gets.to_i

z = Date.new(y_year, y_month, y_day) - Date.new(x_year, x_month, x_day)

wynik = (0.08/365) * kwota * z

puts "Odsetki za opóźnienie od kwoty #{kwota} zł przy #{z.to_i} dniach opóźnienia w zapłacie wynoszą #{'%.2f' % wynik} zł"

print "Czy potrzebne są dalsze obliczenia ? <1 - tak /0 - nie> "
q = gets

break if q=0

system 'cls'

end

puts “******************************”
puts “Dziękuję”.center(30)
puts “******************************”

Dziękuję bardzo za pomoc. Wyliczenie odsetek nie jest prawidłowe (od 01.01.2016 wysokość odsetek uległa zmianie) ale chodziło mi tylko o wstępne przetestowanie samych mechanizmów.
Zastanawiam się czy jest możliwość podawania pełnej daty za jednym odwołaniem do gets np. 03.04.2016 lub 15/03/2016

Tak, można - wczytujesz jako string, następnie go parsujesz:
http://ruby-doc.org/core-2.1.0/String.html

czyli:

  1. pobierasz stringa z klawiatyury w ustalonym formacie (np dd/mm/rrrr)
  2. wydobywasz z niego co potrzebujesz wrzucając do obiektu klasy Date (Date.new()).
  3. robisz tak dla drugiego
  4. odejmujesz je
  5. działa!

Da się, trzeba tylko ustalić w jakim formacie data będzie podawana

wielkie dzięki - o to chodziło :slight_smile:
pozdrawiam

Dziękuję bardzo za pomoc - cel zaliczony :slight_smile:
niniejszym zamykam wątek - a tak przy okazji mam potwierdzenie że to forum działa i można na Was liczyć:)