簡體   English   中英

Django Ajax響應日期和時間格式

[英]Django Ajax response date and time format

有問題...

我使用DjangoSQLitejqueryAJAX

問題是,當我從數據庫中獲取日期和時間時,它看起來很奇怪。

有什么辦法可以正常顯示它,如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

這並不奇怪,它是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)

我想出了自己的解決方案。

以您自己的格式顯示日期,您只需創建一個變量new Date

var date = new Date();

之后,我們從響應中解析該變量的日期,因此將其更改為:

var date = new Date(ourAjaxResponse.date);

現在,如果您嘗試顯示它,您將獲得標准的JavaScript日期格式:

2015年3月25日,星期三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));

2016年9月22日01:16

如果更改以下函數的get_date() return

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

22/09/2016 01:16

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM