Manipulación básica de la fecha en el script de Google

11

Me gustaría definir una función personalizada en Google Sheet. Esta función debería hacer algo muy simple, sin embargo, no he logrado encontrar cómo hacerlo. Estoy muy confundido con todas las respuestas que leí porque no puedo encontrar una referencia clara sobre cómo tratar las fechas en los scripts de Google.

Por lo que entiendo, las manipulaciones básicas de fechas se pueden hacer con:

  • new Date(): por lo que entiendo, define un objeto que tiene algunas propiedades. No sé cómo usar la fecha de una celda y convertirla como tal objeto.
  • Utilities.formatDate(): esto es para cambiar el formato de la fecha visto como una cadena .
  • la biblioteca Moment( http://momentjs.com/ )

Al final, ¿cómo puedo ingresar dos fechas (por ejemplo 31/01/2016) y, por ejemplo, encontrar el máximo entre las dos y extraer el mes de la primera?

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

También estoy interesado si alguien puede explicar los esquemas de tratar con las fechas, o indicar una buena referencia.

entendido
fuente
Gracias. ¿No hay otra manera? ¡Parece increíblemente complicado extraer, por ejemplo, el mes de una cita! Además, debe tener en cuenta la zona horaria ... Eso es un poco retorcido para operaciones de fecha simples (fijas).
entendido el
Agregué una respuesta centrada en el código del caso que fue expuesto, pero la pregunta es dos amplias (manipulación de fecha). Tal vez debería comenzar buscando fragmentos de código JavaScript y cursos en línea.
Rubén
@ Rubén lo entiendo. No quería hacer una pregunta de "escribir código para mí", así que estaba buscando información general que realmente no encontré. La publicación de Sergei insas que indicaste es útil.
entendido el
Con respecto a la información general sobre JavaScript, consulte developer.mozilla.org/en-US/docs/Web/JavaScript y sobre Google Apps Script, vea developers.google.com/apps-script .
Rubén

Respuestas:

14

Obtener y establecer valores de fecha y hora

Cada vez que su secuencia de comandos llama .getValue()a una celda con formato de fecha, fecha-hora o duración, obtiene un objeto Fecha de JavaScript . A continuación, puede aplicar varios métodos enumerados en esa página MDN a este objeto, incluso getMonth()para el mes. Ejemplo:

  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

Por el contrario, puede asignar un objeto Date a una celda usando setValue, y se formateará automáticamente como tal.

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

Zonas horarias

La marca de tiempo en Hojas de cálculo de Google se encuentra en la zona horaria local, que se configura a través de Archivo> Configuración de hoja de cálculo. El script también opera dentro de una zona horaria, que puede ser diferente y se encuentra en Archivo> Propiedades del proyecto en el editor de script. Si estas zonas horarias no están de acuerdo, tendrá un problema con las marcas de tiempo.

Para verificar si las zonas horarias están de acuerdo, puede comparar ambas manualmente o hacer algo como esto:

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

Esto ingresa la fórmula =date(2015,1,1)en la celda A1. El resultado será 2015-01-01 00:00:00 en la zona horaria de la hoja de cálculo. La secuencia de comandos obtiene la fecha y extrae horas en la hora local de la secuencia de comandos. Si las zonas horarias están de acuerdo, debería ver 0.0 en el registro.


fuente
4

Respuesta corta

A continuación, se presentan dos funciones personalizadas como ejemplos de cómo Google Sheets y Google Apps Script podrían funcionar con las fechas.

Ejemplo 1: obtenga la fecha más reciente

obtener la fecha más nueva

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

Ejemplo 2: obtenga el mes de la fecha más reciente

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

Breve explicacion

En el primer ejemplo, el método JavaScript Math.max hace el trabajo.

Si se ordena obtener una fecha como resultado, se crea un objeto de fecha utilizando la nueva Fecha () .

En el segundo ejemplo, se asigna un objeto de fecha a una variable, luego se usa el método getMonth () JavaScript para obtener el índice del mes. Tenga en cuenta que el uso de JavaScript 0para el elemento inicial 0es para enero, 1febrero y así sucesivamente.

Referencias

Rubén
fuente
i) son date1, date2pasé como números (por lo general: 54243)? ii) Ahora intenté extraer el mes de date2uso, date2.getMonth()pero cuando la celda es 01/12/2015, devuelve 10 y 11 para 02/12/2015. Supongo que es por la zona horaria. La función de hoja month()es mucho más simple.
entendido el
Las Hojas de cálculo de Google manejan las fechas como números serializados, igual que JavaScript, pero cada una tiene una fecha de inicio diferente. Por lo tanto, si desea utilizar las funciones de fecha de JavaScript, primero debe convertir la fecha de la hoja de cálculo en una fecha de JavaScript. Como ya notó, la ruta más fácil es usar funciones de hoja de cálculo para manejar fechas de hoja de cálculo y funciones de JavaScript para manejar fechas de JavaScript.
Rubén
@anderstood: agregué un segundo ejemplo.
Rubén
Gracias de nuevo. Con respecto al segundo ejemplo, como había escrito, cuando el máximo es 12/01/2015 myfunction2devuelve 10 y cuando el máximo es 12/02/2015, devuelve 11. Aunque estoy bien con el 11, no entiendo ¿Por qué es devuelve 10 para 01/12/2015. Como dije, creo que esto se debe a GMT, pero no estoy seguro. ¿Me estoy perdiendo de algo?
entendido el
@anderstood: cree una hoja de cálculo de demostración, compártala con cualquiera que tenga el enlace solo para ver y publique una nueva pregunta, incluido el enlace a la hoja de cálculo de demostración.
Rubén