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
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
- Anpassade funktioner i Google Sheets – Google Apps skriptguider
- Jämför två datum med JavaScript – StackOverflow
Kommentarer
- i) Går
date1
,date2
som nummer (typiskt: 54243)? ii) Jag försökte nu extrahera månadendate2
meddate2.getMonth()
men när cellen är01/12/2015
returnerar 10 och 11 för02/12/2015
. Jag antar att det ' s på grund av tidszonen. Arkfunktionenmonth()
ä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.