Horde_Data_Base::_mapDate PHP Method

_mapDate() protected method

Maps a date/time string to an associative array.
protected _mapDate ( string $date, string $type, array $params, integer $key ) : string
$date string The date.
$type string One of 'date', 'time' or 'datetime'.
$params array Two-dimensional array with additional information about the formatting. Possible keys are: - delimiter: The character that seperates the different date/time parts. - format: If 'ampm' and $date contains a time we assume that it is in AM/PM format. - order: If $type is 'datetime' the order of the day and time parts: -1 (timestamp), 0 (day/time), 1 (time/day).
$key integer The key to use for $params.
return string The date or time in ISO format.
    protected function _mapDate($date, $type, $params, $key)
    {
        switch ($type) {
            case 'date':
            case 'monthday':
            case 'monthdayyear':
                $dates = explode($params['delimiter'][$key], $date);
                if (count($dates) != 3) {
                    return $date;
                }
                $index = array_flip(explode('/', $params['format'][$key]));
                return $dates[$index['year']] . '-' . $dates[$index['month']] . '-' . $dates[$index['mday']];
            case 'time':
                $dates = explode($params['delimiter'][$key], $date);
                if (count($dates) < 2 || count($dates) > 3) {
                    return $date;
                }
                if ($params['format'][$key] == 'ampm') {
                    if (strpos(Horde_String::lower($dates[count($dates) - 1]), 'pm') !== false) {
                        if ($dates[0] !== '12') {
                            $dates[0] += 12;
                        }
                    } elseif ($dates[0] == '12') {
                        $dates[0] = '0';
                    }
                    $dates[count($dates) - 1] = sprintf('%02d', $dates[count($dates) - 1]);
                }
                return $dates[0] . ':' . $dates[1] . (count($dates) == 3 ? ':' . $dates[2] : ':00');
            case 'datetime':
                switch ($params['order'][$key]) {
                    case -1:
                        return (string) (int) $date == $date ? date('Y-m-d H:i:s', $date) : $date;
                    case 0:
                        list($day, $time) = explode(' ', $date, 2);
                        break;
                    case 1:
                        list($time, $day) = explode(' ', $date, 2);
                        break;
                }
                $date = $this->_mapDate($day, 'date', array('delimiter' => $params['day_delimiter'], 'format' => $params['day_format']), $key);
                $time = $this->_mapDate($time, 'time', array('delimiter' => $params['time_delimiter'], 'format' => $params['time_format']), $key);
                return $date . ' ' . $time;
        }
    }