lib/hijri/date.rb in hijri-0.0.5 vs lib/hijri/date.rb in hijri-0.1.0
- old
+ new
@@ -1,22 +1,46 @@
-class Date
- def to_hijri
- Hijri::Hijri.new *Hijri::Converter.greo_to_hijri(self)
- end
-
- def last_day_of_gregorian_month(month)
- # Compute the last date of the month for the Gregorian calendar.
- if month == 2
- return 29 if (self.year % 4 == 0 && self.year % 100 != 0) || (self.year % 400 == 0)
+module Hijri
+ class Date
+
+ attr_accessor :day, :month, :year
+ MONTHNAMES_EN = %w(Muharram Safar Rabia-Awwal Rabia-Thani Jumaada-Awal Jumaada-Thani Rajab Sha'ban Ramadan Shawwal Dhul-Qi'dah Dhul-Hijjah)
+ DAYNAMES = %w(as-Sabt al-Ahad al-Ithnayn ath-Thalaathaa al-Arba'aa' al-Khamis al-Jumu'ah)
+
+ def initialize(year=1, month=1, day=1)
+ @year, @month, @day = year, month, day
end
- return [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month - 1]
- end
-
- def to_abs
- @d = self.day
- @m = self.month - 1
- @m.downto(1) do |m|
- @d += last_day_of_gregorian_month(@m, year)
+
+ def islamic_leap_year?
+ return (((((11 * self.year) + 14) % 30) < 11) ? true : false)
end
- return (@d + 365 * (year - 1) + (year -1) / 4.0 - (year - 1) / 100.0 + (year - 1) / 400.0).to_i
+
+ def last_day_of_islamic_month
+ # Last day in month during year on the Islamic calendar.
+ return ((self.month % 2 == 1) || (self.month == 12 && islamic_leap_year?) ? 30 : 29)
+ end
+
+ def to_s
+ "#{@year}-#{sprintf('%02d', @month)}-#{sprintf('%02d', @day)}"
+ end
+
+ def to_abs
+ month_days = 29 * (month - 1) # days on this year
+ nonleap_year_days = 354 * (year - 1)
+ leap_year_days = (3 + (11 * year)) / 30.0
+ this_year = (month / 2.0).to_i
+
+ return (day + month_days + this_year + nonleap_year_days + leap_year_days + Hijri::ISLAMIC_EPOCH).to_i
+ end
+
+ def to_greo
+ ::Date.new *Converter.hijri_to_greo(self)
+ end
+
+ class << self
+ def today
+ date = ::Date.today
+ date.to_hijri
+ end
+ end
+
end
-end
+end
\ No newline at end of file