538 lines
13 KiB
PHP

<?php
/*********************************************************************************
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
*
********************************************************************************/
class vt_DateTime
{
var $second = 0;
var $minute = 0;
var $hour = 0;
var $z_hour = '00';
var $day;
var $z_day;
var $week;
var $month;
var $z_month;
var $year;
var $dayofweek;
var $dayofyear;
var $daysinmonth;
var $daysinyear;
var $dayofweek_inshort;
var $dayofweek_inlong;
var $month_inshort;
var $month_inlong;
var $ts;
var $offset;
var $format;
var $tz;
var $ts_def;
/**
* Constructor for vt_DateTime class
* @param array $timearr - collection of string
* @param string $check - check string
*/
function vt_DateTime(&$timearr,$check)
{
if (! isset( $timearr) || count($timearr) == 0 )
{
$this->setDateTime(null);
}
else if ( isset( $timearr['ts']))
{
$this->setDateTime($time['ts']);
}
else
{
if(isset($timearr['hour']) && $timearr['hour'] !== '')
{
$this->hour = $timearr['hour'];
}
if(isset($timearr['min']) && $timearr['min'] !== '')
{
$this->minute = $timearr['min'];
}
if(isset($timearr['sec']) && $timearr['sec'] !== '')
{
$this->second = $timearr['sec'];
}
if(isset($timearr['day']) && $timearr['day'] !== '')
{
$this->day = $timearr['day'];
}
if(isset($timearr['week']) && $timearr['week'] !== '')
{
$this->week = $timearr['week'];
}
if(isset($timearr['month']) && $timearr['month'] !== '')
{
$this->month = $timearr['month'];
}
if(isset($timearr['year']) && $timearr['year'] >= 1970)
{
$this->year = $timearr['year'];
}
else
{
return null;
}
}
if ($check)
{
$this->getDateTime();
}
}
/**
* function to get date and time using index
* @param integer $index - number between 0 to 23
* @param string $day - date
* @param string $month - month
* @param string $year - year
* return vt_DateTime obj $datetimevalue
*/
function getTodayDatetimebyIndex($index,$day='', $month='', $year=''){
if($day === '')
$day = $this->day;
if($month === '')
$month = $this->month;
if($year === '')
$year = $this->year;
$day_array = array();
if($index < 0 || $index > 23){
die("hour is invalid");
}
$day_array['hour'] = $index;
$day_array['min'] = 0;
$day_array['day'] = $day;
$day_array['month'] = $month;
$day_array['year'] = $year;
$datetimevalue = new vt_DateTime($day_array,true);
return $datetimevalue;
}
/**
* function to get days in week using index
* @param integer $index - number between 1 to 7
* return vt_DateTime obj $datetimevalue
*/
function getThisweekDaysbyIndex($index){
$week_array = array();
if($index < 1 || $index > 7){
die("day is invalid");
}
$week_array['day'] = $this->day + ($index - $this->dayofweek);
$week_array['month'] = $this->month;
$week_array['year'] = $this->year;
$datetimevalue = new vt_DateTime($week_array,true);
return $datetimevalue;
}
/**
* function to get days in month using index
*
* This function will be deprecated.
* The newer version is getThisMonthsDayByIndex() and should be used wherever possible
*
* @param integer $index - number between 0 to 42
* @param string $day - date
* @param string $month - month
* @param string $year - year
* return vt_DateTime obj $datetimevalue
*/
function getThismonthDaysbyIndex($index,$day='', $month='', $year='')
{
if($day == '')
$day = $index+1;
if($month == '')
$month = $this->month;
if($year == '')
$year = $this->year;
$month_array = array();
$month_array['day'] = $day;
$month_array['month'] = $month;
$month_array['year'] = $year;
$datetimevalue = new vt_DateTime($month_array,true);
return $datetimevalue;
}
/**
* function to get months in year using index
* @param integer $index - number between 0 to 11
* return vt_DateTime obj $datetimevalue
*/
function getThisyearMonthsbyIndex($index)
{
$year_array = array();
$year_array['day'] = 1;
if($index < 0 || $index > 11)
{
die("month is invalid");
}
$year_array['month'] = $index+1;
$year_array['year'] = $this->year;
$datetimevalue = new vt_DateTime($year_array,true);
return $datetimevalue;
}
/**
* function to get hour end time
* return vt_DateTime obj $datetimevalue
*/
function getHourendtime()
{
$date_array = array();
$date_array['hour'] = $this->hour;
$date_array['min'] = 59;
$date_array['day'] = $this->day;
$date_array['sec'] = 59;
$date_array['month'] = $this->month;
$date_array['year'] = $this->year;
$datetimevalue = new vt_DateTime($date_array,true);
return $datetimevalue;
}
/**
* function to get day end time
* return vt_DateTime obj $datetimevalue
*/
function getDayendtime()
{
$date_array = array();
$date_array['hour'] = 23;
$date_array['min'] = 59;
$date_array['sec'] = 59;
$date_array['day'] = $this->day;
$date_array['month'] = $this->month;
$date_array['year'] = $this->year;
$datetimevalue = new vt_DateTime($date_array,true);
return $datetimevalue;
}
/**
* function to get month end time
* return vt_DateTime obj $datetimevalue
*/
function getMonthendtime()
{
$date_array = array();
$date_array['hour'] = 23;
$date_array['min'] = 59;
$date_array['sec'] = 59;
$date_array['day'] = $this->daysinmonth;
$date_array['month'] = $this->month;
$date_array['year'] = $this->year;
$datetimevalue = new vt_DateTime($date_array,true);
return $datetimevalue;
}
/**
* function to get day of week
* return string $this->day - day (eg: Monday)
*/
function get_Date()
{
return $this->day;
}
/**
* function to get month name in short
* return string $this->month_inshort - month name (eg: Jan)
*/
function getmonthName_inshort(){
return $this->month_inshort;
}
/**
* function to get month
* return string $this->month - month name
*/
function getMonth(){
return $this->month;
}
/**
* function to get year
*/
function getYear() {
return $this->year;
}
/**
* function to get the number of days in a month
*/
function getDaysInMonth() {
return $this->daysinmonth;
}
/**
* function to get month name
* return string $this->month_inlong - month name
*/
function getmonthName(){
return $this->month_inlong;
}
/**
* function to get day of week
* return string $this->dayofweek_inlong - day of week
*/
function getdayofWeek(){
return $this->dayofweek_inlong;
}
/**
* function to get day of week in short
* return string $this->dayofweek_inshort - day of week (eg: Mon)
*/
function getdayofWeek_inshort(){
return $this->dayofweek_inshort;
}
/**
* function to set values for vt_DateTime object
* @param integer $ts - Time stamp
*/
function setDateTime($ts){
global $mod_strings;
if (empty($ts)){
$ts = time();
}
$this->ts = $ts;
$this->ts_def = $this->ts;
$date_string = date('i::G::H::j::d::t::N::z::L::W::n::m::Y::Z::T::s',$ts);
list($this->minute,$this->hour,$this->z_hour,$this->day,$this->z_day,$this->daysinmonth,$this->dayofweek,$this->dayofyear,$is_leap,$this->week,$this->month,$this->z_month,$this->year,$this->offset,$this->tz,$this->second) = explode('::',$date_string);
$this->dayofweek_inshort =$mod_strings['cal_weekdays_short'][$this->dayofweek-1];
$this->dayofweek_inlong=$mod_strings['cal_weekdays_long'][$this->dayofweek-1];
$this->month_inshort=$mod_strings['cal_month_short'][$this->month];
$this->month_inlong=$mod_strings['cal_month_long'][$this->month];
$this->daysinyear = 365;
if ($is_leap == 1){
$this->daysinyear += 1;
}
}
/**
* function to get values from vt_DateTime object
*/
function getDateTime()
{
global $mod_strings;
$hour = 0;
$minute = 0;
$second = 0;
$day = 1;
$month = 1;
$year = 1970;
if ( isset($this->second) && $this->second !== ''){
$second = $this->second;
}
if ( isset($this->minute) && $this->minute !== ''){
$minute = $this->minute;
}
if ( isset($this->hour) && $this->hour !== '')
{
$hour = $this->hour;
}
if ( isset($this->day) && $this->day !== ''){
$day= $this->day;
}
if ( isset($this->month) && $this->month !== ''){
$month = $this->month;
}
if ( isset($this->year) && $this->year !== ''){
$year = $this->year;
}else{
die("year was not set");
}
if(empty($hour) && $hour !== 0) $hour = 0;
$this->ts = mktime($hour,$minute,$second,$month,$day,$year);
$this->setDateTime($this->ts);
}
/**
* function to get mysql formatted date
* return formatted date in string format
*/
function get_formatted_date(){
$date = $this->year."-".$this->z_month."-".$this->z_day;
return DateTimeField::convertToUserFormat($date);
}
/**
*
* @return Date
*/
function get_DB_formatted_date() {
return $this->year."-".$this->z_month."-".$this->z_day;
}
/**
* function to get mysql formatted time
* return formatted time in string format
*/
function get_formatted_time(){
$hour = $this->z_hour;
$min = $this->min;
if(empty($hour)) $hour = '00';
if(empty($min)) $min = '00';
return $hour.':'.$min;
}
/**
* function to get date depends on mode value
* @param string $mode - 'increment' or 'decrement'
* return vt_DateTime obj
*/
function get_changed_day($mode){
if($mode == 'increment')
$day = $this->day + 1;
else
$day = $this->day - 1;
$date_data = array('day'=>$day,
'month'=>$this->month,
'year'=>$this->year
);
return new vt_DateTime($date_data,true);
}
/**
* function to get changed week depends on mode value
* @param string $mode - 'increment' or 'decrement'
* return vt_DateTime obj
*/
function get_first_day_of_changed_week($mode){
$first_day = $this->getThisweekDaysbyIndex(1);
if($mode == 'increment')
$day = $first_day->day + 7;
else
$day = $first_day->day - 7;
$date_data = array('day'=>$day,
'month'=>$first_day->month,
'year'=>$first_day->year
);
return new vt_DateTime($date_data,true);
}
/**
* function to get month depends on mode value
* @param string $mode - 'increment' or 'decrement'
* return vt_DateTime obj
*/
function get_first_day_of_changed_month($mode){
$tmpDate['day'] = $this->day;
$tmpDate['month'] = $this->month;
$tmpDate['year'] = $this->year;
if(is_array($arr) && !empty($arr)){
$tmpDate['year'] = $arr[0];
$tmpDate['month'] = $arr[1];
$tmpDate['day'] = $arr[2];
}
if($mode == 'increment'){
$month = $tmpDate['month'] + 1;
$year = $tmpDate['year'] ;
}else{
if($tmpDate['month'] == 1){
$month = 12;
$year = $tmpDate['year'] - 1;
}else{
$month = $tmpDate['month'] - 1;
$year = $tmpDate['year'] ;
}
}
$date_data = array(
'day'=>1,
'month'=>$month,
'year'=>$year
);
return new vt_DateTime($date_data,true);
}
/**
* function to get year depends on mode value
* @param string $mode - 'increment' or 'decrement'
* return vt_DateTime obj
*/
function get_first_day_of_changed_year($mode){
if($mode == 'increment'){
$year = $this->year + 1;
}else{
$year = $this->year - 1;
}
$date_data = array('day'=>1,
'month'=>1,
'year'=>$year
);
return new vt_DateTime($date_data,true);
}
/**
* function to get date string
* return date string
*/
function get_date_str(){
$array = Array();
if ( isset( $this->hour) && $this->hour != '')
{
array_push( $array, "hour=".$this->hour);
}
if ( isset( $this->day) && $this->day != '')
{
array_push( $array, "day=".$this->day);
}
if ( isset( $this->month) && $this->month)
{
array_push( $array, "month=".$this->month);
}
if ( isset( $this->year) && $this->year != '')
{
array_push( $array, "year=".$this->year);
}
return ("&".implode('&',$array));
}
/**
* function to get days in month using index
*
* This is the newer version of the function getThismonthDaysbyIndex().
* This should be used whereever possible
*
* @param integer $index - number between 0 to 42
* @param string $day - date
* @param string $month - month
* @param string $year - year
* return vt_DateTime obj $datetimevalue
*/
function getThisMonthsDayByIndex($index){
$day = $index;
$month = $this->month;
$year = $this->year;
$month_array = array();
$month_array['day'] = $day;
$month_array['month'] = $month;
$month_array['year'] = $year;
$datetimevalue = new vt_DateTime($month_array,true);
return $datetimevalue;
}
}
?>