/** * Generate or convert a String or an Integer parameter into an ISO 8601 Date format. * * @access public * @param Object date in seconds OR in convertible String Date (http://php.net/manual/en/function.strtotime.php) * to convert in a ISO 8601 Date format: 'Y-m-d\TH:i:sZ' * @return String */ public static function getISODate($date = NULL) { if (FeedValidator::isNull($date) == FALSE) { if (strlen($date) >= 8 && !is_int($date)) { if (FeedValidator::isValidDate($date)) { return $date; } else { return FeedValidator::isNull(strtotime($date)) ? self::getISODate() : date(DateTime::ATOM, strtotime($date)); } } else { if (intval($date) > 0 && FeedValidator::isOnlyNumsChars($date)) { return date(DateTime::ATOM, $date); } } } else { $datetime_template = 'Y-m-d\\TH:i:s'; // control if PHP is configured with the same timezone then the server $timezone_server = exec('date +%:z'); $timezone_php = date('P'); if (strlen($timezone_server) > 0 && $timezone_php != $timezone_server) { return date($datetime_template, exec("date --date='@" . date('U') . "'")) . $timezone_server; } else { if (date_default_timezone_get() == 'UTC') { $offsetString = 'Z'; } else { $phpTime = date($datetime_template); $millis = strtotime($phpTime); // Convert time to milliseconds since 1970, using default timezone $timezone = new DateTimeZone(date_default_timezone_get()); // Get default system timezone to create a new DateTimeZone object $offset = $timezone->getOffset(new DateTime($phpTime)); // Offset in seconds to UTC $offsetHours = round(abs($offset) / 3600); $offsetMinutes = round((abs($offset) - $offsetHours * 3600) / 60); $offsetString = ($offset < 0 ? '-' : '+') . ($offsetHours < 10 ? '0' : '') . $offsetHours . ':' . ($offsetMinutes < 10 ? '0' : '') . $offsetMinutes; } return date($datetime_template, $millis) . $offsetString; } } return addslashes(date(DateTime::ATOM, date('U'))); }