32 Stimmen

Django Datum zu javascript an der Vorlage

Was wäre der einfache Weg, wie unten zu erreichen? selected_date kommt aus django-Kontext als Python Datum:

<script type="text/javascript">
    var selected_year = {{ selected_date|date:"Y" }}
    var selected_month = {{ selected_date|date:"m" }} - 1;
    var selected_day = {{ selected_date|date:"d"}}
    var selected_date = new Date(selected_year, selected_month, selected_day);
    alert(selected_date);
</script>

73voto

Exelian Punkte 5621

Ich habe viel Erfolg mit der Funktion isoformat in Python gehabt:

var selected_date = new Date("{{ selected_date.isoformat }}")

13voto

rych Punkte 1117

Die akzeptierte Antwort kann je nach Gebietsschema ein falsches Datum ergeben.

In der FF-Konsole:

>>> n = new Date('2011-01-01');
Date {Fri Dec 31 2010 16:00:00 GMT-0800 (PST)}

Es ist daher vorzuziehen, dem Date-Konstruktor die Ganzzahlen Y,m,d zu übergeben.

Ich verwende einen Vorlagenfilter, um den Datumskonstruktor zu erzeugen:

@register.filter(name='jsdate')
def jsdate(d):
    """formats a python date into a js Date() constructor.
    """
    try:
        return "new Date({0},{1},{2})".format(d.year, d.month - 1, d.day)
    except AttributeError:
        return 'undefined'

8voto

Pamela Fox Punkte 559

Ich habe dies verwendet und festgestellt, dass Android beim Parsen "Ungültiges Datum" zurückgibt - ich glaube, es ist strenger als das Desktop-Webkit. Ich bin stattdessen mit der folgenden, die zu arbeiten scheint:

new Date('{{ talk.start_datetime|date:"D, d M Y H:i:s"}}'),

Mehr über JS date parsing finden Sie hier: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse

1voto

Agent Francis Punkte 11

Wenn Sie Ihr Datum in JS verwenden, müssen Sie den Filter escapejs einsetzen.

<script type="text/javascript">
    var selected_date = new Date({{ selected_date|escapejs }});
    alert(selected_date);
</script>

https://docs.djangoproject.com/en/dev/ref/templates/builtins/#escapejs

0voto

Sven Rojek Punkte 5030

Da andere Ansätze die Zeitzone nicht berücksichtigen, können Sie einfach die Djangos eingebauter Template-Tag Breitenverhältnis um die Sekunden von Python in Millisekunden von Javascript zu konvertieren.

new Date({% widthratio selected_date|date:"U" 1 1000 %}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X