wiem, że jesteś zadowolony z rozwiązania, gdyż stoi, ale ja po prostu chciałem dodać moje spostrzeżenia, w jaki zajmuje Google Apps Script z „dat”, albo przekazywane w funkcji niestandardowej lub pobierane z komórki z getValue().
Moja zasada jest taka, że jeśli arkuszy (arkusz kalkulacyjny) jest dostarczanie wartości sformatowany jako daty (albo poprzez automatyczną przymusu lub ustawienie formatu użytkownika), a następnie Google Apps Script zostanie automatycznie utrzymać tę wartość jako obiekt daty.
Np
function returnDate(value) {
return new Date(value);
}
Jeśli wpiszesz 1/1/13
w A1, aw innej komórce wywołać =returnDate(A1)
, zwróci tę samą datę (jak to będzie, jeśli po prostu miał return value;
w kodzie). Jednak obserwuj, co się dzieje, gdy formatujesz A1 jako "Normalny" (przekształcasz go na wartość liczbową). W tym miejscu "Numer seryjny arkusza" (liczba dni od 30.12.1999) jest konwertowany na obiekt daty przez Google Apps Script, ale w GAS jest on "traktowany" jako liczba milisekund od północy 1/1/1970 . Możesz więc uzyskać nieoczekiwane wyniki, jeśli podajesz wartości liczbowe, które Twoim zdaniem są reprezentatywne dla danej daty.
porównać również:
=returnDate(DATE(2013;1;1))
=returnDate(VALUE("1/1/13"))
=returnDate(DATEVALUE("1/1/13"))
=returnDate("1/1/13")
=returnDate("1/1/2013")
Dwie ostatnie "prace", ponieważ new Date()
pomyślnie tworzą obiekt daty z prawidłowego ciągu, ale zauważają, że Arkusze automatycznie przymuszają do obecnego wieku, podczas gdy GAS wymusza dwucyfrowy rok do lat 1900.
Tak więc IMO, jeśli chcesz, aby zachowywał się dokładnie tak, jak w Excelu (to znaczy "uwzględnij" wartość liczbową jako numer seryjny dla daty), musisz najpierw sprawdzić, czy przekazany parametr jest datą obiekt (lub "poprawny" ciąg tekstowy), a jeśli nie, przekształć go matematycznie z "dni z 30/12/1899" na "milisekundy od 1/1/1970", a następnie new Date()
.
Przeprosiny za długotrwały post.
Spójrz na wzór w tym arkuszu: https://docs.google.com/spreadsheet/ccc?key=0AqhqY231XZd3cFBiY2VqeWdmNWdaZ1BqVVZ2Q1pxWVE&hl=en#gid=0 – jfriend00
no Go, obawiam się - nie można używać funkcje arkusza kalkulacyjnego w skryptach aplikacji, więc musisz napisać to od podstaw. – EML
Ten ostatni wpis w [tym wątku] (http://productforums.google.com/forum/#!category-topic/apps-script/services/47tY3PTkExo) sugeruje, że możesz pobrać datę arkusza kalkulacyjnego, użyć niektórych narzędzi javascript dla arkusza kalkulacyjnego przekonwertować go do formatu tekstowego, który konstruktor daty javascript może obsłużyć, a następnie przekazać ten ciąg do konstruktora daty javascript. Jeśli poważnie myślisz o Googlowaniu tego problemu, podejrzewam, że znajdziesz odpowiedź. – jfriend00