[Back] <?php
class OsWpDateTime extends DateTime {
function __construct(?string $time = 'now', ?DateTimeZone $timezone = null){
$timezone = ($timezone instanceof DateTimeZone) ? $timezone : OsTimeHelper::get_wp_timezone();
try{
if(empty($time)) $time = 'now';
parent::__construct($time, $timezone);
}catch(Exception $e){
OsDebugHelper::log('Error parsing date: '.$e->getMessage() , 'date_parsing' );
return parent::__construct('now', $timezone);
}
}
public static function datetime_in_utc(DateTime $datetime, $format = false){
$utc_datetime = clone $datetime;
$utc_datetime->setTimezone(new DateTimeZone("UTC"));
return $format ? $utc_datetime->format($format) : $utc_datetime;
}
public static function date_to_db_format($date_string, $default = ''){
if(empty($date_string)) return $default;
try{
$date = self::os_createFromFormat(OsSettingsHelper::get_date_format(), $date_string);
return $date->format('Y-m-d');
}catch(Exception $e){
return $default;
}
}
public static function date_from_db_format($date_string, $default = ''){
if(empty($date_string)) return $default;
try{
$timezone = new DateTimeZone('UTC');
$date = self::os_createFromFormat('Y-m-d', $date_string, $timezone);
return $date->format(OsSettingsHelper::get_date_format());
}catch(Exception $e){
return $default;
}
}
public static function os_createFromFormat($format, $datetime_string, $timezone = false){
$timezone = ($timezone) ? $timezone : OsTimeHelper::get_wp_timezone();
return self::createFromFormat($format, $datetime_string, $timezone);
}
// TODO will be deprecated, moved to GCal addon
public static function os_get_start_of_google_event($google_event){
if(!empty($google_event->start->dateTime)){
$date_string = $google_event->start->dateTime;
$date_format = \DateTime::RFC3339;
$timezone = new DateTimeZone($google_event->start->timeZone);
}else{
// Full day event
$date_string = $google_event->start->date.' 00:00:00';
$date_format = LATEPOINT_DATETIME_DB_FORMAT;
$timezone = false;
}
return self::os_createFromFormat($date_format, $date_string, $timezone);
}
// TODO will be deprecated, moved to GCal addon
public static function os_get_end_of_google_event($google_event){
if(!empty($google_event->end->dateTime)){
$date_string = $google_event->end->dateTime;
$date_format = \DateTime::RFC3339;
return self::os_createFromFormat($date_format, $date_string);
}else{
// Full day event
// !important, in full day events of Google Calendar - start day is inclusive and the end day is exclusive https://stackoverflow.com/questions/34992747/google-calendar-json-api-full-day-events-always-one-day-longer
$date_string = $google_event->end->date.' 23:59:59';
$date_format = LATEPOINT_DATETIME_DB_FORMAT;
$temp_date = self::os_createFromFormat($date_format, $date_string);
// move back 1 day to accomodate Google rule that end date is 1 day ahead of actual end date of a full day event
$temp_date->modify('-1 day');
return $temp_date;
}
}
}