254 lines
7.5 KiB
PHP
254 lines
7.5 KiB
PHP
<?php
|
|
|
|
class Zend_Controller_Action_Helper_ExtractData extends Zend_Controller_Action_Helper_Abstract {
|
|
|
|
protected $_dateValidatorSlash;
|
|
protected $_dateValidatorTrattino;
|
|
|
|
/**
|
|
* Funzione che di default passata una data nel formato aaaa-mm-dd la converte nel formato dd/mm/aaaa
|
|
* OPZIONI PARAMETRO return:
|
|
*
|
|
* -'d'|'day': restituisce il giorno numerico della data.
|
|
*
|
|
* -'m'|'month': restituisce il mese numerico della data.
|
|
*
|
|
* -'M': restituisce il nome del mese in stringa
|
|
*
|
|
* -'y'|'Y': restituisce l'anno numerico della data.
|
|
*
|
|
* @param string $data|string $return
|
|
* @return string $data
|
|
*/
|
|
public function direct($data=NULL,$return=NULL,$withtime = false) {
|
|
if($data==null) return null;
|
|
if(!$withtime){
|
|
$val=explode('-',$data);
|
|
}
|
|
else{
|
|
$datetime = explode(' ',$data);
|
|
$val = explode('-',$datetime[0]);
|
|
$time = $datetime[1];
|
|
}
|
|
switch($return){
|
|
case'0':
|
|
case'day':
|
|
return $val['2'];
|
|
break;
|
|
case'1':
|
|
case'month':
|
|
return $val['1'];
|
|
break;
|
|
case'mese':
|
|
return ucfirst(strftime('%B',mktime(0,0,0,$val['1'],1,2013)));
|
|
break;
|
|
case'monthname':
|
|
return ucfirst(strftime('%B',mktime(0,0,0,$data,1,2013)));
|
|
break;
|
|
case'3':
|
|
case'year':
|
|
case 'y':
|
|
return $val['0'];
|
|
break;
|
|
case'yy':
|
|
return substr($val['0'],2,3);
|
|
break;
|
|
case 'withtime':
|
|
if ($val[2] == '00' && $val[1] == '00' && $val[0] == '0000') {
|
|
return null;
|
|
} else {
|
|
if($withtime)
|
|
return implode('/',array_reverse($val)) . " ".substr($time,0,5);
|
|
else
|
|
return implode('/',array_reverse($val));
|
|
}
|
|
break;
|
|
default:
|
|
if($val[2]=='00'&&$val[1]=='00'&&$val[0]=='0000'){
|
|
return null;
|
|
}else{
|
|
$data= $val[2] . '/'.$val[1] . '/'.$val[0];
|
|
return $data;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Funzione che passata una data nel formato dd/mm/aaaa la converte nel formato aaaa-mm-dd
|
|
*
|
|
* @param string $data|date $data
|
|
* @return string $data
|
|
*/
|
|
public function unslashData($data) {
|
|
$data = explode("/", $data);
|
|
$data = array_reverse($data);
|
|
return implode('-', $data);
|
|
}
|
|
|
|
public function unslashDataWithTime($data) {
|
|
$data = explode(" ", $data);
|
|
$time = $data[1];
|
|
$data = explode("/", $data[0]);
|
|
$data = array_reverse($data);
|
|
return implode('-', $data) ." ". $time;
|
|
}
|
|
|
|
/**
|
|
* Funzione che passata una data nel formato aaaa-mm-dd la converte nel formato dd/mm/aaaa
|
|
*
|
|
* @param string $data|date $data
|
|
* @return string $data
|
|
*/
|
|
public function slashData($data) {
|
|
$data = explode("-", $data);
|
|
$data = array_reverse($data);
|
|
return implode('/', $data);
|
|
}
|
|
|
|
/**
|
|
* Funzione che passate due date nel formato aaaa-mm-dd ne calcola i giorni di differenza
|
|
*
|
|
* @param string $data1|string $data2
|
|
* @return string $days
|
|
*/
|
|
public function diff_date($data1, $data2) {
|
|
|
|
if(is_string($data1))
|
|
$datetime1 = new DateTime($data1);
|
|
else
|
|
$datetime1 = $data1;
|
|
|
|
if(is_string($data2))
|
|
$datetime2 = new DateTime($data2);
|
|
else
|
|
$datetime2 = $data2;
|
|
|
|
$interval = $datetime1 -> diff($datetime2);
|
|
return $interval -> days;
|
|
}
|
|
|
|
/**
|
|
* Funzione che passate due date nel formato aaaa-mm-dd ne calcola i giorni di differenza formatti col segno
|
|
*
|
|
* @param string $data1|string $data2
|
|
* @return string $days
|
|
*/
|
|
public function diff_date_segno($data1, $data2) {
|
|
if(is_string($data1))
|
|
$datetime1 = new DateTime($data1);
|
|
else
|
|
$datetime1 = $data1;
|
|
|
|
if(is_string($data2))
|
|
$datetime2 = new DateTime($data2);
|
|
else
|
|
$datetime2 = $data2;
|
|
|
|
$interval = $datetime1 -> diff($datetime2);
|
|
return $interval -> format('%R%a');
|
|
}
|
|
|
|
/**
|
|
* Funzione che passata una data e i giorni da sommare restituisce la data somma
|
|
*
|
|
* @param string $data
|
|
* @return string $days
|
|
*/
|
|
public function add_days_date($data,$days){
|
|
$data = explode('/',$data);
|
|
array_reverse($data);
|
|
$data = implode('-', $data);
|
|
$date = new DateTime($data);
|
|
$date->add(new DateInterval('P'.$days.'D'));
|
|
return $date->format('d/m/Y');
|
|
}
|
|
|
|
/**
|
|
* Funzione che passata una data e i giorni da sottrarre e restituisce la data calcolata
|
|
*
|
|
* @param $data
|
|
* @param $days
|
|
* @param bool|false $slashed
|
|
*
|
|
* @return string
|
|
*/
|
|
public function sub_days_date($data,$days,$slashed = false){
|
|
$data = $this->getDataForDb($data);
|
|
$date = new DateTime($data);
|
|
$date->sub(new DateInterval('P'.$days.'D'));
|
|
if($slashed)
|
|
return $date->format('d/m/Y');
|
|
else
|
|
return $date->format('Y-m-d');
|
|
}
|
|
|
|
/**
|
|
* Funzione che passata una data e gli anni da sottrarre restituisce la data sottratta
|
|
*
|
|
* @param string $data
|
|
* @return string $days
|
|
*/
|
|
public function diff_days_year($data,$years){
|
|
$data = explode('/',$data);
|
|
array_reverse($data);
|
|
$data = implode('-', $data);
|
|
$date = new DateTime($data);
|
|
$date->sub(new DateInterval('P'.$years.'Y'));
|
|
return $date->format('d/m/Y');
|
|
}
|
|
|
|
/**
|
|
* Funzione che passata una data e i giorni da sottrarre restituisce la data sottratta
|
|
*
|
|
* @param string $data
|
|
* @return string $days
|
|
*/
|
|
public function diff_days($data,$days){
|
|
|
|
$this->_dateValidatorSlash = new Zend_Validate_Date(array('format' => 'dd/mm/yyyy'));
|
|
$this->_dateValidatorTrattino = new Zend_Validate_Date(array('format' => 'yyyy-mm-dd'));
|
|
|
|
if ($this->_dateValidatorSlash->isValid($data)) {
|
|
$data = implode('-',array_reverse(explode('/',$data)));
|
|
}
|
|
|
|
if(!$this->_dateValidatorTrattino->isValid($data)){
|
|
return null;
|
|
}
|
|
|
|
$date = new DateTime($data);
|
|
$date->sub(new DateInterval('P'.$days.'D'));
|
|
return $date->format('d/m/Y');
|
|
}
|
|
|
|
/**
|
|
* Funzione che passata una data la ritorna pronta per l'inserimento sul db false se non � una data valida
|
|
*
|
|
* @param $data
|
|
*
|
|
* @return bool|string
|
|
*/
|
|
public function getDataForDb($data){
|
|
|
|
if(is_array($data)){
|
|
$data = new DateTime(substr($data['date'],0,10));
|
|
return $data -> format('Y-d-m');
|
|
}elseif(is_string($data)){
|
|
$this->_dateValidatorSlash = new Zend_Validate_Date(array('format' => 'dd/mm/yyyy'));
|
|
$this->_dateValidatorTrattino = new Zend_Validate_Date(array('format' => 'yyyy-mm-dd'));
|
|
if ($this->_dateValidatorSlash->isValid($data)) {
|
|
return $this->unslashData($data);
|
|
}else if($this->_dateValidatorTrattino->isValid($data)){
|
|
return $data;
|
|
}else{
|
|
return null;
|
|
}
|
|
}else{
|
|
return $data;
|
|
}
|
|
|
|
}
|
|
|
|
}
|