File Coverage

blib/lib/Date/Jalali.pm
Criterion Covered Total %
statement 44 45 97.7
branch 2 4 50.0
condition 4 9 44.4
subroutine 8 8 100.0
pod 0 4 0.0
total 58 70 82.8


line stmt bran cond sub pod time code
1             package Date::Jalali;
2              
3 1     1   23821 use strict;
  1         2  
  1         38  
4 1     1   4 use warnings;
  1         2  
  1         27  
5 1     1   9 use Exporter;
  1         5  
  1         53  
6 1     1   2232 use AutoLoader qw(AUTOLOAD);
  1         2714  
  1         8  
7              
8             our @ISA = qw(Exporter);
9              
10             our %EXPORT_TAGS = ( 'all' => [ qw(
11            
12             ) ] );
13              
14             our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
15              
16             our @EXPORT = qw(
17            
18             );
19              
20             our $VERSION = '0.01';
21              
22             my @g_days_in_month = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
23             my @j_days_in_month = (31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);
24             my @j_month_name = ("", "Farvardin", "Ordibehesht", "Khordad", "Tir",
25             "Mordad", "Shahrivar", "Mehr", "Aban", "Azar",
26             "Dey", "Bahman", "Esfand");
27              
28             # Preloaded methods go here.
29              
30              
31             sub new {
32 2     2 0 883 my $class = shift;
33 2         6 my ($gy,$gm,$gd)=($_[0]-1600,$_[1]-1,$_[2]-1);
34 2         4 my $self={};
35 2         5 my $i=0;
36              
37 2         11 my $g_day_no = 365*$gy+int(($gy+3)/4)-int(($gy+99)/100)+int(($gy+399)/400);
38              
39 2         9 for ($i=0; $i < $gm; ++$i) {
40 16         34 $g_day_no += $g_days_in_month[$i]; }
41 2 50 33     25 if ($gm>1 && (($gy%4==0 && $gy%100!=0) || ($gy%400==0))) {
      33        
42             #leap and after Feb
43 0         0 ++$g_day_no; }
44 2         4 $g_day_no += $gd;
45              
46 2         4 my $j_day_no = $g_day_no-79;
47              
48 2         4 my $j_np = int($j_day_no/12053);
49 2         4 $j_day_no %= 12053;
50              
51 2         5 my $jy = 979+33*$j_np+4*int($j_day_no/1461);
52              
53 2         4 $j_day_no %= 1461;
54              
55 2 50       8 if ($j_day_no >= 366) {
56 2         4 $jy += int(($j_day_no-1)/365);
57 2         4 $j_day_no = ($j_day_no-1)%365;
58             }
59              
60 2   66     34 for ($i = 0; $i < 11 && $j_day_no >= $j_days_in_month[$i]; ++$i) {
61 10         39 $j_day_no -= $j_days_in_month[$i];
62             }
63 2         5 my $jm = $i+1;
64 2         3 my $jd = $j_day_no+1;
65              
66 2         6 $self->{jal_day}=$jd;
67 2         12 $self->{jal_month}=$jm;
68 2         3 $self->{jal_year}=$jy;
69              
70 2         3 bless $self;
71 2         7 return $self;
72             }
73              
74              
75             sub jal_day {
76 2     2 0 442 my $self = shift;
77 2         18 return ( $self->{jal_day} );
78             }
79              
80             sub jal_month {
81 2     2 0 5 my $self = shift;
82 2         10 return ( $self->{jal_month} );
83             }
84              
85             sub jal_year {
86 2     2 0 5 my $self = shift;
87 2         10 return ( $self->{jal_year} );
88             }
89              
90              
91             # Autoload methods go after =cut, and are processed by the autosplit program.
92              
93             1;
94             __END__