Как получить требуемый формат даты в jQuery DataTable? - PullRequest
0 голосов
/ 27 марта 2020

Я написал следующий код, куда данные загружаются на Scroll:

 $('#tblDiscount').DataTable({
        serverSide: true, // true
        ordering: false, // false
        searching: false, // false
        lengthChange: false, // pagesize
        footer: true,
        columnDefs: [{ targets: [14, 16, 17], className: 'dt-body-right' }, { targets: [15], className: 'dt-body-center' },
        {
            targets: [9,13],
            render:$.fn.dataTable.render.moment()
            }
        ],
        //searching: true,
        dom: 'frBtip',
        async: false,
        ajax: function (data, callback, settings) {

            var skip = 0;
            if (data.start == 0)
                skip = 0;
            else
                skip = data.start + 50; //data.length;

            $.ajax({
                url: '/Utility/_GetTestData',
                data: {
                    State: stat,
                    Zone: zon,
                    Amrac: amr,
                    Store: store,
                    Hierarchy: hirarcy,
                    DiscountType: discountType,
                    Itemcategorycode: itemcatCode,
                    Itemcode: code,
                    Period: period,
                    OfferNo: offernumber,
                    skipRows: skip,
                    limit: 50 //data.length
                },
                datatype: "Json",

                async: false,
                success: function (data) {
                    //var item = $.parseJSON(data);



                    countRecords = data.recordCount;
                    totalOfDiscount = data.sumDiscount;
                    $("#tblDiscount_paginate").hide();

                    for (var i = 0; i < data.res.length; i++) {

                        if (hirarcy == "I") {
                            //out.push([i + '-1', i + '-2', i + '-3', i + '-4', i + '-5', i + '-6', i + '-7', i + '-8', i + '-9', i + '-10', i + '-11', i + '-12', i + '-13', i + '-14', i + '-15', i + '-16', i + '-17', i + '-18', i + '-19', i + '-20', i+'-21', i+'-22']);
                            out.push([data.res[i].state, data.res[i].zone, /*data.res[i].amro, data.res[i].rac,*/
                                data.res[i].Depot, /*data.res[i].type,*/ data.res[i].StoreCode, data.res[i].OfferType, data.res[i].DiscountType,
                                data.res[i].OfferNo, data.res[i].Description, data.res[i].ReceiptNo, data.res[i].TransDate,
                            data.res[i].Category, data.res[i].ItemCode, data.res[i].LotNo, data.res[i].ExpirationDate,
                            data.res[i].Quantity, data.res[i].FreeItem, data.res[i].NetValue, data.res[i].Discount/*, data.res[i].CrossReference*/]);
                            //out.push([data[i].state, data[i].zone]);
                        }
                        else if (hirarcy == "S") {
                            out.push([data.res[i].state, data.res[i].zone, data.res[i].amro, /*data.res[i].rac,*/
                           /* data.res[i].Depot*//*, data.res[i].type,*/ data.res[i].StoreCode, data.res[i].OfferType, data.res[i].DiscountType,
                                data.res[i].OfferNo, data.res[i].Description, data.res[i].ReceiptNo, data.res[i].TransDate,
                            data.res[i].Category, data.res[i].ItemCode, data.res[i].LotNo, data.res[i].ExpirationDate,
                            data.res[i].Quantity, data.res[i].FreeItem, data.res[i].NetValue, data.res[i].Discount/*, data.res[i].CrossReference*/]);
                        }
                        else if (hirarcy=="F") {
                                out.push([data.res[i].state, data.res[i].zone,/* data.res[i].amro,*/ data.res[i].rac,
                               /* data.res[i].Depot,*/ /*data.res[i].type,*/ data.res[i].StoreCode, data.res[i].OfferType, data.res[i].DiscountType,
                                data.res[i].OfferNo, data.res[i].Description, data.res[i].ReceiptNo, data.res[i].TransDate,
                                data.res[i].Category, data.res[i].ItemCode, data.res[i].LotNo, data.res[i].ExpirationDate,
                                data.res[i].Quantity, data.res[i].FreeItem, data.res[i].NetValue, data.res[i].Discount/*,data.res[i].CrossReference*/]);
                             }
                    }

                    //console.log(out.length);
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    if (jqXHR.status == 500) {
                        alert('Internal error: ' + jqXHR.responseText);
                    } else {
                        alert('Please revise your FILTER selection as the \n' +
                            'information You are fetching has more than 1 lac Records');
                        location.reload(true);
                    }
                }
            });

            setTimeout(function () {
                callback({
                    draw: data.draw,
                    data: out,
                    recordsTotal: parseInt(countRecords),
                    recordsFiltered: parseInt(countRecords)
                });
            }, 50); // scroll request size
        }, //end of ajax call for controller
            scrollY: 500, // div height
            scrollX: true,
            scroller: {
                loadingIndicator: true
            },

             footerCallback: function (row, data, start, end, display) {
                 var api = this.api()
                 var json = api.ajax.json();
                 $(api.column(17).footer()).html(totalOfDiscount);



                         var api = this.api(), data;

                     // Remove the formatting to get integer data for summation
                         var intVal = function (i) {
                             return typeof i === 'string' ?
                                 i.replace(/[\$,]/g, '') * 1 :
                                 typeof i === 'number' ?
                                     i : 0;
                         };

                     // Total over all pages
                         total = api
                             .column(17)
                             .data()
                             .reduce(function (a, b) {
                                 return intVal(a) + intVal(b);
                             }, 0);

                         // Total over this page
                         pageTotal = api
                             .column(17, { page: 'current' })
                             .data()
                             .reduce(function (a, b) {
                                 return intVal(a) + intVal(b);
                             }, 0);

                 //// Update footer
                 $(api.column(17).footer()).html('Total:' + totalOfDiscount);

             }
    });

проблемная область:

data.res[i].TransDate and data.res[i].ExpirationDate

идут в этом формате: 2020-01-31T00:00:00+05:30.

Моя догадка из-за этих строк кода:

{
    targets: [9,13],
    render:$.fn.dataTable.render.moment()
}

Однако я хочу данные в формате ГГГГ-ММ-ДД или ДД-ММ-ГГГГ. Данные JSON, поступающие от метода действия, выглядят примерно так: Date(1615660200000)

Я прошел через форум DataTables, и многие посты Аллана (администратора сайта) перепробовали множество комбинаций, но безрезультатно. Мое понимание jQuery DataTable довольно новичок.

1 Ответ

0 голосов
/ 27 марта 2020

Вы можете использовать средство визуализации столбца для данных этого столбца.

Общая форма:

render: function ( data, type, row, meta ) {
  // your logic here
}

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

enter image description here

Вот страница HTML для снимка экрана выше:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Millis</title>
  <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
  <script src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js"></script>
  <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.20/css/jquery.dataTables.min.css">
  <link rel="stylesheet" type="text/css" href="https://datatables.net/media/css/site-examples.css">
</head>

<body>

<div style="margin: 20px;">

<table id="demo" class="display dataTable cell-border" style="width:100%">
</table>

</div>

<script type="text/javascript">

  var dataSet = [["foo", 1615660200000],["bar", 1617960230000]];

  $(document).ready(function() {

    $('#demo').DataTable({

      data: dataSet,
      columns: [
        { title: "Name" },
        { title: "Milliseconds" },
        { title: "Date",
          render: function ( data, type, row, meta ) {
            var d = new Date(row[1]);
            // see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl
            var ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(d)
            var mo = new Intl.DateTimeFormat('en', { month: '2-digit' }).format(d)
            var da = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(d)
            return `${ye}-${mo}-${da}`;
          }
        }
      ]


    });

  });
</script>

</body>
</html>

Вам нужно будет решить, хотите ли вы, чтобы ваши даты отображались как UT C или для определенного c часового пояса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...