Files
GestioneSpiaggia.it/library/Helpers/Action/ExtractData.php
T
2021-09-17 12:41:45 +02:00

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;
}
}
}