javascript time - Google-Tabellendatum in ein JS-Date-Objekt konvertieren?




3 Answers

Ich weiß, dass Sie mit Ihrer Lösung zufrieden sind, aber ich wollte nur meine Beobachtungen dazu hinzufügen, wie Google Apps Script mit "Daten" umgeht, entweder in einer benutzerdefinierten Funktion oder mit getValue () aus einer Zelle abgerufen.

Als Faustregel gilt: Wenn Google Tabellen (die Tabellenkalkulationsanwendung) einen als Datum formatierten Wert bereitstellt (entweder durch automatische Nötigung oder durch das Festlegen des Formats durch den Nutzer), wird dieser Wert automatisch von Google Apps Script als Datumsobjekt gespeichert.

Z.B:

function returnDate(value) {
  return new Date(value);  
}

Wenn Sie 1/1/13 in A1 eingeben und in einer anderen Zelle =returnDate(A1) , wird dasselbe Datum zurückgegeben (wie wenn Sie nur den return value; im Code). Beachten Sie jedoch, was passiert, wenn Sie A1 als "Normal" formatieren (konvertieren Sie es in einen numerischen Wert). Hier wird die "Sheets-Seriennummer" (Anzahl der Tage vom 30.12.1899) durch Google Apps Script in ein Datum-Objekt umgewandelt, in GAS wird sie jedoch als die Anzahl der Millisekunden ab Mitternacht 1/1/1970 "angesehen". .. So erhalten Sie möglicherweise unerwartete Ergebnisse, wenn Sie numerische Werte übergeben, von denen Sie glauben, dass sie für ein Datum repräsentativ sind.

Vergleichen Sie auch:

=returnDate(DATE(2013;1;1))

=returnDate(VALUE("1/1/13"))

=returnDate(DATEVALUE("1/1/13"))

=returnDate("1/1/13")

=returnDate("1/1/2013")

Die beiden letzteren arbeiten ", weil new Date() erfolgreich das Datumsobjekt aus einem gültigen String erstellt, aber beachten Sie, dass Sheets automatisch das aktuelle Jahrhundert erzwingt, während GAS ein zweistelliges Jahr zu den 1900er Jahren erzwingt.

Also IMO, wenn Sie wollten, dass es sich genau so verhält wie in Excel (also "einen numerischen Wert als Seriennummer für ein Datum" betrachten), müssten Sie zuerst testen, ob der übergebene Parameter ein Datumsobjekt (oder " gültigen "Text-String", und wenn nicht, konvertieren Sie mathematisch von "Tage von 30/12/1899" in "Millisekunden von 1/1/1970" und dann new Date() es.

Entschuldigung für den langatmigen Beitrag.

aktuelles anzeigen

Ich habe mich hier im Kreis bewegt ... Ich habe eine Tabelle, die zwei Daten enthält, und ich muss die Anzahl der verstrichenen Jahre zwischen den beiden finden (dh jemandes Alter zu einem bestimmten Zeitpunkt; das ist ein Ersatz für Excel DATEDIF).

Der erste Schritt besteht darin, die Google-Seriennummer in ein JS-Date-Objekt umzuwandeln, aber es scheint kein Date-Konstruktor zu geben, der dies tut. Irgendwelche Ideen?

Vielen Dank.




Mit "Seriennummer" vermute ich, Sie sprechen über eine Unix-Zeit in Sekunden oder Millisekunden aus der Epoche. Sie können einfach das Standard-Javascript-Date-Objekt verwenden:

new Date(value);

Google ist dein Freund von dort. Hier einige Referenzen, die Sie beginnen können:

Mit Javascript können Sie eine einfache Subtraktion mit zwei Datumswerten durchführen und die Zeitdifferenz in ms zurückgeben.

var timeDiffInMS = date2 - date1;

Das sollte alles sein, was Sie brauchen, um es herauszufinden, also lasse ich die Jahreberechnung als eine Übung für den Leser.




Das habe ich getan:

function numberToDate(number){
  var date = new Date(number * 24 * 60 * 60 * 1000);
  date.setFullYear(date.getFullYear() - 70);
  date.setDate(date.getDate() - 1);
  return (date);
}

Das mag ein bisschen schmutzig erscheinen, aber das ist die einzige Lösung, die ich jetzt gefunden habe.




Related