/**
  * Adjust miliseconds from epoch to date format 
  * @param the object or array $data
  * @throws InvalidArgumentException
  * @return the object or array processed
  */
 public static function formatDates($data)
 {
     if (!isset($data)) {
         throw new \InvalidArgumentException("the object to format dates is null ");
     }
     if (!is_object($data) && !is_array($data)) {
         throw new \InvalidArgumentException("the parameter to format dates is not a object or array");
     }
     foreach ($data as $k => $v) {
         if (PayURequestObjectUtil::isKeyDateField($k)) {
             if (is_array($data)) {
                 $miliseconds = $data[$k];
                 $data[$k] = PayURequestObjectUtil::getDate($miliseconds);
             } else {
                 if (is_object($data)) {
                     $miliseconds = $data->{$k};
                     $data->{$k} = PayURequestObjectUtil::getDate($miliseconds);
                 }
             }
         } else {
             if (is_object($data) && (is_object($data->{$k}) || is_array($data->{$k}))) {
                 $data->{$k} = PayURequestObjectUtil::formatDates($data->{$k});
             } else {
                 if (is_array($data) && (is_object($data[$k]) || is_array($data[$k]))) {
                     $data[$k] = PayURequestObjectUtil::formatDates($data[$k]);
                 }
             }
         }
     }
     return $data;
 }