Manipulação básica de datas no script do Google


11

Gostaria de definir uma função personalizada no Google Sheet. Essa função deve fazer algo muito simples, mas ainda não consegui descobrir como fazê-lo. Estou muito confuso com todas as respostas que li, porque não consigo encontrar uma referência clara sobre como lidar com datas nos scripts do google.

Pelo que entendi, manipulações básicas de datas podem ser feitas com:

  • new Date(): pelo que entendi, define um objeto que possui algumas propriedades. Não sei como usar a data de uma célula e convertê-la como um objeto.
  • Utilities.formatDate(): isso é para alterar o formato da data vista como uma sequência .
  • a biblioteca Moment( http://momentjs.com/ )

No final, como posso inserir duas datas (por exemplo 31/01/2016) e, digamos, encontrar o máximo entre as duas e extrair o mês da primeira?

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

Também estou interessado se alguém puder explicar os esboços de como lidar com datas ou indicar uma boa referência.



Obrigado. Não há outra maneira? Parece incrivelmente complicado extrair, por exemplo, o mês de uma data! Além disso, ele deve levar em consideração o fuso horário ... Isso é um pouco complicado para operações simples (fixas) de data.
anderstood

Eu adicionei uma resposta focada no código do caso que foi exposto, mas a pergunta é duas ampla (manipulação de data). Talvez você deva começar procurando trechos de código JavaScript e cursos on-line.
Rubén

@ Rubén eu entendo. Eu não queria fazer uma pergunta "escrever código para mim", por isso estava procurando informações gerais que eu realmente não encontrei. A publicação de Sergei insas que você indicou é útil.
anderstood

Sobre informações gerais sobre JavaScript, consulte developer.mozilla.org/en-US/docs/Web/JavaScript e sobre o Script do Google Apps, consulte developers.google.com/apps-script .
Rubén

Respostas:


14

Obtendo e configurando valores de data e hora

Sempre que seu script chama .getValue()uma célula formatada como data, data e hora ou duração, ele obtém um objeto Data JavaScript . Você pode aplicar vários métodos listados nessa página MDN a esse objeto, inclusive getMonth()para o mês. Exemplo:

  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 outro lado, você pode atribuir um objeto Date a uma célula usando setValue, e ele será automaticamente formatado como tal.

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

Fusos horários

O registro de data e hora no Planilhas Google está no fuso horário local, definido em Arquivo> Configurações da planilha. O script também opera em um fuso horário, que pode ser diferente e é encontrado em Arquivo> Propriedades do projeto no editor de script. Se esses fusos horários não concordarem, você terá um problema com os carimbos de data e hora.

Para verificar se os fusos horários estão de acordo, você pode comparar os dois manualmente ou fazer algo assim:

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

Isso insere a fórmula =date(2015,1,1)na célula A1. O resultado será 01-01-2015 00:00:00 no fuso horário da planilha. O script obtém a data e extrai as horas no horário local do script. Se os fusos horários concordarem, você deverá ver 0,0 no log.


4

Resposta curta

Abaixo, duas funções personalizadas são apresentadas como exemplos de como o Planilhas Google e o Script do Google Apps podem funcionar com datas.

Exemplo 1: obter a data mais recente

obter a data mais recente

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

Exemplo 2: obter o mês da data mais recente

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

Breve explicação

No primeiro exemplo, o método JavaScript Math.max faz o trabalho.

Se você deseja obter uma data como resultado, um objeto de data é criado usando o novo Date () .

No segundo exemplo, um objeto de data é atribuído a uma variável, o método JavaScript getMonth () é usado para obter o índice do mês. Lembre-se de que o JavaScript usado 0para o elemento inicial 0é o mesmo para janeiro, 1fevereiro e assim por diante.

Referências


i) está date1, date2passados como números (normalmente: 54243)? ii) Agora tentei extrair o mês de date2uso, date2.getMonth()mas quando a célula está 01/12/2015ela retorna 10 e 11 para 02/12/2015. Eu acho que é por causa do fuso horário. A função da folha month()é muito mais simples.
anderstood

O Planilhas Google manipula datas como números de série iguais a JavaScript, mas cada uma tem uma data de início diferente. Portanto, se você quiser usar as funções de data do JavaScript, primeiro converta a data da planilha em uma data do JavaScript. Como você já notou, o caminho mais fácil é usar funções de planilha para lidar com datas da planilha e funções JavaScript para lidar com datas do JavaScript.
Rubén

@anderstood: eu adicionei um segundo exemplo.
Rubén

Mais uma vez obrigado. Em relação ao segundo exemplo, como eu havia escrito, quando o máximo é 01/12/2015 myfunction2retorna 10 e quando o máximo é 02/12/2015, ele retorna 11. Embora eu esteja bem com o 11, não entendo Por que retorna 10 para 01/12/2015. Como eu disse, acredito que isso se deva à GMT, mas não tenho certeza. Estou esquecendo de algo?
anderstood

@anderstood: crie uma planilha de demonstração e compartilhe-a com qualquer pessoa com o link apenas para visualização e publique uma nova pergunta, incluindo o link para a planilha de demonstração.
Rubén
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.