#!/usr/bin/perl

use Time::Local;

sub month_name {

	my (@MONTH) = ($D_JAN, $D_FEB, $D_MAR, $D_APR, $D_MAY, $D_JUN, $D_JUL, $D_AUG, $D_SEP, $D_OCT, $D_NOV, $D_DEC );

	my ($date) =@_; #In 'YYYY-MM-DD' format
	if($date =~ /(\d\d\d\d)\-(\d\d)\-(\d\d)/ ){
                        return @MONTH[$2-1] . " " . $1;
        }

	return;
}

sub year_begin {
        my ($date) =@_; #In 'YYYY-MM-DD' format
        if($date =~ /(\d\d\d\d)\-(\d\d)\-(\d\d)/ ){
                        return $1 . "-01-01";
        }

        return ;
}

	

sub convert2rus{
        my ($date) =@_; #In 'YYYY-MM-DD' format
        if($date =~ /(\d\d\d\d)\-(\d\d)\-(\d\d)/ ){
                        return "$3.$2.$1";
        }
        return ;
}

sub month_begin {
        my ($date) =@_; #In 'YYYY-MM-DD' format
        if($date =~ /(\d\d\d\d)\-(\d\d)\-(\d\d)/ ){
                        return $1 . "-" . $2 . "-01";
        }

        return ;
}

sub month_end {
        my ($date) =@_; #In 'YYYY-MM-DD' format
        $month_begin = month_begin($date);
        if($month_begin) {
                chop($month_end=`date -j -v+1m -v-1d -f "%Y-%m-%d" $month_begin "+%Y-%m-%d"`);
                return $month_end;
        }
        return ;
}

sub previous_month_begin {
        my ($date) =@_; #In 'YYYY-MM-DD' format
        $month_begin = month_begin($date);
        if($month_begin) {
                chop($previous_month_begin=`date -j -v-1m -f "%Y-%m-%d" $month_begin "+%Y-%m-%d"`);
                return $previous_month_begin;
        }
        return ;
}
sub time2str {
        my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(shift @_);
        $mon++;
        $year += 1900;
        return sprintf("%.4i-%.2i-%.2i %.2i:%.2i:%.2i",$year,$mon,$mday,$hour,$min,$sec);
}



sub convert_date {
        my ($date,$DATE_FORMAT) =@_;
        if($DATE_FORMAT eq 'DD.MM.YYYY') {
                if($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)/ ){
                        return $3 . "-" . $2 . "-" . $1;
                }
        };

        if($DATE_FORMAT eq 'YYYY-MM-DD') {
                if($date =~ /(\d\d\d\d)\-(\d\d)\-(\d\d)/ ){
                        return $1 . "-" . $2 . "-" . $3;
                }
        };

        if($DATE_FORMAT eq 'DD.MM.YYYY HH24') {
                if($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)/ ){
                        return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":00";
                } elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)/ ){
                        return $3 . "-" . $2 . "-" . $1;
		}
        };

	if($DATE_FORMAT eq 'DD.MM.YYYY HH24:MI') {
                if($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)\:(\d+)/ ){
                        return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":" . $5 ;
                } elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)/ ){
			 return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":00";
		} elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)/ ){
                        return $3 . "-" . $2 . "-" . $1;
                }

		
        };

        if($DATE_FORMAT eq 'DD.MM.YYYY HH24:MI:SS') {
                if($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)\:(\d+)\:(\d+)/ ){
                        return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":" . $5 . ":" . $6;
                } elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)\:(\d+)/ ){
                        return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":" . $5 ;
                } elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)/ ){
                         return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":00";
                } elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)/ ){
                        return $3 . "-" . $2 . "-" . $1;
                }

        };

        return undef;
}

sub date2unixtime {
	my($date, $time) = @_;
	if(defined(my $std_date = convert_date($date, $D_TIME_FORMAT))) {
		my($year, $mon, $mday, $hour, $min, $sec) = $std_date =~ /^(\d\d\d\d)-(\d\d)-(\d\d)(?: (\d\d)\:(\d\d)(?:\:(\d\d))?)?$/;

		unless(defined $hour) {
			($hour, $min, $sec) = $time =~ /^(\d\d):(\d\d)(:(\d\d))?$/;
		}
		
		return timelocal($sec, $min, $hour, $mday, $mon - 1, $year - 1900);
	}
	return undef;
}

sub unixtime2date {
	my($time, $date_format) = @_;
	my($sec, $min, $hour, $mday, $mon, $year) = localtime($time);

	my $rv = $date_format;
	$rv =~ s/DD/sprintf("%02d", $mday)/e;
	$rv =~ s/MM/sprintf("%02d", $mon + 1)/e;
	$rv =~ s/YYYY/sprintf("%04d", $year + 1900)/e;
	$rv =~ s/HH24/sprintf("%02d", $hour)/e;
	$rv =~ s/MI/sprintf("%02d", $min)/e;
	$rv =~ s/SS/sprintf("%02d", $sec)/e;

	return $rv;
}

1;
