adjustmentForUserTimeZone()*60;
$time_arr['sec'] = $gmtdiff;
return new DateTimeUtil($time_arr,true);
}
function get_time_end( $start_time, $duration_hours,$duration_minutes)
{
if ( empty($duration_hours))
{
$duration_hours = "00";
}
if ( empty($duration_minutes))
{
$duration_minutes = "00";
}
$added_seconds = ($duration_hours * 60 * 60 + $duration_minutes * 60 ) - 1;
$time_arr = array();
$time_arr['year'] = $start_time->year;
$time_arr['month'] = $start_time->month;
$time_arr['day'] = $start_time->day;
$time_arr['hour'] = $start_time->hour;
$time_arr['min'] = $start_time->min;
$time_arr['sec'] = $added_seconds;
return new DateTimeUtil($time_arr,true);
}
function get_date_str()
{
$arr = array();
if ( isset( $this->hour))
{
array_push( $arr, "hour=".$this->hour);
}
if ( isset( $this->day))
{
array_push( $arr, "day=".$this->day);
}
if ( isset( $this->month))
{
array_push( $arr, "month=".$this->month);
}
if ( isset( $this->year))
{
array_push( $arr, "year=".$this->year);
}
return ("&".implode('&',$arr));
}
function get_tomorrow()
{
$date_arr = array('day'=>($this->day + 1),
'month'=>$this->month,
'year'=>$this->year);
return new DateTimeUtil($date_arr,true);
}
function get_yesterday()
{
$date_arr = array('day'=>($this->day - 1),
'month'=>$this->month,
'year'=>$this->year);
return new DateTimeUtil($date_arr,true);
}
function get_mysql_date()
{
return $this->year."-".$this->zmonth."-".$this->zday;
}
function get_mysql_time()
{
return $this->hour.":".$this->min;
}
function parse_utc_date_time($str)
{
preg_match('/(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})Z/',$str,$matches);
$date_arr = array(
'year'=>$matches[1],
'month'=>$matches[2],
'day'=>$matches[3],
'hour'=>$matches[4],
'min'=>$matches[5]);
$date_time = new DateTimeUtil($date_arr,true);
$date_arr = array('ts'=>$date_time->ts + $date_time->tz_offset);
return new DateTimeUtil($date_arr,true);
}
function get_utc_date_time()
{
return gmdate('Ymd\THi', $this->ts)."00Z";
}
function get_first_day_of_last_year()
{
$date_arr = array('day'=>1,
'month'=>1,
'year'=>($this->year - 1));
return new DateTimeUtil($date_arr,true);
}
function get_first_day_of_next_year()
{
$date_arr = array('day'=>1,
'month'=>1,
'year'=>($this->year + 1));
return new DateTimeUtil($date_arr,true);
}
function get_first_day_of_next_week()
{
$first_day = $this->get_day_by_index_this_week(0);
$date_arr = array('day'=>($first_day->day + 7),
'month'=>$first_day->month,
'year'=>$first_day->year);
return new DateTimeUtil($date_arr,true);
}
function get_first_day_of_last_week()
{
$first_day = $this->get_day_by_index_this_week(0);
$date_arr = array('day'=>($first_day->day - 7),
'month'=>$first_day->month,
'year'=>$first_day->year);
return new DateTimeUtil($date_arr,true);
}
function get_first_day_of_last_month()
{
if ($this->month == 1)
{
$month = 12;
$year = $this->year - 1;
}
else
{
$month = $this->month - 1;
$year = $this->year ;
}
$date_arr = array('day'=>1,
'month'=>$month,
'year'=>$year);
return new DateTimeUtil($date_arr,true);
}
function get_first_day_of_this_month()
{
$month = $this->month;
$year = $this->year ;
$date_arr = array('day'=>1,
'month'=>$month,
'year'=>$year);
return new DateTimeUtil($date_arr,true);
}
function get_first_day_of_next_month()
{
$date_arr = array('day'=>1,
'month'=>($this->month + 1),
'year'=>$this->year);
return new DateTimeUtil($date_arr,true);
}
function fill_in_details()
{
global $mod_strings, $timedate;
$hour = 0;
$min = 0;
$sec = 0;
$day = 1;
$month = 1;
$year = 1970;
if ( isset($this->sec))
{
$sec = $this->sec;
}
if ( isset($this->min))
{
$min = $this->min;
}
if ( isset($this->hour))
{
$hour = $this->hour;
}
if ( isset($this->day))
{
$day= $this->day;
}
if ( isset($this->month))
{
$month = $this->month;
}
if ( isset($this->year))
{
$year = $this->year;
}
else
{
sugar_die ("fill_in_details: year was not set");
}
$this->ts = mktime($hour,$min,$sec,$month,$day,$year)+$timedate->adjustmentForUserTimeZone()*60;
$this->load_ts($this->ts);
}
function load_ts($timestamp)
{
// global $mod_list_strings;
global $current_language;
$mod_list_strings = return_mod_list_strings_language($current_language,"Calendar");
if ( empty($timestamp))
{
$timestamp = time();
}
$this->ts = $timestamp;
global $timedate;
$tdiff = $timedate->adjustmentForUserTimeZone();
$date_str = date('i:G:H:j:d:t:w:z:L:W:n:m:Y:Z',$timestamp-$tdiff*60);
list(
$this->min,
$this->hour,
$this->zhour,
$this->day,
$this->zday,
$this->days_in_month,
$this->day_of_week,
$this->day_of_year,
$is_leap,
$this->week,
$this->month,
$this->zmonth,
$this->year,
$this->tz_offset)
= explode(':',$date_str);
$this->tz_offset = date('Z') - $tdiff * 60;
$this->day_of_week_short =$mod_list_strings['dom_cal_weekdays'][$this->day_of_week];
$this->day_of_week_long=$mod_list_strings['dom_cal_weekdays_long'][$this->day_of_week];
$this->month_short=$mod_list_strings['dom_cal_month'][$this->month];
$this->month_long=$mod_list_strings['dom_cal_month_long'][$this->month];
$this->days_in_year = 365;
if ($is_leap == 1)
{
$this->days_in_year += 1;
}
}
function DateTimeUtil($time,$fill_in_details)
{
if (! isset( $time) || count($time) == 0 )
{
$this->load_ts(null);
}
else if ( isset( $time['ts']))
{
$this->load_ts($time['ts']);
}
else if ( isset( $time['date_str']))
{
list($this->year,$this->month,$this->day)=
explode("-",$time['date_str']);
if ($fill_in_details == true)
{
$this->fill_in_details();
}
}
else
{
if ( isset($time['sec']))
{
$this->sec = $time['sec'];
}
if ( isset($time['min']))
{
$this->min = $time['min'];
}
if ( isset($time['hour']))
{
$this->hour = $time['hour'];
}
if ( isset($time['day']))
{
$this->day = $time['day'];
}
if ( isset($time['week']))
{
$this->week = $time['week'];
}
if ( isset($time['month']))
{
$this->month = $time['month'];
}
if ( isset($time['year']) && $time['year'] >= 1970)
{
$this->year = $time['year'];
}
else
{
return null;
}
if ($fill_in_details == true)
{
$this->fill_in_details();
}
}
}
function dump_date_info()
{
echo "min:".$this->min."
\n";
echo "hour:".$this->hour."
\n";
echo "day:".$this->day."
\n";
echo "month:".$this->month."
\n";
echo "year:".$this->year."
\n";
}
function get_hour()
{
$hour = $this->hour;
if ($this->hour > 12)
{
$hour -= 12;
}
else if ($this->hour == 0)
{
$hour = 12;
}
return $hour;
}
function get_24_hour()
{
return $this->hour;
}
function get_am_pm()
{
if ($this->hour >=12)
{
return "PM";
}
return "AM";
}
function get_day()
{
return $this->day;
}
function get_month()
{
return $this->month;
}
function get_day_of_week_short()
{
return $this->day_of_week_short;
}
function get_day_of_week()
{
return $this->day_of_week_long;
}
function get_month_name()
{
return $this->month_long;
}
function get_datetime_by_index_today($hour_index)
{
$arr = array();
if ( $hour_index < 0 || $hour_index > 23 )
{
sugar_die("hour is outside of range");
}
$arr['hour'] = $hour_index;
$arr['min'] = 0;
$arr['day'] = $this->day;
$arr['month'] = $this->month;
$arr['year'] = $this->year;
return new DateTimeUtil($arr,true);
}
function get_hour_end_time()
{
$arr = array();
$arr['hour'] = $this->hour;
$arr['min'] = 59;
$arr['sec'] = 59;
$arr['day'] = $this->day;
$arr['month'] = $this->month;
$arr['year'] = $this->year;
return new DateTimeUtil($arr,true);
}
function get_day_end_time()
{
$arr = array();
$arr['hour'] = 23;
$arr['min'] = 59;
$arr['sec'] = 59;
$arr['day'] = $this->day;
$arr['month'] = $this->month;
$arr['year'] = $this->year;
return new DateTimeUtil($arr,true);
}
function get_day_by_index_this_week($day_index)
{
$arr = array();
if ( $day_index < 0 || $day_index > 6 )
{
sugar_die("day is outside of week range");
}
$arr['day'] = $this->day +
($day_index - $this->day_of_week);
$arr['month'] = $this->month;
$arr['year'] = $this->year;
return new DateTimeUtil($arr,true);
}
function get_day_by_index_this_year($month_index)
{
$arr = array();
$arr['month'] = $month_index+1;
$arr['year'] = $this->year;
// wp: Find the last day of the month requested, ensure that is the ceiling of the day param
$arr['day'] = min(strftime("%d", mktime(0, 0, 0, $arr['month']+1, 0, $arr['year'])), $this->day);
return new DateTimeUtil($arr,true);
}
function get_day_by_index_this_month($day_index)
{
$arr = array();
$arr['day'] = $day_index + 1;
$arr['month'] = $this->month;
$arr['year'] = $this->year;
return new DateTimeUtil($arr,true);
}
function getHashList($view, &$start_time, &$end_time)
{
$hash_list = array();
if (version_compare(phpversion(), '5.0') < 0)
$new_time = $start_time;
else
$new_time = clone($start_time);
$arr = array();
if ( $view != 'day')
{
$end_time = $end_time->get_day_end_time();
}
if (empty($new_time->ts))
{
return;
}
if ( $new_time->ts == $end_time->ts)
{
$end_time->ts+=1;
}
while( $new_time->ts < $end_time->ts)
{
$arr['month'] = $new_time->month;
$arr['year'] = $new_time->year;
$arr['day'] = $new_time->day;
$arr['hour'] = $new_time->hour;
if ( $view == 'day')
{
$hash_list[] = $new_time->get_mysql_date().":".$new_time->hour;
$arr['hour'] += 1;
}
else
{
$hash_list[] = $new_time->get_mysql_date();
$arr['day'] += 1;
}
$new_time = new DateTimeUtil($arr,true);
}
return $hash_list;
}
}
?>