2017-07-20 1 views
0

J'ai quelques tests pour une application Angular 2 qui passe quand elle est exécutée dans Firefox mais échoue dans PhantomJS. Dans le test, je vérifie qu'une date est correctement définie. Je nourris dans une chaîne de date iso locale sous la forme "2017-07-20T14: 20". La partie date est définie correctement mais l'heure est désactivée. J'exécute le test dans la zone horaire de Mountain Time (-6: 00 UTC), donc le temps passe à 08:20. Y a-t-il une cale ou une configuration que je pourrais manquer?PhantomJS ISO locale Date off

Voici un code:

Dans mon fichier de classe customDate

public startTime: string; 

public setDate(date: string) { 
    let date:Date = new Date(date); 
    this.startTime = date.getHours() + ':'; 
    if (date.getMinutes() < 10) { 
     this.startTime += date.getMinutes() + '0'; 
    } else { 
     this.startTime += date.getMinues(); 
    } 
} 

Dans mon fichier de test

it('should pass') { 
    let testDate = new customDate(); 
    testDate.setDate('2017-07-20T14:20'); 
    expect(testDate.startTime).toBe('14:00'); <-- this is failing it's comeing through as ('8:00') 
} 
+0

Je pense que l'heure à laquelle vous entrez est UTC sauf si vous utilisez un [décalage horaire] (https://en.wikipedia.org/wiki/ISO_8601#Time_offsets_from_UTC) – 0mpurdy

Répondre

0

Lors de la recherche d'un problème similaire avec les anciennes versions de Chrome et Safari analyse d'une chaîne de date locale comme UTC nous avons trouvé cette solution: Javascript: parse a string to Date as LOCAL time zone. Il s'avère que PhantomJS utilise ES5 et donc les chaînes de date et heure sont analysées comme UTC non locales. La solution dans le lien explique ce qui se passe et comment le contourner.