Date_Hijri
view release on metacpan or search on metacpan
#!/usr/bin/perl
############################################################
# Date::Hijri
# module for converting islamic (hijri) and gregorian dates
# (c) zeitform Internet Dienste 2003 - alex@zeitform.de
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
#
# based on kcalendarsystemhijri.cpp
# Copyright (c) 2002-2003 Carlos Moro <cfmoro@correo.uniovi.es>
# Copyright (c) 2002-2003 Hans Petter Bieker <bieker@kde.org>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; see the file COPYING.LIB. If not, write to
# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
#
# kcalendarsystemhijri.cpp
# [...] is translated from the Lisp code
# in ``Calendrical Calculations'' by Nachum Dershowitz and
# Edward M. Reingold, Software---Practice & Experience,
# vol. 20, no. 9 (September, 1990), pp. 899--928.
#
# This code is in the public domain, but any use of it
# should publically acknowledge its source.
#
# Example usage:
#
}
sub h2g
{
my ($day, $month, $year) = @_;
return Absolute2Gregorian(Islamic2Absolute($day, $month, $year));
}
sub lastDayOfGregorianMonth
{
# Compute the last date of the month for the Gregorian calendar.
my ($month, $year) = @_;
if ($month == 2)
{
return 29 if ($year % 4 == 0 && $year % 100 != 0) || ($year % 400 == 0);
}
return (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)[$month - 1];
}
sub Gregorian2Absolute
{
sub IslamicLeapYear
{
# True if year is an Islamic leap year
my ($year) = @_;
return ((((11 * $year) + 14) % 30) < 11) ? 1 : 0;
}
sub lastDayOfIslamicMonth
{
# Last day in month during year on the Islamic calendar.
my ($month, $year) = @_;
return ($month % 2 == 1) || ($month == 12 && IslamicLeapYear($year)) ? 30 : 29;
}
sub Islamic2Absolute
{
# Computes the absolute date from the Islamic date.
my ($day, $month, $year) = @_;
return int($day # days so far this month
+ 29 * ($month - 1) # days so far...
+ int($month /2) # ...this year
+ 354 * ($year - 1) # non-leap days in prior years
+ (3 + (11 * $year)) / 30 # leap days in prior years
+ IslamicEpoch); # days before start of calendar
}
sub Absolute2Islamic
{
# Computes the Islamic date from the absolute date.
my ($d) = @_;
my ($day, $month, $year);
if ($d <= IslamicEpoch)
{
# Date is pre-Islamic
#!/usr/bin/perl -w
use Date::Hijri;
print join("-", g2h(22,8,2003)); # prints 23-6-1424
print join("-", h2g(23,6,1424)); # prints 22-8-2003
=head1 SEE ALSO
This code is just stolen from KDE's L<kcalendarsystemhijri.cpp> at
http://webcvs.kde.org/cgi-bin/cvsweb.cgi/kdelibs/kdecore/kcalendarsystemhijri.cpp
Copyright (c) 2002-2003 Carlos Moro <cfmoro@correo.uniovi.es>
Copyright (c) 2002-2003 Hans Petter Bieker <bieker@kde.org>
kcalendarsystemhijri.cpp is translated from the Lisp code
in ``Calendrical Calculations'' by Nachum Dershowitz and
Edward M. Reingold, Software---Practice & Experience,
vol. 20, no. 9 (September, 1990), pp. 899--928.
This code is in the public domain, but any use of it
should publically acknowledge its source.
=head1 AUTHOR
Alex Pleiner, E<lt>alex@zeitform.deE<gt>
Copyright (c) 2003 zeitform Internet Dienste. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=head1 DISCLAIMER
I haven't really tested if the converted dates are right and hope
someone will point out mistakes.
Hijri calculations are very difficult. The islamic calendar is a pure
lunar calendar, the new month starts by a physical (i.e. human)
sighting of the crescent moon at a given locale. So it depends on
several factors (like weather) that make it unreliable to calculate
islamic calendars in advance. As a result the dates calculated by
Date::Hijri can be false by one or more days.
Please see http://www.rabiah.com/convert/introduction.html for further
explanation.
I'm not a muslim, but interested in Islamic culture, religion and
calendar system. I believe in the Internet as a chance to realize that
we live in a small world with multiple cultures, religions and
philosophies. We can learn from others and develop tolerance, respect
and understanding.
Salam Alaikum (peace be with you)
=cut
## -fin-
This module does not require other modules or libraries:
COPYRIGHT AND LICENCE
Copyright (C) 2003 Alex Pleiner - zeitform Internet Dienste
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
This code is just stolen from KDE's L<kcalendarsystemhijri.cpp> at
http://webcvs.kde.org/cgi-bin/cvsweb.cgi/kdelibs/kdecore/kcalendarsystemhijri.cpp
Copyright (c) 2002-2003 Carlos Moro <cfmoro@correo.uniovi.es>
Copyright (c) 2002-2003 Hans Petter Bieker <bieker@kde.org>
kcalendarsystemhijri.cpp is translated from the Lisp code in
``Calendrical Calculations'' by Nachum Dershowitz and Edward
M. Reingold, Software---Practice & Experience, vol. 20, no. 9
(September, 1990), pp. 899--928.
This code is in the public domain, but any use of it should publically
acknowledge its source.
( run in 0.501 second using v1.01-cache-2.11-cpan-5dc5da66d9d )