Ответ 1
У меня был большой успех с функцией isoformat в python:
var selected_date = new Date("{{ selected_date.isoformat }}")
Каким будет простой способ достижения такого ниже? selected_date происходит из контекста django как дата python:
<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>
У меня был большой успех с функцией isoformat в python:
var selected_date = new Date("{{ selected_date.isoformat }}")
Принятый ответ может генерировать неверную дату в зависимости от языка.
В консоли FF:
>>> n = new Date('2011-01-01');
Date {Fri Dec 31 2010 16:00:00 GMT-0800 (PST)}
Поэтому предпочтительнее передавать Y, m, d целые числа в конструктор Date.
Я использую фильтр шаблонов для создания конструктора даты:
@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'
Я использовал это и понял, что Android возвращает "Недействительная дата" при разборе его - я думаю, что он более строг, чем настольный Webkit. Вместо этого я использую следующее, которое, похоже, работает:
new Date('{{ talk.start_datetime|date:"D, d M Y H:i:s"}}'),
Подробнее о синтаксическом анализе JS можно узнать здесь: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse
Если вы используете свою дату в JS, вам нужно использовать фильтр escapejs.
<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
Поскольку другие подходы не осведомлены о часовом поясе, вы можете просто использовать встроенный шаблон шаблона Django widthratio. конвертировать секунды python в миллисекунды javascript.
new Date({% widthratio selected_date|date:"U" 1 1000 %}