Jag vill definiera en anpassad funktion i Google Sheet. Denna funktion ska göra något väldigt enkelt, men jag har inte lyckats hitta hur man gör det. Jag är väldigt förvirrad med alla svaren jag läser eftersom jag inte kan hitta en tydlig referens om hur jag hanterar datum i google-skript.

Från vad jag förstår kan man göra grundläggande datummanipulationer med:

  • new Date(): från vad jag förstår definierar det ett objekt som har vissa egenskaper. Jag vet inte hur man använder datumet för en cell och konverterar det som ett sådant objekt.
  • Utilities.formatDate(): detta är för att ändra formatet på datumet som en sträng .
  • biblioteket Moment ( http://momentjs.com/ )

I slutändan, hur kan jag ange två datum (t.ex. 31/01/2016) och, säg, hitta det maximala mellan de två och extrahera månaden för den första en?

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

Jag är också intresserad om någon kan förklara konturerna för att hantera datum, eller ange en bra referens.

Kommentarer

  • Se svara av Sergei insas till Hur man läser rätt tidsvärden från Googles kalkylark
  • Tack. Finns det inget annat sätt? Det ' verkar otroligt komplicerat att extrahera, till exempel en månads datum! Dessutom måste det ta hänsyn till tidszonen … Att ' är lite vriden för enkla (fasta) datoperationer.
  • Jag lade till ett svar fokuserat på ärendekoden som avslöjades, men frågan är två breda (datummanipulation). Du kanske börja med att leta efter JavaScript-kodavsnitt och onlinekurser.
  • @Rub é n Jag förstår. Jag ville inte ställa en " skrivkod åt mig " så jag letade efter allmän information som jag inte hittade. Sergei insas ' s inlägg som du angav är användbart.
  • När det gäller allmän information om JavaScript, se developer.mozilla. org / en-US / docs / Web / JavaScript och angående Google Apps Script se developers.google.com/apps-script .

Svar

Hämta och ställa in datetime-värden

När ditt skript ringer .getValue() på en cell formaterad som ett datum, datum eller tid, får det ett JavaScript-datumobjekt . Du kan sedan använda olika metoder som listas på den MDN-sidan på det här objektet, inklusive getMonth() för månaden. Exempel:

 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 

Omvänt kan du tilldela ett datumobjekt till en cell med setValue, så blir det automatiskt formaterad som sådan.

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

Tidszoner

Tidsstämpeln i Google Sheets ligger i lokal tidszon, som ställs in via Arkiv> Kalkylarkinställningar. Skriptet fungerar också inom en tidszon, som kan vara annorlunda och finns under Arkiv> Projektegenskaper i skriptredigeraren. Om dessa tidszoner inte håller med kommer du att ha problem med tidsstämplar.

För att kontrollera om tidszonerna överensstämmer kan du antingen jämföra båda manuellt eller göra något så här:

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

Detta matar in formeln =date(2015,1,1) i cellen A1. Resultatet blir 01-01-2015 00:00:00 i kalkylbladets tidszon. Skriptet får sedan datumet och extraherar timmarna i lokal tid för skriptet. Om tidszonerna överensstämmer bör du se 0,0 i logg.

Kommentarer

  • tack, arbeta för mig, En extra fråga: Jag vill kontrollera En massa celler, som intervall (2, 1, 30, 20) .getValues; – hur ska man uppnå det?

Svar

Kort svar

Nedan presenteras två anpassade funktioner som exempel på hur Google Sheets och Google Apps Script kan fungera med datum.

Exempel 1: Få det senaste datumet

få det senaste datumet

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

Exempel 2: Få månaden för det senaste datumet

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

Kort förklaring

I det första exemplet Math.max JavaScript-metoden gör jobbet.

Om för att få ett datum som resu Det skapas ett datumobjekt med nytt Datum () .

I det andra exemplet tilldelas ett datumobjekt till en variabel , sedan används getMonth () JavaScript-metoden för att få månadsindex.Tänk på att JavaScript använder 0 för startelementet så 0 är för januari, 1 för februari och så vidare.

Referenser

Kommentarer

  • i) Går date1, date2 som nummer (typiskt: 54243)? ii) Jag försökte nu extrahera månaden date2 med date2.getMonth() men när cellen är 01/12/2015 returnerar 10 och 11 för 02/12/2015. Jag antar att det ' s på grund av tidszonen. Arkfunktionen month() är så mycket enklare.
  • Google Sheets hanterar datum som serienumren samma som JavaScript men alla har olika startdatum. Så om du vill använda JavaScript-datumfunktioner bör du först konvertera kalkyldatumet till ett JavaScript-datum. Som du redan har märkt är det enklare att använda kalkylarkfunktioner för att hantera kalkyldatum och JavaScript-funktioner för att hantera JavaScript-datum.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *