24include_once 
'./Services/Calendar/classes/class.ilCalendarSettings.php';
 
   49        if ($date instanceof \
ilDate) {
 
   68        if (!is_object(self::$today)) {
 
   89        $month = $a_month < 10 ? 
'0' . $a_month : $a_month;
 
   91        return  $a_long ? 
$lng->txt(
'month_' . $month . 
'_long') : 
$lng->txt(
'month_' . $month . 
'_short');
 
  109        $lng->loadLanguageModule(
'dateplaner');
 
  110        static $days = array(
'Su',
'Mo',
'Tu',
'We',
'Th',
'Fr',
'Sa',
'Su');
 
  112        return  $a_long ? 
$lng->txt($days[$a_day] . 
'_long') : 
$lng->txt($days[$a_day] . 
'_short');
 
  126        include_once(
'Services/Calendar/classes/class.ilDateList.php');
 
  129        $start = clone $a_day;
 
  131        $day_diff = $a_weekstart - $start_info[
'isoday'];
 
  132        if ($day_diff == 7) {
 
  136        $day_list->add($start);
 
  137        for (
$i = 1; 
$i < 7;
$i++) {
 
  139            $day_list->add($start);
 
  156        include_once(
'Services/Calendar/classes/class.ilDateList.php');
 
  159        $prev_month = ($a_month == 1) ? 12 : $a_month - 1;
 
  160        $prev_year = ($prev_month == 12) ? $a_year - 1 : $a_year;
 
  161        $next_month = $a_month == 12 ? 1 : $a_month + 1;
 
  162        $next_year = $a_month == 12 ? $a_year + 1 : $a_year;
 
  167        $week_day[
'year'] = $a_year;
 
  168        $week_day[
'mon'] = $a_month;
 
  169        $week_day[
'mday'] = 1;
 
  170        $week_day[
'hours'] = 0;
 
  171        $week_day[
'minutes'] = 0;
 
  175        $first_day_offset = (($weekday - $weekstart) < 0) ? 6 : $weekday - $weekstart;
 
  178        for (
$i = 0;
$i < 42;
$i++) {
 
  179            if (
$i < $first_day_offset) {
 
  180                $day = $days_in_prev_month - $first_day_offset + 
$i + 1;
 
  182                $day_list->add(
new ilDate(
 
  188                        $days_in_prev_month - $first_day_offset + 
$i + 1,
 
  193            } elseif (
$i < $days_in_month + $first_day_offset) {
 
  194                $day = 
$i - $first_day_offset + 1;
 
  197                $day_list->add(
new ilDate(
 
  203                        $i - $first_day_offset + 1,
 
  209                $day = 
$i - $days_in_month - $first_day_offset + 1;
 
  210                $day_list->add(
new ilDate(
 
  216                        $i - $days_in_month - $first_day_offset + 1,
 
  222            if (
$i == 34 and ($day < 15 or $day == $days_in_month)) {
 
  239        if (self::$init_done == 
"done") {
 
  243        $lng->loadLanguageModule(
"jscalendar");
 
  245            "CALENDAR_LANG_JAVASCRIPT",
 
  246            "calendar_javascript",
 
  250        $tpl->setCurrentBlock(
"calendar_javascript");
 
  251        $tpl->setVariable(
"FULL_SUNDAY", 
$lng->txt(
"l_su"));
 
  252        $tpl->setVariable(
"FULL_MONDAY", 
$lng->txt(
"l_mo"));
 
  253        $tpl->setVariable(
"FULL_TUESDAY", 
$lng->txt(
"l_tu"));
 
  254        $tpl->setVariable(
"FULL_WEDNESDAY", 
$lng->txt(
"l_we"));
 
  255        $tpl->setVariable(
"FULL_THURSDAY", 
$lng->txt(
"l_th"));
 
  256        $tpl->setVariable(
"FULL_FRIDAY", 
$lng->txt(
"l_fr"));
 
  257        $tpl->setVariable(
"FULL_SATURDAY", 
$lng->txt(
"l_sa"));
 
  258        $tpl->setVariable(
"SHORT_SUNDAY", 
$lng->txt(
"s_su"));
 
  259        $tpl->setVariable(
"SHORT_MONDAY", 
$lng->txt(
"s_mo"));
 
  260        $tpl->setVariable(
"SHORT_TUESDAY", 
$lng->txt(
"s_tu"));
 
  261        $tpl->setVariable(
"SHORT_WEDNESDAY", 
$lng->txt(
"s_we"));
 
  262        $tpl->setVariable(
"SHORT_THURSDAY", 
$lng->txt(
"s_th"));
 
  263        $tpl->setVariable(
"SHORT_FRIDAY", 
$lng->txt(
"s_fr"));
 
  264        $tpl->setVariable(
"SHORT_SATURDAY", 
$lng->txt(
"s_sa"));
 
  265        $tpl->setVariable(
"FULL_JANUARY", 
$lng->txt(
"l_01"));
 
  266        $tpl->setVariable(
"FULL_FEBRUARY", 
$lng->txt(
"l_02"));
 
  267        $tpl->setVariable(
"FULL_MARCH", 
$lng->txt(
"l_03"));
 
  268        $tpl->setVariable(
"FULL_APRIL", 
$lng->txt(
"l_04"));
 
  269        $tpl->setVariable(
"FULL_MAY", 
$lng->txt(
"l_05"));
 
  270        $tpl->setVariable(
"FULL_JUNE", 
$lng->txt(
"l_06"));
 
  271        $tpl->setVariable(
"FULL_JULY", 
$lng->txt(
"l_07"));
 
  272        $tpl->setVariable(
"FULL_AUGUST", 
$lng->txt(
"l_08"));
 
  273        $tpl->setVariable(
"FULL_SEPTEMBER", 
$lng->txt(
"l_09"));
 
  274        $tpl->setVariable(
"FULL_OCTOBER", 
$lng->txt(
"l_10"));
 
  275        $tpl->setVariable(
"FULL_NOVEMBER", 
$lng->txt(
"l_11"));
 
  276        $tpl->setVariable(
"FULL_DECEMBER", 
$lng->txt(
"l_12"));
 
  277        $tpl->setVariable(
"SHORT_JANUARY", 
$lng->txt(
"s_01"));
 
  278        $tpl->setVariable(
"SHORT_FEBRUARY", 
$lng->txt(
"s_02"));
 
  279        $tpl->setVariable(
"SHORT_MARCH", 
$lng->txt(
"s_03"));
 
  280        $tpl->setVariable(
"SHORT_APRIL", 
$lng->txt(
"s_04"));
 
  281        $tpl->setVariable(
"SHORT_MAY", 
$lng->txt(
"s_05"));
 
  282        $tpl->setVariable(
"SHORT_JUNE", 
$lng->txt(
"s_06"));
 
  283        $tpl->setVariable(
"SHORT_JULY", 
$lng->txt(
"s_07"));
 
  284        $tpl->setVariable(
"SHORT_AUGUST", 
$lng->txt(
"s_08"));
 
  285        $tpl->setVariable(
"SHORT_SEPTEMBER", 
$lng->txt(
"s_09"));
 
  286        $tpl->setVariable(
"SHORT_OCTOBER", 
$lng->txt(
"s_10"));
 
  287        $tpl->setVariable(
"SHORT_NOVEMBER", 
$lng->txt(
"s_11"));
 
  288        $tpl->setVariable(
"SHORT_DECEMBER", 
$lng->txt(
"s_12"));
 
  289        $tpl->setVariable(
"ABOUT_CALENDAR", 
$lng->txt(
"about_calendar"));
 
  290        $tpl->setVariable(
"ABOUT_CALENDAR_LONG", 
$lng->txt(
"about_calendar_long"));
 
  291        $tpl->setVariable(
"ABOUT_TIME_LONG", 
$lng->txt(
"about_time"));
 
  292        $tpl->setVariable(
"PREV_YEAR", 
$lng->txt(
"prev_year"));
 
  293        $tpl->setVariable(
"PREV_MONTH", 
$lng->txt(
"prev_month"));
 
  294        $tpl->setVariable(
"GO_TODAY", 
$lng->txt(
"go_today"));
 
  295        $tpl->setVariable(
"NEXT_MONTH", 
$lng->txt(
"next_month"));
 
  296        $tpl->setVariable(
"NEXT_YEAR", 
$lng->txt(
"next_year"));
 
  297        $tpl->setVariable(
"SEL_DATE", 
$lng->txt(
"select_date"));
 
  298        $tpl->setVariable(
"DRAG_TO_MOVE", 
$lng->txt(
"drag_to_move"));
 
  299        $tpl->setVariable(
"PART_TODAY", 
$lng->txt(
"part_today"));
 
  300        $tpl->setVariable(
"DAY_FIRST", 
$lng->txt(
"day_first"));
 
  301        $tpl->setVariable(
"CLOSE", 
$lng->txt(
"close"));
 
  302        $tpl->setVariable(
"TODAY", 
$lng->txt(
"today"));
 
  303        $tpl->setVariable(
"TIME_PART", 
$lng->txt(
"time_part"));
 
  304        $tpl->setVariable(
"DEF_DATE_FORMAT", 
$lng->txt(
"def_date_format"));
 
  305        $tpl->setVariable(
"TT_DATE_FORMAT", 
$lng->txt(
"tt_date_format"));
 
  306        $tpl->setVariable(
"WK", 
$lng->txt(
"wk"));
 
  307        $tpl->setVariable(
"TIME", 
$lng->txt(
"time"));
 
  308        $tpl->parseCurrentBlock();
 
  309        $tpl->setCurrentBlock(
"CalendarJS");
 
  310        $tpl->setVariable(
"LOCATION_JAVASCRIPT_CALENDAR", 
"./Services/Calendar/js/calendar.js");
 
  311        $tpl->setVariable(
"LOCATION_JAVASCRIPT_CALENDAR_SETUP", 
"./Services/Calendar/js/calendar-setup.js");
 
  312        $tpl->parseCurrentBlock();
 
  314        self::$init_done = 
"done";
 
  319        if (!array_key_exists($a_tz, self::_getShortTimeZoneList())) {
 
  322        $timezone_filename = str_replace(
'/', 
'_', $a_tz);
 
  323        $timezone_filename .= 
'.ics';
 
  324        return './Services/Calendar/zoneinfo/' . $timezone_filename;
 
  339                'Pacific/Samoa' => 
'GMT-11: Midway Islands, Samoa',
 
  340                'US/Hawaii' => 
'GMT-10:00: Hawaii, Polynesia',
 
  341                'US/Alaska' => 
'GMT-9:00: Alaska',
 
  342                'America/Los_Angeles' => 
'GMT-8:00: Tijuana, Los Angeles, Seattle, Vancouver',
 
  343                'US/Arizona' => 
'GMT-7:00: Arizona',
 
  344                'America/Chihuahua' => 
'GMT-7:00: Chihuahua, La Paz, Mazatlan',
 
  345                'America/Denver' => 
'GMT-7:00: Arizona, Denver, Salt Lake City, Calgary',
 
  346                'America/Chicago' => 
'GMT-6:00: Chicago, Dallas, Kansas City, Winnipeg',
 
  347                'America/Monterrey' => 
'GMT-6:00: Guadalajara, Mexico City, Monterrey',
 
  348                'Canada/Saskatchewan' => 
'GMT-6:00: Saskatchewan',
 
  349                'US/Central' => 
'GMT-6:00: Central America',
 
  350                'America/Bogota' => 
'GMT-5:00: Bogota, Lima, Quito',
 
  351                'US/East-Indiana' => 
'GMT-5:00: East-Indiana',
 
  352                'America/New_York' => 
'GMT-5:00: New York, Miami, Atlanta, Detroit, Toronto',
 
  353                'Canada/Atlantic' => 
'GMT-4:00: Atlantic (Canada)',
 
  354                'America/La_Paz' => 
'GMT-4:00: Carcas, La Paz',
 
  355                'America/Santiago' => 
'GMT-4:00: Santiago',
 
  356                'Canada/Newfoundland' => 
'GMT-3:00: Newfoundland',
 
  357                'Brazil/East' => 
'GMT-3:00: Sao Paulo',
 
  358                'America/Argentina/Buenos_Aires' => 
'GMT-3:00: Buenes Aires, Georgtown',
 
  359                'Etc/GMT+3' => 
'GMT-3:00: Greenland, Uruguay, Surinam',
 
  360                'Atlantic/Cape_Verde' => 
'GMT-2:00: Cape Verde, Greenland, South Georgia',
 
  361                'Atlantic/Azores' => 
'GMT-1:00: Azores',
 
  362                'Africa/Casablanca' => 
'GMT+0:00: Casablanca, Monrovia',
 
  363                'Europe/London' => 
'GMT+0:00: Dublin, Edinburgh, Lisbon, London',
 
  364                'Europe/Berlin' => 
'GMT+1:00: Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna',
 
  365                'Europe/Belgrade' => 
'GMT+1:00: Belgrade, Bratislava, Budapest, Ljubljana, Prague',
 
  366                'Europe/Paris' => 
'GMT+1:00: Brussels, Copenhagen, Paris, Madrid',
 
  367                'Europe/Sarajevo' => 
'GMT+1:00: Sarajevo, Skopje, Warsaw, Zagreb',
 
  368                'Africa/Lagos' => 
'GMT+1:00: West-Central Africa',
 
  369                'Europe/Athens' => 
'GMT+2:00: Athens, Beirut, Istanbul, Minsk',
 
  370                'Europe/Bucharest' => 
'GMT+2:00: Bucharest',
 
  371                'Africa/Harare' => 
'GMT+2:00: Harare, Pratoria',
 
  372                'Europe/Helsinki' => 
'GMT+2:00: Helsinki, Kiev, Riga, Sofia, Tallinn, Vilnius',
 
  373                'Asia/Jerusalem' => 
'GMT+2:00: Jerusalem',
 
  374                'Africa/Cairo' => 
'GMT+2:00: Cairo',
 
  375                'Asia/Baghdad' => 
'GMT+3:00: Baghdad',
 
  376                'Asia/Kuwait' => 
'GMT+3:00: Kuwait, Riyadh',
 
  377                'Europe/Moscow' => 
'GMT+3:00: Moscow, Saint Petersburg',
 
  378                'Africa/Nairobi' => 
'GMT+3:00: Nairobi',
 
  379                'Asia/Tehran' => 
'GMT+3:30: Tehran',
 
  380                'Asia/Muscat' => 
'GMT+4:00: Abu Dhabi, Muscat',
 
  381                'Asia/Baku' => 
'GMT+4:00: Baku, Tbilisi, Erivan',
 
  382                'Asia/Kabul' => 
'GMT+4:00: Kabul',
 
  383                'Asia/Karachi' => 
'GMT+5:00: Islamabad, Karachi, Taschkent',
 
  384                'Asia/Yekaterinburg' => 
'GMT+5:00: Yekaterinburg',
 
  385                'Asia/Calcutta' => 
'GMT+5:30: New Dehli',
 
  386                'Asia/Katmandu' => 
'GMT+5:45: Katmandu',
 
  387                'Asia/Novosibirsk' => 
'GMT+6:00: Almaty, Novosibirsk',
 
  388                'Asia/Dhaka' => 
'GMT+6:00: Astana, Dhaka',
 
  389                'Asia/Rangoon' => 
'GMT+6:00: Sri Jayawardenepura, Rangoon',
 
  390                'Asia/Jakarta' => 
'GMT+7:00: Bangkok, Hanoi, Jakarta',
 
  391                'Asia/Krasnoyarsk' => 
'GMT+7:00: Krasnoyarsk',
 
  392                'Asia/Irkutsk' => 
'GMT+8:00: Irkutsk, Ulan Bator',
 
  393                'Asia/Singapore' => 
'GMT+8:00: Kuala Lumpour, Singapore',
 
  394                'Asia/Hong_Kong' => 
'GMT+8:00: Beijing, Chongqing, Hong kong, Urumchi',
 
  395                'Australia/Perth' => 
'GMT+8:00: Perth',
 
  396                'Asia/Taipei' => 
'GMT+8:00: Taipei',
 
  397                'Asia/Yakutsk' => 
'GMT+9:00: Yakutsk',
 
  398                'Asia/Tokyo' => 
'GMT+9:00: Osaka, Sapporo, Tokyo',
 
  399                'Asia/Seoul' => 
'GMT+9:00: Seoul, Darwin, Adelaide',
 
  400                'Australia/Brisbane' => 
'GMT+10:00: Brisbane',
 
  401                'Australia/Sydney' => 
'GMT+10:00: Canberra, Melbourne, Sydney',
 
  402                'Pacific/Guam' => 
'GMT+10:00: Guam, Port Moresby',
 
  403                'Australia/Hobart' => 
'GMT+10:00: Hobart',
 
  404                'Asia/Vladivostok' => 
'GMT+10:00: Vladivostok',
 
  405                'Asia/Magadan' => 
'GMT+11:00: Salomon Islands, New Caledonia, Magadan',
 
  406                'Pacific/Auckland' => 
'GMT+12:00: Auckland, Wellington',
 
  407                'Pacific/Fiji' => 
'GMT+12:00: Fiji, Kamchatka, Marshall-Islands');
 
  422        if ($a_year % 4 == 0) {
 
  424            if ($a_year % 100 == 0) {
 
  445        if (@function_exists(
'cal_days_in_month')) {
 
  446            return cal_days_in_month(CAL_GREGORIAN, $a_month, $a_year);
 
  448        $months = array(0,31,
 
  449                self::_isLeapYear($a_year) ? 29 : 28,
 
  450                31,30,31,30,31,31,30,31,30,31);
 
  451        return $months[(int) $a_month];
 
  464        if (strpos($a_html_color_code, 
'#') !== 0 or strlen($a_html_color_code) != 7) {
 
  469        $lum = round(hexdec(substr($a_html_color_code, 1, 2)) * 0.2126 +
 
  470            hexdec(substr($a_html_color_code, 3, 2)) * 0.7152 +
 
  471            hexdec(substr($a_html_color_code, 5, 2)) * 0.0722);
 
  473        return ($lum <= 128) ? 
"#FFFFFF" : 
"#000000";
 
  490                for (
$i = 0; 
$i < 24; 
$i++) {
 
  491                    $options[
$i] = sprintf(
'%02d:00', 
$i);
 
  496                for (
$i = 0; 
$i < 24; 
$i++) {
 
  497                    $options[
$i] = date(
'h a', mktime(
$i, 0, 0, 1, 1, 2000));
 
  501        return $options ? $options : array();
 
  518        if (isset(self::$default_calendar[$a_usr_id]) and isset(self::$default_calendar[$a_usr_id][$a_type_id])) {
 
  519            return self::$default_calendar[$a_usr_id][$a_type_id];
 
  522        include_once 
'./Services/Calendar/classes/class.ilCalendarCategory.php';
 
  524        $query = 
"SELECT cat_id FROM cal_categories " .
 
  525            "WHERE obj_id = " . 
$ilDB->quote($a_usr_id, 
'integer') . 
" " .
 
  526            "AND type = " . 
$ilDB->quote($a_type_id, 
'integer');
 
  529            return self::$default_calendar[$a_usr_id][$a_type_id] = 
new ilCalendarCategory($row->cat_id);
 
  538        self::$default_calendar[$a_usr_id][$a_type_id]->setType($a_type_id);
 
  540        self::$default_calendar[$a_usr_id][$a_type_id]->setTitle($a_title);
 
  541        self::$default_calendar[$a_usr_id][$a_type_id]->setObjId($a_usr_id);
 
  542        self::$default_calendar[$a_usr_id][$a_type_id]->add();
 
  544        return self::$default_calendar[$a_usr_id][$a_type_id];
 
  566        switch (
$ilUser->getDateFormat()) {
 
  583            if ($a_add_time == 2) {
 
  589        if ((
bool) $a_for_parsing) {
 
  607        if (!self::$init_datetimepicker) {
 
  608            $tpl->addJavaScript(
"./libs/bower/bower_components/moment/min/moment-with-locales.min.js");
 
  612            $tpl->addJavaScript(
"./libs/bower/bower_components/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js");
 
  614            $tpl->addJavaScript(
"Services/Form/js/Form.js"); 
 
  616            self::$init_datetimepicker = 
true;
 
  632    public static function addDateTimePicker($a_id, $a_add_time = 
null, array $a_custom_config = 
null, $a_id2 = 
null, $a_custom_config2 = 
null, $a_toggle_id = 
null, $a_subform_id = 
null)
 
  645        if (
$ilUser->getLanguage() != 
'ar') {
 
  646            $language = 
$ilUser->getLanguage();
 
  649            'locale' => $language
 
  651            ,
'useCurrent' => 
false 
  652            ,
'calendarWeeks' => 
true 
  653            ,
'toolbarPlacement' => 
'top' 
  657            ,
'keepInvalid' => 
true 
  658            ,
'sideBySide' => 
true 
  660            ,
'format' => self::getUserDateFormat($a_add_time)
 
  665            : array_merge($default, $a_custom_config);
 
  667        $tpl->addOnLoadCode(
'$("#' . $a_id . 
'").datetimepicker(' . json_encode(
$config) . 
')');
 
  672            $config2 = (!$a_custom_config2)
 
  674                : array_merge($default, $a_custom_config2);
 
  676            $config2[
"useCurrent"] = 
false; 
 
  678            $tpl->addOnLoadCode(
'$("#' . $a_id2 . 
'").datetimepicker(' . json_encode($config2) . 
')');
 
  681            $tpl->addOnLoadCode(
'il.Form.initDateDurationPicker("' . $a_id . 
'","' . $a_id2 . 
'","' . $a_toggle_id . 
'","' . $a_subform_id . 
'");');
 
  682        } elseif ($a_subform_id) {
 
  684            $tpl->addOnLoadCode(
'il.Form.initDatePicker("' . $a_id . 
'","' . $a_subform_id . 
'");');
 
  694    public static function parseDateString($a_date, $a_add_time = 
null, $a_use_generic_format = 
false)
 
  700        if (!$a_use_generic_format) {
 
  703            $out_format = $a_add_time
 
  707        $tmp = date_parse_from_format($out_format, $a_date);
 
  710        if (!$tmp[
"error_count"] &&
 
  711            !$tmp[
"warning_count"]) {
 
  713                str_pad($tmp[
"month"], 2, 
"0", STR_PAD_LEFT) . 
"-" .
 
  714                str_pad($tmp[
"day"], 2, 
"0", STR_PAD_LEFT);
 
  718                    str_pad($tmp[
"hour"], 2, 
"0", STR_PAD_LEFT) . 
":" .
 
  719                    str_pad($tmp[
"minute"], 2, 
"0", STR_PAD_LEFT) . 
":" .
 
  720                    str_pad($tmp[
"second"], 2, 
"0", STR_PAD_LEFT);
 
  730            , 
"warnings" => 
sizeof($tmp[
"warnings"])
 
  733            , 
"errors" => 
sizeof($tmp[
"errors"])
 
  749        if (is_object($a_value) &&
 
  752        } elseif (trim($a_value)) {
 
  755            if (is_object($parsed[
"date"])) {
 
  756                return $parsed[
"date"];
 
  760                if (is_object($parsed[
"date"])) {
 
  761                    return $parsed[
"date"];
 
An exception for terminatinating execution or to throw for unit testing.
Stores calendar categories.
static _getShortTimeZoneList()
get short timezone list
static parseIncomingDate($a_value, $a_add_time=null)
Try to parse incoming value to date object.
static _isToday($date)
check if a date is today
static initDateTimePicker()
static initJSCalendar()
Init Javascript Calendar.
static _getMaxDayOfMonth($a_year, $a_month)
get max day of month 2008,2 => 29
static getHourSelection($a_format)
Get hour selectio depending on user specific hour format.
static parseDateString($a_date, $a_add_time=null, $a_use_generic_format=false)
Parse (incoming) string to date/time object.
static _numericDayToString($a_day, $a_long=true)
get
static convertDateToUtcDBTimestamp(\ilDateTime $date=null)
static _buildWeekDayList($a_day, $a_weekstart)
build week day list
static _buildMonthDayList($a_month, $a_year, $weekstart)
Build a month day list.
static calculateFontColor($a_html_color_code)
Calculate best font color from html hex color code.
static addDateTimePicker($a_id, $a_add_time=null, array $a_custom_config=null, $a_id2=null, $a_custom_config2=null, $a_toggle_id=null, $a_subform_id=null)
Add date time picker to element.
static $init_datetimepicker
static _isLeapYear($a_year)
check if a given year is a leap year
static _numericMonthToString($a_month, $a_long=true)
numeric month to string
static getZoneInfoFile($a_tz)
static initDefaultCalendarByType($a_type_id, $a_usr_id, $a_title, $a_create=false)
Init the default calendar for given type and user.
static getUserDateFormat($a_add_time=false, $a_for_parsing=false)
Parse current user setting into date/time format.
@classDescription Date and time handling
static _equals(ilDateTime $start, ilDateTime $end, $a_compare_field='', $a_tz='')
Check if two date are equal.
foreach($_POST as $key=> $value) $res
if(isset($_FILES['img_file']['size']) && $_FILES['img_file']['size'] > 0) $tpl