So formatieren Sie das Datum in diesem Google Apps-Skript

8

Ich bin auf dieses Skript zur Rangprüfung gestoßen. Ich bin mir nicht sicher, wo ich es gefunden habe, aber es basiert auf Google Text & Tabellen und einem Skript, das den Rangprüfungsprozess automatisiert. Ich verstehe ein bisschen Codierung, aber nicht genug, um das wirklich herauszufinden. Ich bin sicher, jemand hier kann es herausfinden.

Das Skript wird jede Nacht ausgeführt, fragt Google nach meinen Keywords ab und füllt dann leere Zellen in einer Google-Tabelle. Das angezeigte Datumsformat ist15.06.2014 06:08:21

Ich möchte, dass es ein Datumsformat ist, mit dem ich besser vertraut bin, wie mm/dd/yyyyoder so etwas.

Wie auch immer, ich habe mit dem Skript dabbled (welcher Sprache diese in? Python geschrieben?) Und ich sehe es eine Variable mit dem Namen legt curDatzu new Date(). Ist nach meinem Verständnis Date()eine Funktion aufgerufen und werden keine Parameter an sie übergeben - richtig? Liegt das Problem in der Date()Funktion oder ist dies nur ein einfacher Fall, in dem ich das Datum in Google Spreadsheets formatieren muss?

Hier ist eine Einfügung des gesamten Skripts - es ist kurz:

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
quelle
"(In welcher Sprache ist das geschrieben? Python?)" Es ist JavaScript, siehe developer.google.com/apps-script
Vidar S. Ramdal

Antworten:

9

Verwenden Sie setNumberFormatdiese Option , um das Datums- (oder Zahlen-) Format für eine bestimmte Zelle festzulegen. In diesem Beispiel wird das heutige Datum in A1 des aktuellen Blattes eingefügt, formatiert als MM / TT / JJJJ:

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

Gründe für die Verwendung setNumberFormat(und nicht Utilities.formatDate, wie im Internet oft empfohlen):

  1. Utilities.formatDateändert das Zellenformat nicht; es konvertiert seinen Inhalt in Text. Wenn Sie den Datumswert in Berechnungen verwenden möchten, möchten Sie nicht, dass er in Text konvertiert wird.
  2. Utilities.formatDateerfordert die Angabe einer Zeitzone. Wenn Sie so etwas wie "GMT + 1" eingeben und Ihr Land die Sommerzeit einhält, können Sie davon ausgehen, dass einige Monate später schwer zu verfolgende Fehler auftreten. Mit setNumberFormatbleibt der Datumswert mit allen anderen Datumswerten in der Tabelle konsistent, abhängig von der Zeitzoneneinstellung.

quelle
Hinweis zu 2.: Sie können Session.getScriptTimeZone()als Zeitzonenparameter verwenden.
Kos
Das Problem ist, dass Session.getScriptTimeZone()das Langformat (z. B. Amerika / Denver) anstelle von "GMT-7" ausgegeben wird, sodass Sie es irgendwie konvertieren müssen.
Craig.Pearce
@ Craig.Pearce Richtig, und ob "America / Denver" in GMT-7 oder GMT-6 konvertiert, hängt davon ab, ob die Sommerzeit gültig ist, in welchem ​​Bundesstaat Sie sich befinden und welche Gesetze in diesem Bundesstaat verabschiedet wurden vor kurzem.
0

Mit der Zeit:

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