Cómo formatear la fecha en este script de Google Apps

10

Me he encontrado con este script de verificación de rango. No estoy seguro exactamente dónde lo encontré, pero está construido en Google Docs y un script que automatiza el proceso de verificación de rango. Entiendo un poco de codificación, pero no lo suficiente como para entender realmente esto. Estoy seguro de que alguien aquí puede resolverlo.

El script se ejecuta todas las noches, consulta a Google por mis palabras clave y luego completa las celdas en blanco en una hoja de cálculo de Google. El formato de fecha que aparece es15.06.2014 06:08:21

Me gustaría que sea un formato de fecha con el que estoy más familiarizado, como mm/dd/yyyyo algo así.

De todos modos, he incursionado en el script (¿en qué idioma está escrito esto? ¿Python?) Y veo que establece una variable llamada curData new Date(). Según tengo entendido, Date()es una función que se llama y no se le pasan parámetros, ¿correcto? ¿El problema está en la Date()función o es solo un caso simple de tener que formatear la fecha en las hojas de cálculo de Google?

Aquí hay una pasta del script completo: es breve:

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);
}
usuario72299
fuente
"(¿en qué idioma está escrito? Python?)" Es JavaScript, consulte developers.google.com/apps-script
Vidar S. Ramdal

Respuestas:

9

Se usa setNumberFormatpara establecer el formato de fecha (o número) para una celda en particular. Este ejemplo pone la fecha de hoy en A1 de la hoja actual, formateada como MM / dd / aaaa:

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

Razones para usar setNumberFormat(y no Utilities.formatDate, como se suele recomendar en Internet):

  1. Utilities.formatDateno cambia el formato de la celda; Convierte su contenido en texto. Si va a utilizar el valor de la fecha en los cálculos, no desea que se convierta en texto.
  2. Utilities.formatDaterequiere uno para especificar una zona horaria. Si pone algo como "GMT + 1" y su país observa el horario de verano, puede esperar que surjan errores difíciles de rastrear unos meses más tarde. Con setNumberFormat, el valor de la fecha permanece consistente con todos los demás valores de la fecha en la hoja de cálculo, regido por su configuración de zona horaria.

fuente
Nota para 2 .: se puede usar Session.getScriptTimeZone()como parámetro de zona horaria.
Kos
El problema es que Session.getScriptTimeZone()genera el formato largo (ej. América / Denver) en lugar de "GMT-7", por lo que debe convertirlo de alguna manera.
Craig.Pearce
@ Craig.Pearce Right, y si "America / Denver" se convierte a GMT-7 o GMT-6 depende de si el horario de verano está vigente, lo que depende de en qué estado se encuentre y qué leyes se aprobaron en ese estado recientemente.
0

Con tiempo:

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