Chciałbym zdefiniować niestandardową funkcję w Arkuszu Google. Ta funkcja powinna zrobić coś bardzo prostego, ale nie udało mi się znaleźć, jak to zrobić. Jestem bardzo zdezorientowany wszystkimi odpowiedziami, które przeczytałem, ponieważ nie mogę znaleźć jasnego odniesienia do radzenia sobie z datami w skryptach Google.

Z tego, co rozumiem, podstawowe operacje na datach można wykonać za pomocą:

  • new Date(): z tego, co rozumiem, definiuje obiekt, który ma pewne właściwości. Nie wiem, jak użyć daty komórki i przekonwertować ją jako taki obiekt.
  • Utilities.formatDate(): ma to na celu zmianę formatu daty widzianej jako ciąg .
  • biblioteka Moment ( http://momentjs.com/ )

Na koniec, jak mogę wprowadzić dwie daty (np. 31/01/2016) i, powiedzmy, znaleźć maksimum między nimi i wyodrębnić miesiąc z pierwszego jeden?

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

Interesuje mnie również, czy ktoś może wyjaśnić zarysy obchodzenia się z datami lub wskazać dobrą referencję.

Komentarze

  • Zobacz odpowiedź przez Sergei insas na Jak odczytać poprawne wartości czasu z arkusza kalkulacyjnego Google
  • Dziękuję. Czy nie ma innego wyjścia? Wydaje się, że ' jest niesamowicie skomplikowane do wyodrębnienia, na przykład, miesiąca daty! Poza tym musi uwzględniać strefę czasową … To ' jest nieco przekręcone dla prostych (ustalonych) operacji na datach.
  • Dodałem odpowiedź skoncentrowaną na kod sprawy, która została ujawniona, ale pytanie jest dwa szerokie (manipulacja datą). Może powinieneś zacząć od wyszukania fragmentów kodu JavaScript i kursów online.
  • @Rub é n Rozumiem. Nie chciałem zadawać " pytania dotyczącego pisania kodu ", więc szukałem ogólnych informacji, których tak naprawdę nie znalazłem. Wpis Siergieja insasa ', który wskazałeś, jest pomocny.
  • Ogólne informacje o JavaScript można znaleźć pod adresem developer.mozilla. org / en-US / docs / Web / JavaScript , a na temat Google Apps Script patrz developers.google.com/apps-script .

Odpowiedź

Pobieranie i ustawianie wartości daty i godziny

Za każdym razem, gdy skrypt wywołuje .getValue() w komórce sformatowanej jako data, data-godzina lub czas trwania, otrzymuje obiekt JavaScript Date . Możesz następnie zastosować różne metody wymienione na tej stronie MDN do tego obiektu, w tym getMonth() dla miesiąca. Przykład:

 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 

I na odwrót, możesz przypisać obiekt Date do komórki za pomocą setValue, a będzie to automatycznie sformatowany jako taki.

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

Strefy czasowe

Sygnatura czasowa w Arkuszach Google znajduje się w lokalnej strefie czasowej, którą można ustawić w ustawieniach Plik> Arkusz kalkulacyjny. Skrypt działa również w strefie czasowej, która może być inna i znajduje się we właściwościach Plik> Projekt w edytorze skryptów. Jeśli te strefy czasowe nie są zgodne, będziesz mieć problem z sygnaturami czasowymi.

Aby sprawdzić, czy strefy czasowe są zgodne, możesz albo porównać obie ręcznie, albo zrobić coś takiego:

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

To wprowadza formułę =date(2015,1,1) w komórce A1. Wynikiem będzie 01.01.2015 00:00:00 w strefie czasowej arkusza kalkulacyjnego. Skrypt pobiera wtedy datę i wyodrębnia godziny w czasie lokalnym skryptu. Jeśli strefy czasowe są zgodne, w polu log.

Komentarze

  • dziękuję, pracuj dla mnie, dodatkowe pytanie: chcę sprawdzić kilka komórek, takich jak range (2, 1, 30, 20) .getValues; – jak to osiągnąć?

Odpowiedź

Krótka odpowiedź

Poniżej dwie funkcje niestandardowe są przedstawione jako przykłady tego, jak Arkusze Google i Google Apps Script mogą działać z datami.

Przykład 1: pobierz najnowszą datę

pobierz najnowszą datę

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

Przykład 2: Pobierz miesiąc z najnowszą datą

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

Krótkie wyjaśnienie

W pierwszym przykładzie Math.max metoda JavaScript załatwia sprawę.

Jeśli zamówisz datę w postaci resu lt, obiekt daty jest tworzony za pomocą nowego Date () .

W drugim przykładzie obiekt daty jest przypisywany do zmiennej , to metoda getMonth () jest używana do uzyskania indeksu miesiąca.Pamiętaj, że JavaScript używa 0 jako elementu początkowego, więc 0 dotyczy stycznia 1 na luty itd.

Materiały referencyjne

Komentarze

  • i) Czy date1, date2 są przekazywane jako liczby (zazwyczaj: 54243)? ii) Próbowałem teraz wyodrębnić miesiąc date2 za pomocą date2.getMonth(), ale gdy komórka to 01/12/2015 zwraca 10 i 11 dla 02/12/2015. Myślę, że to ' ze względu na strefę czasową. Funkcja arkusza month() jest o wiele prostsza.
  • Arkusze Google obsługują daty jako numery seryjne tak samo jak JavaScript, ale każdy z nich ma inną datę początkową. Tak więc, jeśli chcesz korzystać z funkcji daty JavaScript, najpierw należy przekonwertować datę arkusza kalkulacyjnego na datę JavaScript. Jak już zauważyłeś, łatwiejszą ścieżką jest użycie funkcji arkusza kalkulacyjnego do obsługi dat w arkuszach kalkulacyjnych i funkcji JavaScript do obsługi dat JavaScript.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *