/**
  * 	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')));
 }