Me gustaría definir una función personalizada en Google Sheet. Esta función debería hacer algo muy simple, pero no he logrado encontrar cómo hacerlo. Estoy muy confundido con todas las respuestas que leo 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 vista como una cadena . - la biblioteca
Moment
( http://momentjs.com/ )
Al final, ¿cómo puedo ingresar dos fechas (por ejemplo, 31/01/2016
) y, digamos, encontrar el máximo entre las dos y extraer el mes del primero uno?
function myfun(date1,date2) { // month = month of date 1 // return maximum(date1,date2); }
También me interesa si alguien puede explicar los esquemas de cómo tratar las fechas, o indicar una buena referencia.
Comentarios
- Consulte el respuesta de Sergei insas a Cómo leer los valores de tiempo correctos de la hoja de cálculo de Google
- Gracias. ¿No hay otra forma? Parece increíblemente complicado extraer ' s, por ejemplo, ¡el mes de una fecha! Además, debe tener en cuenta la zona horaria … Eso ' es un poco retorcido para operaciones de fecha simple (fija).
- Agregué una respuesta enfocada en el código del caso que se expuso, pero la pregunta es dos amplias (manipulación de fechas). Quizás debería comenzar buscando fragmentos de código JavaScript y cursos en línea.
- @Rub é n Entiendo. No quería hacer una " escribir código para mí " pregunta, así que buscaba información general que realmente no encontré. Sergei insas ' la publicación que indicó es útil.
- Con respecto a la información general sobre JavaScript, consulte developer.mozilla. org / en-US / docs / Web / JavaScript y con respecto a Google Apps Script, consulte developers.google.com/apps-script .
Responder
Obtener y configurar valores de fecha y hora
Siempre que su secuencia de comandos llame a .getValue()
en una celda con formato de fecha, fecha-hora o duración, obtiene un objeto Fecha de JavaScript . Luego, puede aplicar varios métodos enumerados en esa página MDN a este objeto, incluido 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
A la inversa, puede asignar un objeto Date a una celda usando setValue
, y será formateado 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 está en la zona horaria local, que se establece mediante 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 coinciden, tendrá un problema con las marcas de tiempo.
Para comprobar si las zonas horarias concuerdan, 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. A continuación, el script obtiene la fecha y extrae las horas en la hora local del script. Si las zonas horarias están de acuerdo, debería ver 0.0 en el log.
Comentarios
- gracias, trabaja para mí, Una pregunta adicional: Quiero comprobar Un montón de celdas, como rango (2, 1, 30, 20) .getValues; – ¿cómo lograrlo?
Respuesta
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 fechas.
Ejemplo 1: Obtenga la fecha más reciente
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 explicación
En el primer ejemplo, el Math.max El método JavaScript hace el trabajo.
Si orden para obtener una fecha como resu Es decir, se crea un objeto de fecha usando el nuevo Date () .
En el segundo ejemplo, un objeto de fecha se asigna a una variable , entonces se utiliza el método JavaScript getMonth () para obtener el índice del mes.Tenga en cuenta que JavaScript utiliza 0
para el elemento inicial, por lo que 0
es para enero, 1
para febrero y así sucesivamente.
Referencias
- Funciones personalizadas en Hojas de cálculo de Google: Guías de secuencias de comandos de Google Apps
- Comparar dos fechas con JavaScript – StackOverflow
Comentarios
- i) ¿Se pasan
date1
,date2
como números (normalmente: 54243)? ii) Intenté extraer el mes dedate2
usandodate2.getMonth()
pero cuando la celda es01/12/2015
devuelve 10 y 11 para02/12/2015
. Supongo que es ' s debido a la zona horaria. La función de hojamonth()
es mucho más simple. - Google Sheets maneja las fechas como números serializados al igual que JavaScript, pero cada uno tiene una fecha de inicio diferente. Por lo tanto, si desea utilizar 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 las fechas de la hoja de cálculo y funciones de JavaScript para manejar fechas de JavaScript.