Comment formater la date dans ce script Google Apps

10

Je suis tombé sur ce script de vérification de rang. Je ne sais pas exactement où je l'ai trouvé, mais il est construit sur Google Docs et un script qui automatise le processus de vérification du classement. Je comprends un peu le codage mais pas assez pour vraiment comprendre cela. Je suis certain que quelqu'un ici peut le comprendre.

Le script s'exécute tous les soirs, interroge Google pour mes mots clés, puis remplit les cellules vides dans une feuille de calcul Google. Le format de date qui apparaît est15.06.2014 06:08:21

J'aimerais que ce soit un format de date que je connaisse mieux, comme mm/dd/yyyyou quelque chose comme ça.

Quoi qu'il en soit, j'ai essayé le script (dans quelle langue est-ce écrit en? Python?) Et je vois qu'il définit une variable nommée curDatà new Date(). D'après ma compréhension, Date()une fonction est-elle appelée et aucun paramètre ne lui est transmis - correct? Le problème est-il dans la Date()fonction ou s'agit-il simplement d'un cas simple où je dois formater la date dans Google Spreadsheets?

Voici une pâte du script entier - il est court:

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.insertColumnBefore(5);
  var column = sheet.getRange('B13:B');
  var values = column.getValues();
  var rankingdrop = sheet.getRange("c8").getValue();
  var ct = 0;
  var colors = [];
  while ( values[ct][0] != "" ) {
  var formu = sheet.getRange("d" + (ct+13)).getFormula();
    sheet.getRange("d" + (ct+13)).setFormula(formu);
    Utilities.sleep(3000);
  var rank = sheet.getRange("d" + (ct+13)).getValue();
  sheet.getRange("e" + (ct+13)).setValue(rank);
  var oldrank = sheet.getRange("f" + (ct+13)).getValue();
  var colorcell = sheet.getRange("e" + (ct+13));
    if(rank > oldrank){
    colorcell.setFontColor("#ff0000");
  } else if (rank < oldrank){
    colorcell.setFontColor("#088A08");
  }
    if (rank - oldrank >= rankingdrop) {
      var mailalert = true;
    }
    ct++;
  }
  var sendmail = sheet.getRange("c7").getValue();
  if (mailalert == true && sendmail == "yes")  {
    var emailAddress = sheet.getRange("c9").getValue();
    var message = "Ranking alert. Please check your rankings";
    var url = sheet.getRange("c4").getValue();
    var subject = ("Ranking Alert for " + url);
    MailApp.sendEmail(emailAddress, subject, message);
  }
  var curDat = new Date();
  var startOTY = curDat.getFullYear();
  var curValue = Date.parse(curDat);
  var begDat = new Date(startOTY,0,1);
  var begValue = Date.parse(begDat);
  var weekNum = parseInt((curValue - begValue)/604800000)+1;
  sheet.getRange("e12").setValue(curDat);
}
user72299
la source
"(dans quelle langue est-ce écrit? python?)" C'est du JavaScript, voir developers.google.com/apps-script
Vidar S. Ramdal

Réponses:

9

Utilisez setNumberFormatpour définir le format de date (ou de nombre) pour une cellule particulière. Cet exemple place la date du jour dans A1 de la feuille en cours, au format MM / jj / aaaa:

var cell = SpreadsheetApp.getActiveSheet().getRange(1, 1);
cell.setValue(new Date()).setNumberFormat("MM/dd/yyyy");

Raisons d'utiliser setNumberFormat(et non Utilities.formatDate, comme si souvent conseillé sur Internet):

  1. Utilities.formatDatene change pas le format des cellules; il convertit son contenu en texte. Si vous comptez utiliser la valeur de date dans les calculs, vous ne voulez pas qu'elle soit convertie en texte.
  2. Utilities.formatDatenécessite un pour spécifier un fuseau horaire. Si vous mettez quelque chose comme "GMT + 1" et que votre pays observe l'heure d'été, vous pouvez vous attendre à ce que des bogues difficiles à suivre surviennent quelques mois plus tard. Avec setNumberFormat, la valeur de date reste cohérente avec toutes les autres valeurs de date dans la feuille de calcul, régie par son paramètre de fuseau horaire.

la source
Note à 2: vous pouvez utiliser Session.getScriptTimeZone()comme paramètre de fuseau horaire.
Kos
Le problème est que Session.getScriptTimeZone()le format long (par exemple America / Denver) est émis plutôt que "GMT-7", vous devez donc le convertir d'une manière ou d'une autre.
Craig.Pearce
@ Craig.Pearce Right, et si "America / Denver" se transforme en GMT-7 ou GMT-6 dépend si l'heure d'été est en vigueur, qui dépend de l'état dans lequel vous vous trouvez et des lois qui ont été adoptées dans cet état récemment.
0

Avec le temps:

  var formatedDate = Utilities.formatDate(new Date(), "GMT", "MM/dd/yyyy-HH:mm:ss")
Dawid Polakowski
la source