Egyéni függvényt szeretnék meghatározni a Google Sheet-ben. Ennek a funkciónak valami nagyon egyszerű dolgot kellene tennie, mégsem sikerült megtalálni, hogyan kell csinálni. Nagyon összetévesztem az összes választ, amit olvastam, mert nem találok egyértelmű utalást a dátumokkal való foglalkozásra a google szkriptekben.
Megértésem szerint az alapvető dátummanipulációk a következőkkel végezhetők el:
-
new Date()
: amit megértek, meghatároz egy objektumot, amelynek vannak bizonyos tulajdonságai. Nem tudom, hogyan kell használni a cella dátumát és átalakítani mint ilyen objektum. -
Utilities.formatDate()
: ez a karakterlánc nak tekintett dátum formátumának megváltoztatására szolgál. - a könyvtár
Moment
( http://momentjs.com/ )
Végül hogyan adhatok meg két dátumot (pl. 31/01/2016
), és mondjuk megtalálhatom a kettő között a maximumot, és kivonhatom az első hónapját egyet?
function myfun(date1,date2) { // month = month of date 1 // return maximum(date1,date2); }
Az is érdekel, hogy valaki meg tudja-e magyarázni a dátumok kezelésének vázlatát, vagy jó utalást tud-e megadni.
Megjegyzések
- Lásd: válasz : Szergej insas a következőre: A helyes időértékek olvasása a Google Táblázatból
- Köszönöm. Nincs más út? ' hihetetlenül bonyolultnak tűnik például egy dátum hónapjának kivonása! Ráadásul figyelembe kell vennie az időzónát … Ez ' az egyszerű (rögzített) dátumú műveletekhez csavart bit.
- A következőre összpontosított választ adtam hozzá: a kitett eset kódja, de a kérdés két tág kérdés (dátummanipuláció). Talán el kell indítania a JavaScript kódrészleteket és az online tanfolyamokat.
- @Rub é n Értem. Nem akartam " írási kódot feltenni nekem ", ezért általános információkat kerestem, amelyeket nem igazán találtam. Szergej insas ' az Ön által megjelölt bejegyzés hasznos.
- A JavaScript általános információival kapcsolatban lásd: developer.mozilla. org / en-US / docs / Web / JavaScript és a Google Apps Script-et illetően lásd: developers.google.com/apps-script .
Válasz
A dátumidő értékeinek beolvasása és beállítása
Valahányszor a parancsfájl hívja a .getValue()
dátumként, dátum-időként vagy időtartamként formázott cellán JavaScript Date objektumot kap . Ezután az adott MDN oldalon felsorolt különféle módszereket alkalmazhatja erre az objektumra, ideértve a hónap getMonth()
-t is. Példa:
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
Ezzel szemben a setValue
használatával hozzárendelhet egy Dátum objektumot egy cellához, és automatikusan formázva.
sheet.getRange("B2").setValue(new Date()); // current timestamp
Időzónák
A Google Táblázatok időbélyegzője helyi időzónában van, amelyet a Fájl> Táblázat beállításai menüpontban állíthat be. A szkript időzónán belül is működik, amely eltérő lehet , és a Fájl> Projekt tulajdonságai alatt található a szkriptszerkesztőben. Ha ezek az időzónák nem értenek egyet, akkor problémája lesz az időbélyegekkel.
Annak ellenőrzéséhez, hogy az időzónák megegyeznek-e, manuálisan összehasonlíthatja mindkettőt, vagy tehet ilyet:
var sheet = SpreadsheetApp.getActiveSheet(); sheet.getRange("A1").setFormula("=date(2015,1,1)"); Logger.log(sheet.getRange("A1").getValue().getHours());
Ez adja meg a képletet =date(2015,1,1)
az A1 cellában. Az eredmény 2015-01-01 00:00:00 lesz a táblázat időzónájában. Ezután a szkript megkapja a dátumot és kivonja az órákat a szkript helyi idejéből. Ha az időzónák megegyeznek, akkor a 0.0-t kell látnia a napló.
Megjegyzések
- köszönöm, dolgozzon nekem, egy további kérdés: szeretnék ellenőrizni Egy csomó cellát, például tartományt (2, 1, 30, 20) .getValues; – hogyan lehet ezt elérni?
Válasz
Rövid válasz
Az alábbiakban két egyéni függvényt mutatunk be példaként arra, hogy a Google Táblázatok és a Google Apps Script hogyan működhet a dátumokkal.
1. példa: Szerezze be a legújabb dátumot
function myFunction(date1,date2) { return new Date(Math.max(date1,date2)) }
2. példa: Szerezd meg a legújabb dátum hónapját
function myFunction2(date1,date2) { var date = new Date(Math.max(date1,date2)); return date.getMonth(); }
Rövid magyarázat
Az első példában a Math.max JavaScript módszerrel végezhető el a feladat lt, egy dátumobjektum új dátum () használatával jön létre.
A második példában dátumobjektumot rendelünk egy változóhoz , akkor a getMonth () JavaScript metódust használják a hónap indexének lekérésére.Ne feledje, hogy a JavaScript a 0
elemet használja a kiinduló elemhez, tehát 0
január, 1
februárra és így tovább.
Hivatkozások
- Egyéni funkciók a Google Táblázatokban – Google Apps Script Guides
- Két dátum összehasonlítása a JavaScript-szel – StackOverflow
Megjegyzések
- i)
date1
,date2
átadják-e számként (általában: 54243)? ii) Most megpróbáltam kivonni adate2
hónapot adate2.getMonth()
használatával, de amikor a cella01/12/2015
értéke 10 és 11 a02/12/2015
esetén. Azt hiszem, ' s az időzóna miatt. Amonth()
lapfunkció sokkal egyszerűbb. - A Google Táblázatok sorszámozott dátumként kezeli a dátumokat, ugyanúgy, mint a JavaScript, de mindegyiknek más a kezdési dátuma. Tehát, ha JavaScript dátumfüggvényeket szeretne használni, először konvertálja a táblázat dátumát JavaScript dátumra. Amint már észrevette, a könnyebb út a táblázatfüggvények használata a táblázat dátumainak kezelésére, a JavaScript függvények kezelése a JavaScript dátumok kezelésére.