I am trying to display some data in a datatable and the table script I am using is
$('#userData').dataTable({
"ajax": {
"url": "${rc.getContextPath()}/module/roles/users-list",
"dataSrc": "",
},
"columns":[
{"data": "userId"},
{"data": "applicationId"},
{"data": "username"},
{"data": "firstName"},
{"data": "userCreated"},
{"data": "createdTime"},
{"data": "updatedTime"}
],
});
the data that is received by the table is json and would be something like
[
{
"userId":179,
"applicationId":"pgm-apn",
"username":"collaborator.user3",
"password":"password1",
"email":"user@xample.com",
"firstName":"Anthony",
"lastName":"Gonsalves",
"enabled":true,
"userCreated":"sitepmadm",
"userModified":"sitepmadm",
"createdTime":1422454697373,
"updatedTime":1422454697373
},
{
"userId":173,
"applicationId":"pgm-apn",
"username":"consumer.user",
"password":"password1",
"email":"test@egc.com",
"firstName":"sherlock ",
"lastName":"homes",
"enabled":true,
"userCreated":"sitepmadm",
"userModified":"sitepmadm",
"createdTime":1422010854246,
"updatedTime":1422010854246
}
I want to display the dates as proper datetime.Currently it is getting displayed as teh same sting in the json data.Is there any way to convert that in the datatable
You can use "render" property to format your column display http://datatables.net/reference/option/columns.render#function.
For example:
{
"data": "createdTime",
"render": function (data) {
var date = new Date(data);
var month = date.getMonth() + 1;
return (month.length > 1 ? month : "0" + month) + "/" + date.getDate() + "/" + date.getFullYear();
}
}
For a nullable date time, DateTime?, you will want to use a different rendering function:
$('#userData').DataTable({
columns: [
{ "data": "userId"},
{"data": "userCreated",
"type": "date ",
"render":function (value) {
if (value === null) return "";
var pattern = /Date\(([^)]+)\)/;
var results = pattern.exec(value);
var dt = new Date(parseFloat(results[1]));
return (dt.getMonth() + 1) + "/" + dt.getDate() + "/" + dt.getFullYear();}
}
]};
i have created demo using moment js and use of render function to convert json data into required format.
jsfiddle demo
also find code below:
testdata = [{
"id": "58",
"country_code": "UK",
"title": "Legal Director",
"pubdate": "1422454697373",
"url": "http://..."
}, {
"id": "59",
"country_code": "UK",
"title": "Solutions Architect,",
"pubdate": "1422454697373",
"url": "http://..."
}];
$('#test').dataTable({
"aaData": testdata,
"aoColumns": [{
"mDataProp": "id"
}, {
"mDataProp": "country_code"
}, {
"mDataProp": "title"
}, {
"mDataProp": "pubdate"
}, {
"mDataProp": "url"
}],
"columnDefs": [{
"targets": 3,
"data": "pubdate",
"render": function (data, type, full, meta) {
console.log('hi...');
console.log(data);
console.log(type);
console.log(full);
console.log(meta);
return moment.utc(data, "x").toISOString();
}
}]
});
I always use moment.js(http://momentjs.com/) when dealing with dates in js.
The date values returned are in unix timestamp so you need to convert them.
Here's a sample fiddle: http://jsfiddle.net/fws8u54g/
var created = 1422010854246;
moment.utc(created, "x").toISOString();
For dot.net and javascript, you can just use like @David Sopko
{
"data": "Date", "type": "date ",
"render": function (value) {
if (value === null) return "";
var pattern = /Date\(([^)]+)\)/;//date format from server side
var results = pattern.exec(value);
var dt = new Date(parseFloat(results[1]));
return dt.getDate() + "." + (dt.getMonth() + 1) + "." + dt.getFullYear();
}, "autoWidth": true
},
For showing the time along with the date add the code below:
"data": 'Date' ,
"render": function (data) {
var date = new Date(data);
var month = date.getMonth() + 1;
return (month.length > 1 ? month : "0" + month) + "/" + date.getDate() + "/" + date.getFullYear() + " " +(date.getHours() < 10 ? ("0"+date.getHours()) : date.getHours())+ ":"+(date.getMinutes() < 10 ? ("0"+date.getMinutes()) : date.getMinutes()) ;
//return date;
}