2016-04-26 1 views
1

Je tente d'accéder à l'Apple Nouvelles "Créer article" API avec PHP et j'obtiens l'erreur suivante:d'Apple Nouvelles API Format de date PHP

{"errors":[{"code":"INVALID_DATE_FORMAT"}]} 

La documentation demande: « La date actuelle dans la norme ISO 8601 format »

donc, je reçois la date et le formatage comme ceci:

$date = date(DateTime::ISO8601); 

qui produit ceci:

2016-04-26T07:04:53-0700 

Mais je reçois toujours l'erreur. Quelqu'un sait pourquoi?

Répondre

1

utilisation gmdate("Y-m-d\TH:i:s\Z"); ou urlencode(substr(date("c"), 0, 19)."Z";

+0

Aucune de ces options n'a fonctionné - toujours la même erreur. –

+0

peut-être juste 'date ('c')' fonctionnera, mais comme mentionné dans la prochaine réponse dates dans l'API ressemblent '2015-03-05T02: 57: 59Z' c'est exactement' gmdate ("Ymd \ TH: i: s \ Z ");' –

2

En regardant les exemples des réponses sur la référence Api d'Apple (https://developer.apple.com/library/ios/documentation/General/Conceptual/News_API_Ref/CreateArticle.html#//apple_ref/doc/uid/TP40015409-CH14-SW1), il semble que le format de la date est la suivante:

2015-03-05T02:57:59Z 

Notez le 'Z' à la fin ce qui signifie Zulu (aka UTC) il pourrait être utile de convertir votre date et l'heure UTC comme suit:

$date = (new DateTime)->setTimezone(new DateTimeZone('UTC'))->format(DateTime::ATOM); 

Si vous certainement requis le « Z » (Zulu) à la fin, vous pouvez effectuer les opérations suivantes:

$date = (new DateTime)->setTimezone(new DateTimeZone('UTC'))->format('Y-m-d\TH:i:s\Z'); 

Side note: pour charger votre propre date/heure (plutôt que d'utiliser maintenant), vous pouvez changer la code à ceci:

$date = (new DateTime($yourDateTimeString))->setTimezone(new DateTimeZone('UTC'))->format('Y-m-d\TH:i:s\Z'); 

par exemple

$date = (new DateTime('2016-01-01 00:00:00 +0400'))->setTimezone(new DateTimeZone('UTC'))->format('Y-m-d\TH:i:s\Z'); 

S'il vous plaît méfiez-vous! Si vous créez un objet DateTime, assurez-vous qu'il connaît votre fuseau horaire d'origine. Sinon, la conversion en UTC ne fera rien et l'Api d'Apple prendra votre temps en UTC, pas votre fuseau horaire local. En règle générale, stockez toujours les dates en UTC, puis revenez au fuseau horaire local de votre utilisateur lors de la visualisation.

+0

merci! Avez-vous un exemple si je reçois la date comme ça? $ date = date (DateTime :: ISO8601); Devrais-je l'obtenir d'une autre façon? Quand j'essaye de le convertir en UTC il indique que je ne peux pas formater un non-objet. –

+0

@TomCanfarotta Essayez ma réponse mise à jour. – Jamesking56

0

réponse rapide:

date('c', $timestamp); 

Vérifiez aussi: que vous fournissez les dates comme des chaînes, par exemple:

(dans votre fichier ANF)

{ 
    .... 
    "dateCreated": "2020-09-08T12:41:00+00:00", 
    .... 
} 

Vérifiez la Metadata spec pour plus d'exemples. Apple va gérer (et respecter) les fuseaux horaires correctement.

0

Il peut être fait par l'utilisation standard de la fonction Date

echo date('Y-m-d\TH:i:sO',time());

Détails où la dernière partie de 'O' appartient à timeZone par exemple '-0700'.