如何将 JSON 字符串日期转换为自定义格式日期?
How do I convert JSON string date to a custom format date?
您好,我想知道如何将来自响应的 JSON 字符串日期转换为 "8/24/2016". 等格式做了一个 dateFilter.js 位它没有像我预期的那样工作所以这是我尝试过的。
这里是dateFilter.js(实际上并没有成功。错误:数据递归)
(function () {
angular
.module('myapp')
.filter('date', function ($filter) {
return function (input) {
if (input == null) {
return "";
}
var _date = $filter('date')(new Date(input), 'dd/MM/yyyy');
return _date.toUpperCase();
};
});
})();
以下是我如何通过服务获得 JSON(代码不完整,因为我想展示我是如何获得响应的。)
function GetEmpDetails(successcallback, failcallback) {
var req = {
method: 'GET',
url: 'http://localhost:2222/api/GetEmployees/GetEmployeeDetails',
headers: {
'Content-Type': 'application/json'
}
}
$http(req).then(successcallback, failcallback);
}
controller.js
(function initController() {
EmployeeService.GetEmpDetails(function (res) {
$scope.employeeDetails = JSON.parse(res.data);
//console.log(res.data);
}
});
最后将过滤器应用于 html。
<table id="basic-datatables" class="table table-striped table-bordered" cellspacing="0" width="100">
<thead style="text-align:match-parent">
<tr>
<th rowspan="1" colspan="1" style="width:195px">First Name</th>
<th rowspan="1" colspan="1" style="width:195px">Last Name</th>
<th rowspan="1" colspan="1" style="width:200px">Date Of Birth</th>
<th rowspan="1" colspan="1" style="width:100px">Gender</th>
<th rowspan="1" colspan="1" style="width:200px">Email</th>
<th rowspan="1" colspan="1" style="width:100px">Mobile</th>
<th rowspan="1" colspan="1" style="width:190px">Designation</th>
<th rowspan="1" colspan="1" style="width:200px">Date of Join</th>
<th rowspan="1" colspan="1" style="width:195px">NIC</th>
<th rowspan="1" colspan="1" style="width:100px">Dept. Name</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="emp in employeeDetails.slice(((currentPage-1)*itemsPerPage),((currentPage)*itemsPerPage))" style="text-align:center">
<td>{{emp.fname}}</td>
<td>{{emp.lname}}</td>
<td>{{emp.DOB | date}}</td> //applying the filter
<td>{{emp.gender}}</td>
<td>{{emp.email}}</td>
<td>{{emp.mobile_no}}</td>
<td>{{emp.designation}}</td>
<td>{{emp.date_of_join | date}}</td> //applying the filter
<td>{{emp.nic}}</td>
<td>{{emp.department_name}}</td>
</tr>
</tbody>
</table>
如果有任何其他转换方式,我将如何做到这一点。
Final note: right now without the filter: 7/25/2016 12:00:00 AM want
to convert to 7/25/2016
不胜感激。
您可以先将字符串转换为实际日期,然后应用内置日期过滤器:
在您的控制器中:
$scope.convertToDate = function(date){
var dateOut = new Date(date);
return dateOut;
};
在你的 html:
<td ng-bind="convertToDate(date) | date:'MM/dd/yyyy'"></td>
另一个选项是在您的过滤器中使用 moment.js
:
moment(input, 'MM/dd/yyyy')
此外,您的过滤器可能无法正常工作的原因是它的名称。尝试更改为其他任何内容,例如 myDate
.
更新
我想我知道你为什么会收到 recursion
错误!这是因为您的自定义过滤器的名称!您的过滤器称为 date
,angular 的内置过滤器也称为 date
。也许他们最终互相打电话并陷入递归。只需更改名称即可解决问题。
试试这个代码。我认为这可以解决您的问题:
<td>{{emp.DOB | dateFormat}}</td>
Angular 过滤器:
.filter('dateFormat', function() {
return function(dt) {
var dt = new Date(dt);
return (dt.getMonth()+1)+'/'+dt.getDate()+'/'+dt.getFullYear();
};
})
可以使用npm模块实现moment.js。我创建了一个 fiddle。看看这个。
var date = moment("7/25/2016 12:00:00 AM").date();
var month = moment("7/25/2016 12:00:00 AM").month();
var year = moment("7/25/2016 12:00:00 AM").year();
console.log(''+month+'/'+ date + '/'+ year);
您好,我想知道如何将来自响应的 JSON 字符串日期转换为 "8/24/2016". 等格式做了一个 dateFilter.js 位它没有像我预期的那样工作所以这是我尝试过的。
这里是dateFilter.js(实际上并没有成功。错误:数据递归)
(function () {
angular
.module('myapp')
.filter('date', function ($filter) {
return function (input) {
if (input == null) {
return "";
}
var _date = $filter('date')(new Date(input), 'dd/MM/yyyy');
return _date.toUpperCase();
};
});
})();
以下是我如何通过服务获得 JSON(代码不完整,因为我想展示我是如何获得响应的。)
function GetEmpDetails(successcallback, failcallback) {
var req = {
method: 'GET',
url: 'http://localhost:2222/api/GetEmployees/GetEmployeeDetails',
headers: {
'Content-Type': 'application/json'
}
}
$http(req).then(successcallback, failcallback);
}
controller.js
(function initController() {
EmployeeService.GetEmpDetails(function (res) {
$scope.employeeDetails = JSON.parse(res.data);
//console.log(res.data);
}
});
最后将过滤器应用于 html。
<table id="basic-datatables" class="table table-striped table-bordered" cellspacing="0" width="100">
<thead style="text-align:match-parent">
<tr>
<th rowspan="1" colspan="1" style="width:195px">First Name</th>
<th rowspan="1" colspan="1" style="width:195px">Last Name</th>
<th rowspan="1" colspan="1" style="width:200px">Date Of Birth</th>
<th rowspan="1" colspan="1" style="width:100px">Gender</th>
<th rowspan="1" colspan="1" style="width:200px">Email</th>
<th rowspan="1" colspan="1" style="width:100px">Mobile</th>
<th rowspan="1" colspan="1" style="width:190px">Designation</th>
<th rowspan="1" colspan="1" style="width:200px">Date of Join</th>
<th rowspan="1" colspan="1" style="width:195px">NIC</th>
<th rowspan="1" colspan="1" style="width:100px">Dept. Name</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="emp in employeeDetails.slice(((currentPage-1)*itemsPerPage),((currentPage)*itemsPerPage))" style="text-align:center">
<td>{{emp.fname}}</td>
<td>{{emp.lname}}</td>
<td>{{emp.DOB | date}}</td> //applying the filter
<td>{{emp.gender}}</td>
<td>{{emp.email}}</td>
<td>{{emp.mobile_no}}</td>
<td>{{emp.designation}}</td>
<td>{{emp.date_of_join | date}}</td> //applying the filter
<td>{{emp.nic}}</td>
<td>{{emp.department_name}}</td>
</tr>
</tbody>
</table>
如果有任何其他转换方式,我将如何做到这一点。
Final note: right now without the filter: 7/25/2016 12:00:00 AM want to convert to 7/25/2016
不胜感激。
您可以先将字符串转换为实际日期,然后应用内置日期过滤器:
在您的控制器中:
$scope.convertToDate = function(date){
var dateOut = new Date(date);
return dateOut;
};
在你的 html:
<td ng-bind="convertToDate(date) | date:'MM/dd/yyyy'"></td>
另一个选项是在您的过滤器中使用 moment.js
:
moment(input, 'MM/dd/yyyy')
此外,您的过滤器可能无法正常工作的原因是它的名称。尝试更改为其他任何内容,例如 myDate
.
更新
我想我知道你为什么会收到 recursion
错误!这是因为您的自定义过滤器的名称!您的过滤器称为 date
,angular 的内置过滤器也称为 date
。也许他们最终互相打电话并陷入递归。只需更改名称即可解决问题。
试试这个代码。我认为这可以解决您的问题:
<td>{{emp.DOB | dateFormat}}</td>
Angular 过滤器:
.filter('dateFormat', function() {
return function(dt) {
var dt = new Date(dt);
return (dt.getMonth()+1)+'/'+dt.getDate()+'/'+dt.getFullYear();
};
})
可以使用npm模块实现moment.js。我创建了一个 fiddle。看看这个。
var date = moment("7/25/2016 12:00:00 AM").date();
var month = moment("7/25/2016 12:00:00 AM").month();
var year = moment("7/25/2016 12:00:00 AM").year();
console.log(''+month+'/'+ date + '/'+ year);