Est-il possible d'interroger des messages Gmail par horodatage?

13

Est-il possible de rechercher tous les messages Gmail dans une plage plus granulaire que la journée?

Par exemple, pourrais-je rechercher tous les messages de chat de 15h à 17h le 4 octobre? À quoi cela ressemblerait-il?

En regardant la référence de recherche avancée de Gmail, j'ai remarqué qu'ils mentionnent les heures spécifiques, mais ne spécifient pas le format, probablement il n'est pas pris en charge, mais j'ai pensé que je vérifierais juste au cas où j'entrerais simplement des recherches dans le mauvais format. .

Exemple: après: 2004/04/16 avant: 2004/04/18

Signification: Messages envoyés entre le 16 avril 2004 et le 18 avril 2004. *

* Plus précisément: messages envoyés après 00h00 (ou 00h00) le 16 avril 2004 et avant le 18 avril 2004.

oncifer
la source

Réponses:

10

Les heures spécifiques sont mentionnées dans la documentation pour montrer que l'opérateur "après" inclut la date indiquée, tandis que l'opérateur "avant" est exclusif de la date. Il n'y a aucun moyen d'utiliser la zone de recherche sur une plage de temps plus spécifique.

Si vous utilisez des scripts Google Apps, vous pouvez effectuer votre recherche en utilisant les meilleures dates dont vous disposez. Ensuite, vous pouvez filtrer les threads résultants en fonction de l'heure et d'autres critères. Exemple:

var threads = GmailApp.search("after:2014/09/01 before:2014/09/02",0,100);
var timeFrom = new Date("2014/09/01 10:00:00").getTime();
var timeTo = new Date("2014/09/01 13:00:00").getTime();

for (var i = 0; i < threads.length; i++){
  var timeThreadStart = threads[i].getFirstMessageDate().getTime();

  if(timeThreadStart > timeFrom && timeThreadStart < timeTo){
    //do something
  }
}
Pyrodogg
la source
REMARQUE: l'opérateur "après" inclut la date indiquée, tandis que l'opérateur "avant" exclut la date !!
Habeeb Perwad
Salut Pyrodogg, puis-je me joindre à l'étiquette d'utilisation? GmailApp.search
pathique
Si je comprends bien votre question, oui, vous pouvez également utiliser des étiquettes dans les critères de recherche. Ex. "après: 2019/01/01 avant: 2019/02/01 label: achats". Si je n'ai pas compris votre question, faites-le moi savoir.
Pyrodogg
8

Il est possible de spécifier une plage de temps avec une précision allant jusqu'à une seconde, car les opérateurs de recherche après:, avant:, plus récent:, plus ancien: acceptent les horodatages Unix . En utilisant un outil tel que Epoch Converter , vous pouvez découvrir que

  • 2014-10-04 à 15:00 (en utilisant GMT par exemple) a l'horodatage 1412434800
  • Ajoutez deux heures (7200 secondes) ou utilisez à nouveau le même outil: 1412442000

La recherche after:1412434800 before:1412442000renvoie les messages dans cette plage de 2 heures.

Depuis la conversion en temps Unix ressemble à une corvée, j'ai fait un bookmarklet qui rend cette substitution en place.

Par exemple, après avoir tapé

après: 2015/07/26 10:00 avant: 2015/07/27 11:30

dans la zone de recherche (qui ne fonctionnerait pas tel quel), appelez le bookmarklet et la chaîne sera remplacée par

après: 1437919200 avant: 1438011000

(Le bookmarklet interprète les horodatages donnés dans votre heure locale.)

La page que j'ai liée a à la fois la source et un lien glissable avec le bookmarklet. Pour être complet, le code source est également affiché ci-dessous.

inp = document.querySelectorAll('input');
for (i in inp) {
  if (/(after|before|newer|older):/.test(inp[i].value)) {
    str = inp[i].value;
    times = str.match(/\d[\d\/: ]*\d/g);
    for (j in times) {
      if (Date.parse(times[j])) {
        str = str.replace(times[j], Date.parse(times[j])/1000);
      }
    }
    inp[i].value = str;
  } 
}

la source
Il semble que cela after:UNIXTIMESTAMPne fonctionne pas correctement ...
Kunok
@Kunok semble fonctionner pour moi. pourriez-vous développer?
nakhli
1
@nakhli Ugh .. c'est vieux. Mais pour autant que je m'en souvienne, je pense que je lui ai donné trop de caractères int comme entrée. Je pense que j'ai dû supprimer les 3 derniers chiffres ou quelque chose comme ça. Un peu comme cette réponse ci-dessus le mentionne, notez l'exemple dans la réponse, elle a 10 caractères, alors Date.now()qu'elle retournerait 13 caractères. Quelque chose comme ca. Je l'ai corrigé et le script fonctionne depuis lors, il fonctionne toujours 0-24 au cours des 12 derniers mois, et va probablement fonctionner pendant très longtemps. Merci. : P
Kunok
13 caractères car il retourne des millisecondes
Shiplu Mokaddim