Moment: startOf('day')/endOf('day') n'est pas correct avec UTC

Créé le 24 janv. 2014  ·  3Commentaires  ·  Source: moment/moment

Lors de l'utilisation de l'heure locale, la fonction startOf('day')/endOf('day') fonctionne comme prévu, mais lorsque j'utilise l'heure UTC, la valeur est traitée comme l'heure locale.

http://jsfiddle.net/3d9eU/5/

moment.lang('nl');
var t1 = instant(); // heure locale
var t2 = t1.clone().utc(); // UTC

console.log('LOC valueOf = ' + t1.valueOf()); //1390557395517 -> D'accord
console.log('UTC valueOf = ' + t2.valueOf()); // 1390557395517 -> D'accord

console.log('LOC fin de journée valueOf = ' + t1.endOf('day').valueOf()); //1390604399999 -> D'accord
console.log('UTC fin de journée valueOf = ' + t2.endOf('day').valueOf()); //1390607999999 -> PAS OK

console.log('LOC fin de journée _d = ' + t1.endOf('jour')._d); //Ven 24 janvier 2014 23:59:59 GMT+0100 (W. Europe Standard Time) -> OK
console.log('UTC fin de journée _d = ' + t2.endOf('day')._d); //Sat Jan 25 2014 00:59:59 GMT+0100 (W. Europe Standard Time) -> NOT OK

Meilleures salutations,
Bjorn

Troubleshooting

Commentaire le plus utile

On dirait que vous demandez pourquoi m.utc().endOf('day') vous donne la fin de la journée en UTC au lieu de votre heure locale. C'est par conception. utc() signifie "traiter l'heure comme si elle était UTC", où la fin de la journée est 23:59:59 _en UTC_, soit une heure plus tard en Europe occidentale. C'est la même chose que le fonctionnement offset() ; une fois que le moment est dans un certain décalage UTC, ses opérations fonctionnent dans ce contexte.

En d'autres termes, ceux-ci disent des choses très différentes (je suis sur la côte est des États-Unis):

moment().utc().endOf('day').toString(); //=> "Sat Jan 25 2014 23:59:59 GMT+0000"
moment().endOf('day').utc().toString(); //=> "Sun Jan 26 2014 04:59:59 GMT+0000"

J'espère que cela aide.

Tous les 3 commentaires

De quelle version de Moment s'agit-il ? d n'est pas une propriété sur l'objet Moment (du moins, plus). Il y a un _d , auquel vous ne devriez certainement pas faire référence et qui serait extrêmement trompeur ici. En ce qui concerne le problème réel, cela fonctionne bien pour moi:

moment().utc().endOf('day').format(); //=> '2014-01-24T23:59:59+00:00'

Donc je suppose que tu es sur une version préhistorique ?

J'utilise la version 2.5.0.

La propriété '_d' est ce que j'utilise pour voir quelle valeur Moment contient pendant le débogage. (Désolé pour le malentendu). Mais pourquoi cette propriété est-elle différente pour l'heure locale par rapport à UTC ? Les deux ont le fuseau horaire +0100 au lieu de +0100 pour l'heure locale et +0000 pour l'UTC. voir http://jsfiddle.net/3d9eU/5/

Heure locale : ven. 24 janvier 2014 23:59:59 GMT+0100 (W. Europe Standard Time)
UTC : Sam Jan 25 2014 00:59:59 GMT+0100 (W. Europe Standard Time) ne devrait-il pas être Ven Jan 24 2014 23:59:59 GMT+0100 (W. Europe Standard Time) avec la propriété _isUTC = true ?

On dirait que vous demandez pourquoi m.utc().endOf('day') vous donne la fin de la journée en UTC au lieu de votre heure locale. C'est par conception. utc() signifie "traiter l'heure comme si elle était UTC", où la fin de la journée est 23:59:59 _en UTC_, soit une heure plus tard en Europe occidentale. C'est la même chose que le fonctionnement offset() ; une fois que le moment est dans un certain décalage UTC, ses opérations fonctionnent dans ce contexte.

En d'autres termes, ceux-ci disent des choses très différentes (je suis sur la côte est des États-Unis):

moment().utc().endOf('day').toString(); //=> "Sat Jan 25 2014 23:59:59 GMT+0000"
moment().endOf('day').utc().toString(); //=> "Sun Jan 26 2014 04:59:59 GMT+0000"

J'espère que cela aide.

Cette page vous a été utile?
0 / 5 - 0 notes