public static function parseHttpDate($dateHeader)
    {
            //RFC 2616 section 3.3.1 Full Date
            //Only the format is checked, valid ranges are checked by strtotime below
            $month      = '(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)';
            $weekday    = '(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday)';
            $wkday      = '(Mon|Tue|Wed|Thu|Fri|Sat|Sun)';
            $time       = '[0-2]\d(\:[0-5]\d){2}';
            $date3      = $month . ' ([1-3]\d| \d)';
            $date2      = '[0-3]\d\-' . $month . '\-\d\d';
            //4-digit year cannot begin with 0 - unix timestamp begins in 1970
            $date1      = '[0-3]\d ' . $month . ' [1-9]\d{3}';

            //ANSI C's asctime() format
            //4-digit year cannot begin with 0 - unix timestamp begins in 1970
            $asctimeDate    = $wkday . ' ' . $date3 . ' ' . $time . ' [1-9]\d{3}';
            //RFC 850, obsoleted by RFC 1036
            $rfc850Date     = $weekday . ', ' . $date2 . ' ' . $time . ' GMT';
            //RFC 822, updated by RFC 1123
            $rfc1123Date    = $wkday . ', ' . $date1 . ' ' . $time . ' GMT';
            //allowed date formats by RFC 2616
            $httpDate       = "($rfc1123Date|$rfc850Date|$asctimeDate)";

            //allow for space around the string and strip it
            $dateHeader = trim($dateHeader, ' ');
            if (!preg_match('/^' . $httpDate . '$/', $dateHeader))
                return false;

            //append implicit GMT timezone to ANSI C time format
            if (strpos($dateHeader, ' GMT') === false)
                $dateHeader .= ' GMT';


            $realDate = strtotime($dateHeader);
            //strtotime can return -1 or false in case of error
            if ($realDate !== false && $realDate >= 0)
                return new \DateTime('@' . $realDate, new DateTimeZone('UTC'));

        }