syncing dev-week and HEAD
[koha.git] / C4 / Date.pm
1 #!/usr/bin/perl -w
2
3 package C4::Date;
4
5 use strict;
6 use C4::Context;
7 use Date::Manip;
8
9 require Exporter;
10
11 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
12
13 $VERSION = 0.01;
14
15 @ISA = qw(Exporter);
16
17 @EXPORT = qw(
18              &display_date_format
19              &format_date
20              &format_date_in_iso
21              &today
22              get_date_format_string_for_DHTMLcalendar
23 );
24
25
26 sub get_date_format
27 {
28         #Get the database handle
29         my $dbh = C4::Context->dbh;
30         return C4::Context->preference('dateformat');
31 }
32
33 sub display_date_format
34 {
35         my $dateformat = get_date_format();
36
37         if ( $dateformat eq "us" )
38         {
39                 return "mm/dd/yyyy";
40         }
41         elsif ( $dateformat eq "metric" )
42         {
43                 return "dd/mm/yyyy";
44         }
45         elsif ( $dateformat eq "iso" )
46         {
47                 return "yyyy-mm-dd";
48         }
49         else
50         {
51                 return "Invalid date format: $dateformat. Please change in system preferences";
52         }
53 }
54
55 sub get_date_format_string_for_DHTMLcalendar {
56     my $dateformat = get_date_format();
57
58     if ($dateformat eq 'us') {
59         return '%m/%d/%Y';
60     }
61     elsif ($dateformat eq 'metric') {
62         return '%d/%m/%Y';
63     }
64     elsif ($dateformat eq "iso") {
65         return '%Y-%m-%d';
66     }
67     else {
68         return
69             'Invalid date format: '.$dateformat.'.'
70             .' Please change in system preferences';
71     }
72 }
73
74
75 sub format_date
76 {
77         my $olddate = shift;
78         my $newdate;
79
80         if ( ! $olddate )
81         {
82                 return "";
83         }
84
85         my $dateformat = get_date_format();
86
87         if ( $dateformat eq "us" )
88         {
89                 Date_Init("DateFormat=US");
90                 $olddate = ParseDate($olddate);
91                 $newdate = UnixDate($olddate,'%m/%d/%Y');
92         }
93         elsif ( $dateformat eq "metric" )
94         {
95                 Date_Init("DateFormat=metric");
96                 $olddate = ParseDate($olddate);
97                 $newdate = UnixDate($olddate,'%d/%m/%Y');
98         }
99         elsif ( $dateformat eq "iso" )
100         {
101                 Date_Init("DateFormat=iso");
102                 $olddate = ParseDate($olddate);
103                 $newdate = UnixDate($olddate,'%Y-%m-%d');
104         }
105         else
106         {
107                 return "Invalid date format: $dateformat. Please change in system preferences";
108         }
109 }
110
111 sub format_date_in_iso
112 {
113         my $olddate = shift;
114         my $newdate;
115
116         if ( ! $olddate )
117         {
118                 return "";
119         }
120                 
121         my $dateformat = get_date_format();
122
123         if ( $dateformat eq "us" )
124         {
125                 Date_Init("DateFormat=US");
126                 $olddate = ParseDate($olddate);
127         }
128         elsif ( $dateformat eq "metric" )
129         {
130                 Date_Init("DateFormat=metric");
131                 $olddate = ParseDate($olddate);
132         }
133         elsif ( $dateformat eq "iso" )
134         {
135                 Date_Init("DateFormat=iso");
136                 $olddate = ParseDate($olddate);
137         }
138         else
139         {
140                 return "9999-99-99";
141         }
142
143         $newdate = UnixDate($olddate, '%Y-%m-%d');
144
145         return $newdate;
146 }
147
148 #function to return a current date OUEST-PROVENCE
149 sub today
150 {
151     my ($adddate) =@_;
152          my($j,$m,$a)=(localtime)[3,4,5];
153         if ($j<10) {
154                 $j= '0'.$j;     
155         }
156         $m=$m+1;
157         if ($m<10){
158                 $m= '0'.$m
159         }
160         $a=$a+1900+$adddate;
161         return format_date("$a-$m-$j");
162 }
163
164
165 1;