2
0
mirror of https://github.com/ACSPRI/queXS synced 2024-04-02 12:12:16 +00:00

Merged from McMasterReports branch

This commit is contained in:
azammitdcarf
2010-01-14 07:45:37 +00:00
parent 18dbb16138
commit d1b139d315
1884 changed files with 555891 additions and 364768 deletions

View File

@@ -0,0 +1,38 @@
$date = new dateparser();
Example usage : $date->parseDate("Y-m-d H:i:s","2008-4-24 20:28:34");
Returns : array( "Year"=>2008,
"Month"=>4,
"Day"=>24,
"Hour"=>20,
"Minute"=>28,
"Second"=>34,
"Timezone"=>"+0300"
);
=======================================
Other Functions :
=======================================
$date->Compare($date1,$date2)
-------------------------------
$date1 and $date2 is date in array format which our first function creates. Returns 1 if first is newer,-1 if second is newer, 0 if they are the exactly same.
$date->dateDiff($pattern1,$date1,$pattern2,$date2);
---------------------------------------------------
$date1 and $date2 are string dates and the $pattern1 $pattern2 is the identifier patterns of them. Produces a new array which contains the difference of year,month,day,hour,minute,second variables in date format.
$date->Format($patternTo,$patternFrom,$date);
---------------------------------------------
returns a reformatted date value. for example;
$date->Format("j F Y H:i","Y-m-d H:i:s","2008-04-29 09:44:32")
returns "29 April 2008 09:44"
Function Localize and generatePattern are internal functions. Localize is not complete yet but I think you can complete it yourself. generatePattern generates RegExp pattern from date patterns for later usage in the parseDate function. All date types which supported in php.net are added to this script.

View File

@@ -0,0 +1,298 @@
<?php
/**
* Converts string date to date array by using date patterns.
*
* Example usage : $sd->parseDate("Y-m-d H:i:s","2008-4-24 20:28:34");
* Returns : array( "Year"=>2008,
* "Month"=>4,
* "Day"=>24,
* "Hour"=>20,
* "Minute"=>28,
* "Second"=>34,
* "Timezone"=>"+0300"
* );
*
*/
class DateParser {
var $date;
var $tempdate;
var $patrVal;
var $timezone;
var $days3 = array("Mon","Tue","Wed","Thu","Fri","Sat","Sun");
var $days = array("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");
var $month3 = array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
var $month = array("January","February","March","April","May","June","July","August","September","October","November","December");
var $types=array(
"d"=>"([0-9]{2})",
"D"=>"([a-zA-z]{3})",
"j"=>"([0-9]{1,2})",
"l"=>"([A-Z][a-z]{4,7})",
"N"=>"([1-7])",
"S"=>"(st|nd|rd|th)",
"w"=>"([0-6])",
"z"=>"([0-9]{3})",
"W"=>"([0-9]{2})",
"F"=>"([A-Z][a-z]{2,8})",
"m"=>"([0-9]{2})",
"M"=>"([A-Za-z]{3})",
"n"=>"([0-9]{1,2})",
"t"=>"(28|29|30|31)",
"L"=>"(1|0)",
"o"=>"([0-9]{4})",
"Y"=>"([0-9]{4})",
"y"=>"([0-9]{2})",
"a"=>"(am|pm)",
"A"=>"(AM|PM)",
"B"=>"([0-9]{3})",
"g"=>"([1-12])",
"G"=>"([0-23])",
"h"=>"([0-9]{2})",
"H"=>"([0-9]{2})",
"i"=>"([0-9]{2})",
"s"=>"([0-9]{2})",
"u"=>"([0-9]{1,5})",
"e"=>"([A-Za-z0-9_]{3,})",
"I"=>"(1|0)",
"O"=>"(+[0-9]{4})",
"P"=>"(+[0-9]{2}:[0-9]{2})",
"T"=>"([A-Z]{1,4})",
"Z"=>"(-?[0-9]{1,5})",
"c"=>"(\d\d\d\d)(?:-?(\d\d)(?:-?(\d\d)(?:[T](\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(?:Z|(?:([-+])(\d\d)(?::?(\d\d))?)?)?)?)?)?",
"r"=>"([a-zA-Z]{2,}),\040(\d{1,})\040([a-zA-Z]{2,})\040([0-9]{4})\040([0-9]{2}):([0-9]{2}):([0-9]{2})\040([+-][0-9]{4})",
"U"=>"(\d+)"
);
private static $hrFormats=array(
"Y"=>"yyyy",
"j"=>"d[d]",
"n"=>"m[m]",
"d"=>"dd",
"m"=>"mm",
"H"=>"hh",
"i"=>"mm",
"s"=>"ss"
);
# 0-7 Day
# 8 Week
# 9-13 Month
# 14-17 Year
# 18-27 Time
# 28-33 Timezone
/**
* Internal function which generates regex pattern from date pattern
*
* @param string $dateformat
* @return string
*/
function generatePattern($dateformat){
$k=0;
$datearray = preg_split("//",$dateformat);
$patternkey = array();
for($i=0;$i<count($datearray);$i++){
if(isset($datearray[$i-1]) && $datearray[$i-1]=="@"){ $patternkey[$i]=$datearray[$i];}
elseif($datearray[$i]=="@"){$patternkey[$i]="";}
elseif($datearray[$i]==" "){$patternkey[$i]="\040";}
elseif(in_array($datearray[$i],array_keys($this->types))){
$patternkey[$i]=$this->types[$datearray[$i]];
$this->patrVal[$k] = array_search($datearray[$i],array_keys($this->types));
$k++;
}else{$patternkey[$i]=$datearray[$i];}
}
$patternkey = implode("",$patternkey);
return "/".$patternkey."/";
}
/**
* Converts the string date to array by using the pattern generated by generatePattern() function
*
* @param string $dateformat
* @param string $date
* @param boolean $localize
* @return array
*/
function parseDate($dateformat,$date,$localize=false){
$newdate="";
$dateformat = str_replace(array("\\","\t"),array("@","@t"),$dateformat);
$pattern = $this->generatePattern($dateformat);
preg_match_all($pattern,$date,$newdate);
$newdate = array_slice($newdate,1);
if($this->patrVal[0]==34){
$resultvar = array("Year"=>$newdate[0],
"Year"=>$newdate[0][0],
"Month"=>$newdate[1][0],
"Day"=>$newdate[2][0],
"Hour"=>$newdate[3][0],
"Minute"=>$newdate[4][0],
"Second"=>$newdate[5][0],
"Timezone"=>$newdate[6][0].$newdate[7][0].$newdate[8][0]);
}elseif($this->patrVal[0]==35){
$resultvar = array("Year"=>$newdate[0],
"Year"=>$newdate[3][0],
"Month"=>(array_search($newdate[2][0],$this->month3)+1),
"Day"=>$newdate[1][0],
"Hour"=>$newdate[4][0],
"Minute"=>$newdate[5][0],
"Second"=>$newdate[6][0],
"Timezone"=>$newdate[7][0]);
}elseif($this->patrVal[0]==36){
$result = getdate(mktime($newdate));
$resultvar = array(
"Year"=>$result["year"],
"Month"=>array_search($result["month"],$this->month)+1,
"Day"=>$result["mday"],
"Hour"=>$result["hours"],
"Minute"=>$result["minutes"],
"Second"=>$result["seconds"],
"Timezone"=>date("O"));
}else{
$labels = array_keys($this->types);
for($i=0;$i<count($newdate);$i++) {
if(!isset($newdate[$i][0])) {
return null;
}
$result[$labels[$this->patrVal[$i]]]=$newdate[$i][0];
}
if(isset($result["F"])) $month = array_search($result["F"],$this->month)+1;
elseif(isset($result["M"])) $month = array_search($result["M"],$this->month3)+1;
elseif(isset($result["m"])) $month = $result["m"];
elseif(isset($result["n"])) $month = $result["n"];
if(isset($result["d"])) $day = $result["d"];
elseif(isset($result["j"])) $day = $result["j"];
if(isset($result["Y"])) $year = $result["Y"];
elseif(isset($result["o"])) $year = $result["o"];
elseif(isset($result["y"])) $year = ($result["y"]>substr(date("Y",time()),2,2))?(substr(date("Y",time()),0,2)-1).$result["y"]:substr(date("Y",time()),0,2).$result["y"];
if(isset($result["l"])) $weekday = array_search($result["l"],$this->days)+1;
elseif(isset($result["D"])) $weekday = array_search($result["D"],$this->days3)+1;
elseif(isset($result["N"])) $weekday = $result["N"];
elseif(isset($result["w"])) $weekday = $result["w"];
else $weekday = @date("w",mktime(0,0,0,$month,$day,$year));
$hour='00';
if(isset($result["H"])) $hour = $result["H"];
elseif (isset($result["G"])) $hour = $result["G"];
elseif (isset($result["h"])) $hour = ($result["A"]=="PM"|$result["a"]=="pm")?($result["h"]+12):($result["h"]);
elseif (isset($result["g"])) $hour = ($result["A"]=="PM"|$result["a"]=="pm")?($result["g"]+12):($result["g"]);
if(isset($result["O"])) $timezone = $result["O"];
elseif (isset($result["Z"])) $timezone = ($result["Z"]/3600);
else $timezone = date("O");
$minutes = isset($result["i"])?$result["i"]:'00';
$seconds = isset($result["s"])?$result["s"]:'00';
$resultvar = array(
"Year"=>$year,
"Month"=>$month,
"Day"=>$day,
"WeekDay"=>$weekday,
"Hour"=>$hour,
"Minute"=>$minutes,
"Second"=>$seconds,
"Timezone"=>$timezone);
}
return ($localize)?$this->Localize($resultvar):$resultvar;
}
/**
* Returns the difference between two days as datetime array
*
* @param string $pattern1
* @param string $date1
* @param string $pattern2
* @param string $date2
* @return array
*/
function diffDate($pattern1,$date1,$pattern2,$date2){
$pdate1 = $this->parseDate($pattern1,$date1);
$pdate2 = $this->parseDate($pattern2,$date2);
$compare = $this->Compare($pdate1,$pdate2);
if($compare==1){
$ndate = $pdate1;
$odate = $pdate2;
}elseif($compare==-1){
$ndate = $pdate2;
$odate = $pdate1;
}else{
return array("Year"=>0,"Month"=>0,"Day"=>0,"Hour"=>0,"Minute"=>0,"Second"=>0);
}
$hour = intval($ndate["Hour"])-intval($odate["Hour"]);
$minute = intval($ndate["Minute"])-intval($odate["Minute"]);
$second = intval($ndate["Second"])-intval($odate["Second"]);
$month = intval($ndate["Month"])-intval($odate["Month"]);
$day = intval($ndate["Day"])-intval($odate["Day"]);
$year = intval($ndate["Year"])-intval($odate["Year"]);
$difference = mktime($hour,$minute,$second,($month+1),($day+1),($year+1970));
$result = getdate($difference);
$resultvar = array(
"Year"=>$result["year"]-1970,
"Month"=>array_search($result["month"],$this->month),
"Day"=>$result["mday"]-1,
"Hour"=>$result["hours"],
"Minute"=>$result["minutes"],
"Second"=>$result["seconds"],
"Timezone"=>$this->timezone);
return $resultvar;
}
/**
* Reformats the given date as same as the first date() function variable.
*
* @param string $patternTo
* @param string $patternFrom
* @param string $date
* @return string
*/
function Format($patternTo,$patternFrom,$date){
$temp = $this->parseDate($patternFrom,$date);
return date($patternTo,mktime($temp["Hour"],$temp["Minute"],$temp["Second"],$temp["Month"],$temp["Day"],$temp["Year"]));
}
/**
* Not Completed localization function. Adds time to result which is defined by user in $this->timezone,
*
* @param array $date
* @return array
*/
function Localize($date){
$zonehour = $date["Hour"] + intval(substr($this->timezone,0,1).substr($this->timezone,1,2));
$zonemin = $date["Minute"] + intval(substr($this->timezone,3,2));
$newdate = mktime($zonehour,$zonemin,intval($date["Second"]),intval($date["Month"]),intval($date["Day"]),intval($date["Year"])); //Burada bir hata oldu.
$result = getdate($newdate);
$resultvar = array(
"Year"=>$result["year"],
"Month"=>array_search($result["month"],$this->month)+1,
"Day"=>$result["mday"],
"Hour"=>$result["hours"],
"Minute"=>$result["minutes"],
"Second"=>$result["seconds"],
"Timezone"=>"");
return $resultvar;
}
/**
* Compares two date, returns 1 if first is bigger, -1 if second is bigger and 0 if they are same
*
* @param array $date1
* @param array $date2
* @return int
*/
function Compare($date1,$date2){
if($date1["Year"]>$date2["Year"]) return 1;
if($date1["Year"]<$date2["Year"]) return -1;
if($date1["Month"]>$date2["Month"]) return 1;
if($date1["Month"]<$date2["Month"]) return -1;
if($date1["Day"]>$date2["Day"]) return 1;
if($date1["Day"]<$date2["Day"]) return -1;
if($date1["Hour"]>$date2["Hour"]) return 1;
if($date1["Hour"]<$date2["Hour"]) return -1;
if($date1["Minute"]>$date2["Minute"]) return 1;
if($date1["Minute"]<$date2["Minute"]) return -1;
if($date1["Second"]>$date2["Second"]) return 1;
if($date1["Second"]<$date2["Second"]) return -1;
return 0;
}
public static function getHumanReadableFormat($format) {
return strtr($format,self::$hrFormats);
}
}