web-dev-qa-db-fra.com

Manipulation de date de base dans le script Google

Je voudrais définir une fonction personnalisée dans Google Sheet. Cette fonction devrait faire quelque chose de très simple, mais je n’ai pas réussi à trouver comment le faire. Je suis très confus avec toutes les réponses que j'ai lues car je ne trouve pas de référence claire sur le traitement des dates dans les scripts Google.

D'après ce que j'ai compris, les manipulations de base des dates peuvent être effectuées avec:

  • new Date(): d'après ce que j'ai compris, il définit un objet qui possède certaines propriétés. Je ne sais pas comment utiliser la date d'une cellule et la convertir en tant qu'objet.
  • Utilities.formatDate(): il s'agit de changer le format de la date vue comme une chaîne .
  • la bibliothèque Moment ( http://momentjs.com/ )

À la fin, comment puis-je entrer deux dates (par exemple 31/01/2016) et, disons, trouver le maximum entre les deux et extraire le mois du premier?

function myfun(date1,date2) {  
   // month = month of date 1
   // return maximum(date1,date2);  
}

Je suis également intéressé si quelqu'un peut expliquer les grandes lignes de la gestion des dates ou indiquer une bonne référence.

8
anderstood

Obtenir et définir des valeurs de date/heure

Chaque fois que votre script appelle .getValue() sur une cellule au format date, date/heure ou durée, il reçoit un objet Date JavaScript . Vous pouvez ensuite appliquer diverses méthodes répertoriées sur cette page MDN à cet objet, notamment getMonth() pour le mois. Exemple:

  var sheet = SpreadsheetApp.getActiveSheet();
  var value = sheet.getRange('A1').getValue();  // is a Date object
  Logger.log([value.getMonth(), value.getHours(), value.getUTCHours()]); 
  // examples of available methods

Inversement, vous pouvez affecter un objet Date à une cellule à l'aide de setValue, qui sera automatiquement formaté en tant que tel.

  sheet.getRange('B2').setValue(new Date());  // current timestamp

Fuseaux horaires

L'horodatage dans Google Sheets est dans le fuseau horaire local, défini via Fichier> Paramètres de la feuille de calcul. Le script fonctionne également dans un fuseau horaire qui peut être différent et se trouve sous Fichier> Propriétés du projet dans l'éditeur de script. Si ces fuseaux horaires ne correspondent pas, vous rencontrez un problème d'horodatage.

Pour vérifier si les fuseaux horaires concordent, vous pouvez comparer les deux manuellement ou faire quelque chose comme ceci:

var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange('A1').setFormula('=date(2015,1,1)');
Logger.log(sheet.getRange('A1').getValue().getHours());

Ceci introduit la formule =date(2015,1,1) dans la cellule A1. Le résultat sera 2015-01-01 00:00:00 dans le fuseau horaire de la feuille de calcul. Le script obtient alors la date et extrait les heures à l'heure locale du script. Si les fuseaux horaires correspondent, vous devriez voir 0.0 dans le journal.

10
user79865

Réponse courte

Deux fonctions personnalisées sont présentées ci-dessous à titre d'exemples de la manière dont Google Sheets et Google Apps Script pourraient fonctionner avec des dates.

Exemple 1: Obtenir la date la plus récente

get the newest date

function myFunction(date1,date2) {
  return new Date(Math.max(date1,date2)) 
}

Exemple 2: Obtenir le mois de la date la plus récente

function myFunction2(date1,date2) {
  var date = new Date(Math.max(date1,date2));
  return date.getMonth();
}

Brève explication

Dans le premier exemple, la méthode JavaScript Math.max effectue le travail.

Si vous souhaitez obtenir une date comme résultat, un objet de date est créé à l'aide de new Date () .

Dans le deuxième exemple, un objet de date est affecté à une variable, puis la méthode JavaScript getMonth () est utilisée pour obtenir l'index du mois. N'oubliez pas que JavaScript utilise 0 pour l'élément de départ, donc 0 correspond à janvier, 1 à février et ainsi de suite.

Références

4
Rubén