Comment lire l'heure correcte des valeurs de feuille de calcul Google
Je vais essayer d'obtenir à partir d'une heure de Cellules mises en forme (hh:mm:ss) la valeur de l'heure, les valeurs peuvent être plus 24:00:00 par exemple 20000:00:00 devraient donner 20000:
Table:
si votre lecture de la Valeur de E1:
var total = sheet.getRange("E1").getValue();
Logger.log(total);
Le résultat est:
Sam 12 Avr 07:09:21 GMT+00:09 1902
Maintenant, j'ai essayé de le convertir en un objet de Date et d'obtenir le temps Unix timbre:
var date = new Date(total);
var milsec = date.getTime();
Logger.log(Utilities.formatString("%11.6f",milsec));
var hours = milsec / 1000 / 60 / 60;
Logger.log(hours)
1374127872020.000000
381702.1866722222
La question est de savoir comment obtenir la valeur correcte de 20000 ?
OriginalL'auteur patrick | 2013-07-18
Vous devez vous connecter pour publier un commentaire.
Pour les futurs lecteurs. Il y a deux nouvelles fonctions
getDisplayValue()
etgetDisplayValues()
fournis par Application de Script gens qui renvoie la valeur d'affichage. Consultez la documentation iciLa Question et la réponse est sur les feuilles, en particulier.
Merci, oui, j'ai besoin de chercher plus précisément les heures et les dates à partir de feuilles dans les docs. Affichage des valeurs, pas dérangée par des fuseaux horaires ou anthing d'autre. Je travaille maintenant autour de lui par le réglage de l'heure les zones de tous les fichiers et les scripts de "GMT (pas d'heure d'été)".
OriginalL'auteur llaaalu
Étendre sur ce que Serge a fait, j'ai écrit quelques fonctions qui doivent être un peu plus facile à lire et de prendre en compte le fuseau horaire différences entre la feuille de calcul et le script.
Vous pouvez utiliser ces fonctions comme:
Inutile de dire, c'est beaucoup de travail pour obtenir le nombre d'heures à partir d'une plage. Veuillez star Question 402 qui est une demande de fonctionnalité pour avoir la capacité d'obtenir de la chaîne de valeur d'une cellule.
un détail : je viens de remarquer que pour un moment "particulier" zones comme 03:30, par exemple, il ne veut pas retourner un entier... ajoutant des Mathématiques.round() sur la dernière retourné des valeurs (minutes et heures) pourrait être utile dans ce cas particulier. Après tout ça ne dérange pas les autres cas 😉
Merci Serge, j'ai ajusté la logique d'une telle manière qu'il gère correctement le décalage horaire qui ne sont pas des heures entières.
Merci Eric, aider le script complet
Selon code.google.com/p/google-apps-script-issues/issues/... la Question 402 est corrigé 🙂
OriginalL'auteur Eric Koleda
La valeur que vous voyez (Sam Avr 12 07:09:21 GMT+00:09 1902) est l'équivalent de la date en Javascript standard temps, c'est-à 20000 heures plus tard que la date ref.
vous devez simplement supprimer la feuille de calcul de la valeur de référence de votre résultat à obtenir ce que vous voulez.
Ce code fait le truc :
remarque : ce code est de quelques heures seulement , si vous allez avoir des minutes et/ou de la seconde, alors il devrait être développé pour gérer ça aussi... laissez-nous savoir si vous en avez besoin.
EDIT : un petit mot d'explication...
Des feuilles de calcul utiliser une référence à la date de 12/30/1899 tout en Javascript à l'aide de 01/01/1970, cela signifie qu'il ya une différence de 25568 jours entre les deux références. Tout cela en supposant que nous utilisons le même fuseau horaire dans les deux systèmes. Lorsque nous convertir une valeur de date dans une feuille de calcul à un objet date javascript du moteur à GAZ ajoute automatiquement la différence de garder une cohérence entre les dates.
Dans ce cas, nous ne voulons pas savoir la date réelle de quelque chose, mais plutôt d'une absolue valeur des heures, c'est à dire une "durée", nous avons donc besoin de retirer la 25568 jour de décalage. Ceci est fait en utilisant la
getTime()
méthode qui retourne millisecondes comptés à partir de la JS date de référence, la seule chose que nous devons savoir, c'est la valeur en millisecondes de la feuille de calcul à la date de référence et soustraire cette valeur à partir de la date réelle de l'objet. Puis un peu de maths pour obtenir des heures au lieu de millisecondes, et nous y sommes.Je sais que cela semble un peu compliqué et je ne suis pas sûr que ma tentative d'explication va vraiment clarifier la question, mais il est toujours intéressant d'essayer n'est-ce pas ?
De toute façon le résultat est ce qu'il nous fallait aussi longtemps que (comme indiqué dans les commentaires) une réglez la valeur de décalage selon les paramètres de fuseau horaire de la feuille de calcul. Il serait bien sûr possible de laisser le script gérer automatiquement mais il aurait pu rendre le script plus complexe, pas sûr que c'est vraiment nécessaire.
Voir le commentaire dans le code
ok merci beaucoup, cela m'a sauvé days inn enquête
un petit problème, je suis 19999.0 pourrait-il que la valeur de 2.2091616E12 dépend du fuseau horaire de la feuille de calcul?
J'ai ajouté une ligne que vous pouvez utiliser avec une valeur de l'heure = 0 pour obtenir la valeur de la constante qui convient à vos TZ, c'est en effet en fonction de votre feuille de Temps de la Zone
OriginalL'auteur Serge insas
Pour de simples feuilles de calcul que vous pouvez être en mesure de modifier votre feuille de calcul fuseau horaire de GMT sans heure d'été et à l'utilisation de ce court-fonction de conversion:
Eric Koleda la réponse est à bien des égards plus général. J'ai écrit cela tout en essayant de comprendre comment il gère le coin des cas, avec la feuille de calcul fuseau horaire, le navigateur, le fuseau horaire et l'horaire des changements dans 1900 dans de l'Alaska et de Stockholm.
OriginalL'auteur Tom Brown