Ik wil een aangepaste functie definiëren in Google Sheet. Deze functie zou iets heel eenvoudigs moeten doen, maar ik ben er niet in geslaagd om te ontdekken hoe ik het moet doen. Ik ben erg in de war met alle antwoorden die ik lees, omdat ik “geen duidelijke referentie kan vinden over het omgaan met datums in Google-scripts.
Voor zover ik begrijp, kunnen basisdatummanipulaties worden gedaan met:
-
new Date()
: voor zover ik begrijp, definieert het een object dat enkele eigenschappen heeft. Ik weet niet hoe ik de datum van een cel moet gebruiken en deze moet converteren als een dergelijk object. -
Utilities.formatDate()
: dit is om het formaat van de datum te wijzigen, gezien als een string . - de bibliotheek
Moment
( http://momentjs.com/ )
Hoe kan ik uiteindelijk twee datums invoeren (bijv. 31/01/2016
) en bijvoorbeeld het maximum tussen de twee vinden en de maand van de eerste one?
function myfun(date1,date2) { // month = month of date 1 // return maximum(date1,date2); }
Ik ben ook geïnteresseerd als iemand de hoofdlijnen van het omgaan met datums kan uitleggen, of een goede referentie kan geven.
Opmerkingen
- Zie de antwoord door Sergei insas aan Hoe de juiste tijdwaarden te lezen van Google Spreadsheet
- Bedankt. Is er geen andere manier? Het ' s lijkt ongelooflijk ingewikkeld om bijvoorbeeld de maand van een datum te extraheren! Bovendien moet het rekening houden met de tijdzone … Dat ' is een beetje verdraaid voor eenvoudige (vaste) datumbewerkingen.
- Ik heb een antwoord toegevoegd gericht op de code van de zaak die werd blootgesteld, maar de vraag is twee breed (datummanipulatie). Misschien moet je beginnen met het zoeken naar JavaScript-codefragmenten en online cursussen.
- @Rub é n Ik begrijp het. Ik wilde geen " schrijfcode voor mij " vraag stellen, dus zocht ik naar algemene informatie die ik niet echt kon vinden. Sergei insas ' s door jou aangegeven bericht is nuttig.
- Zie voor algemene informatie over JavaScript developer.mozilla. org / en-US / docs / Web / JavaScript en met betrekking tot Google Apps Script, zie developers.google.com/apps-script .
Answer
Verkrijgen en instellen van datetime-waarden
Wanneer uw script .getValue()
op een cel die is opgemaakt als een datum, datum-tijd of duur, krijgt deze een JavaScript Date-object . U kunt vervolgens verschillende methoden toepassen die op die MDN-pagina worden vermeld op dit object, inclusief getMonth()
voor de maand. Voorbeeld:
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
Omgekeerd kunt u een Date-object aan een cel toewijzen met setValue
, en het zal zijn automatisch als zodanig opgemaakt.
sheet.getRange("B2").setValue(new Date()); // current timestamp
Tijdzones
De tijdstempel in Google Spreadsheets is in de lokale tijdzone, die wordt ingesteld via Bestand> Spreadsheetinstellingen. Het script werkt ook binnen een tijdzone, die kan verschillen en te vinden is onder Bestand> Projecteigenschappen in de scripteditor. Als deze tijdzones het niet eens zijn, heb je een probleem met tijdstempels.
Om te controleren of de tijdzones overeenkomen, kunt u beide handmatig vergelijken, of zoiets als dit doen:
var sheet = SpreadsheetApp.getActiveSheet(); sheet.getRange("A1").setFormula("=date(2015,1,1)"); Logger.log(sheet.getRange("A1").getValue().getHours());
Dit voert de formule in =date(2015,1,1)
in cel A1. Het resultaat is 2015-01-01 00:00:00 in de tijdzone van de spreadsheet. Het script haalt dan de datum op en haalt uren uit de lokale tijd van het script. Als de tijdzones overeenkomen, zou je 0.0 moeten zien in de log.
Opmerkingen
- bedankt, werk voor mij, een aanvullende vraag: ik wil een aantal cellen controleren, zoals bereik (2, 1, 30, 20) .getValues; – hoe bereik je dat?
Antwoord
Kort antwoord
Hieronder worden twee aangepaste functies gepresenteerd als voorbeelden van hoe Google Spreadsheets en Google Apps Script zouden kunnen werken met datums.
Voorbeeld 1: haal de nieuwste datum op
function myFunction(date1,date2) { return new Date(Math.max(date1,date2)) }
Voorbeeld 2: Haal de maand van de nieuwste datum op
function myFunction2(date1,date2) { var date = new Date(Math.max(date1,date2)); return date.getMonth(); }
Korte uitleg
In het eerste voorbeeld de Math.max JavaScript-methode doet het werk.
Als u een datum als resu lt, een date-object wordt gemaakt met behulp van new Date () .
In het tweede voorbeeld wordt een date-object toegewezen aan een variabele , dan wordt de JavaScript-methode getMonth () gebruikt om de maandindex op te halen.Houd er rekening mee dat JavaScript 0
gebruikt voor het startelement, dus 0
is voor januari, 1
voor februari enzovoort.
Referenties
- Aangepaste functies in Google Spreadsheets – Google Apps-scriptgidsen
- Vergelijk twee datums met JavaScript – StackOverflow
Reacties
- i) Worden
date1
,date2
doorgegeven als getallen (doorgaans: 54243)? ii) Ik heb nu geprobeerd de maanddate2
te extraheren metdate2.getMonth()
, maar wanneer de cel01/12/2015
het retourneert 10 en 11 voor02/12/2015
. Ik denk dat het ' s is vanwege de tijdzone. De bladfunctiemonth()
is zoveel eenvoudiger. - Google Spreadsheets behandelt datums als geserialiseerde nummers, hetzelfde als JavaScript, maar elk heeft een andere startdatum. Dus als u JavaScript-datumfuncties wilt gebruiken, moet u eerst de spreadsheetdatum naar een JavaScript-datum converteren. Zoals je al hebt opgemerkt, is het gemakkelijker om spreadsheetfuncties te gebruiken om spreadsheetdatums af te handelen en JavaScript-functies om JavaScript-datums te verwerken.