2016-09-21 5 views
0

Есть проблема ...Джанго Ajax дата ответа и формат времени

Я использую Django, SQLite, jquery и AJAX.

Проблема в том, что когда я получаю дату и время из своей базы данных, это выглядит странно.

Есть ли способ отобразить его нормально, как dd/mm/yyyy HH:MM?

Modeles.py

class QueryHistory(models.Model) : 
userID = models.CharField(max_length=100) 
date = models.DateTimeField(auto_now_add=True, blank=True) 

View.py

queries_list = serializers.serialize(
      'json', 
      (QueryHistory.objects.filter(
       userID = request.session['user_id'] 
       ).order_by('-id')[:5]) 
      ) 
return HttpResponse(json.dumps(queries_list), content_type="application/json") 

Js.js

success : function(response) { 
var queries_list = jQuery.parseJSON(response); 
console.log(response); 
} 

Результат: 2016-09-21T06: 43: 26.693Z

Должно быть: 21/09/2016 06:43

ответ

0

Я пришел с моим собственным решением.

для отображения даты в собственном формате, вам просто нужно создать переменную new Date

var date = new Date(); 

после этого мы разбираем даты нашего ответа на эту переменную, поэтому изменить его на:

var date = new Date(ourAjaxResponse.date); 

теперь, если вы попытаетесь отобразить его, вы получите стандартный формат даты JavaScript:

Wed Mar 25 2015 13:00:00 GMT + 1300 (Новая Зеландия())

Благодаря JavaScript у него есть несколько методов, которые позволяют нам получать Часы, Минуты и все остальное, что нам нужно, чтобы показать дату, поскольку мы пожелает.

var date = new Date(ourAjaxResponse.date); 
    var day = date.getDate(); 
    var mnth = date.getMonth(); 
    var year = date.getFullYear(); 
    var hrs = date.getHours(); 
    var mnts = date.getMinutes(); 

var mnths будет число от 1 до 12, так что вы можете создать массив со списком месяцев в вашем родном языке

var monthNames = [ 
    "Января", "Февраля", "Марта", 
    "Апреля", "Мая", "Июня", "Июля", 
    "Августа", "Сентября", "Октября", 
    "Ноября", "Декабря" 
]; // For Example: in Russian 

var monthNames = [ 
    "January", "February", "March", 
    "April", "May", "June", "July", 
    "August", "September", "October", 
    "November", "December" 
]; //or in English 

Конечный результат:

У меня есть функция, получает переменную дату:

function get_date(date){ 
    var date = new Date(date); 
    var day = date.getDate(); 
    var monthIndex = date.getMonth(); 
    var year = date.getFullYear(); 
    var hours = addZero(date.getHours());//addZero() function described below 
    var minutes = addZero(date.getMinutes()); 

    return "<i class='fa fa-calendar-o' aria-hidden='true'></i> " + day + " " + monthNames[monthIndex] + " " + year + " <i class='fa fa-clock-o' aria-hidden='true'></i> " + hours + ":" + minutes; 
} 

Еще одна небольшая функция для добавления нуля в передней части часов и минут, потому что, если они меньше, чем 10, то результат будет

8:21 или 19: 8, а не 08:21 или 19:08

function addZero(i) { 
    if (i < 10) { 
     i = "0" + i; 
    } 

    return i; 
} 

Теперь, где бы вы хотите в своем коде вы можете вызвать эту функцию и разобрать дату на него с вашего сервера или каких-либо других источников, и вы всегда получите тот же результат:

console.log(get_date(ourAjaxResponse.date)); 

22 сентября 2016 1:16

если изменить return в функции get_date() на:

return day + "/" + monthIndex + "/" + year + " " + hours + ":" + minutes; 

22/09/2016 1:16

1

Это не странно, это ISO 8601, и это не очень хорошая идея изменить его. Но вы можете, определяя свой собственный кодировщик:

import json 
from datetime import dateteime 

from django.forms.models import model_to_dict 
from django.core.serializers.json import DjangoJSONEncoder 

class MyEncoder(DjangoJSONEncoder): 
    def default(self, obj): 
     if isinstance(obj, date): 
      return obj.strftime('%d.%m.%Y') 
     return super(MyEncoder, self).default(obj) 


json.dumps([model_to_dict(o) for o in QueryHistory.objects.all()], cls=MyEncoder) 

Или вашим собственным сериализатором:

import json 
from datetime import dateteime 

from django.core.serializers.python import Serializer 

class MySerializer(Serializer): 
    def handle_field(self, obj, field): 
     value = field.value_from_object(obj) 
     if isinstance(value, date): 
      self._current['date'] = value.strftime('%d.%m.%Y') 
     else: 
      super(MySerializer, self).handle_field(obj, field) 


serializer = MySerializer() 
queries_list = serializer.serialize(QueryHistory.objects.all()) 
json.dumps(queries_list) 
Смежные вопросы