如何在AngularJS的REST Api中处理日期字段
How to handle date fields from a REST Api in AngularJS?
我有一个REST API,它返回带有标准ISO-8601格式日期的JSON数据:yyyy-MM-ddTHH:mm:ss:
{
id: 4
version: 3
code: "ADSFASDF"
definition: "asdflkj"
type: "CONTAINER"
value: "1234"
active: "false"
formula: false
validTo: "2014-12-31T05:00:00"
validFrom: "2010-12-31T10:00:00"
}
我的问题是,我不太确定如何处理这个在AngularJS。我有一个$resource
GETs, post等我的API端点,但当我的数据返回时,它被存储在我的JS对象作为字符串。我认为将它作为Date()或Moment()来处理会更容易。
在Java中,我可以使用JsonDeserializer
来确保所有JSON数据在分配给模型之前被正确转换,但我不知道AngularJS中是否有类似的机制。
我已经搜索过了,但似乎找不到任何实现通用解决方案的东西。我意识到我可以在我的$resource
中使用transformResponse
函数,但这似乎对可能包含日期的每种数据类型进行了大量重复配置。
这让我想知道以ISO-8601格式返回日期是否是最好的方法?如果AngularJS不支持它,我想一定有一种更简单的方法来处理日期。在AngularJS中如何处理日期?我应该只是把它们作为文本/字符串对象,并让API返回一个预格式化的版本吗?如果是的话,在HTML5日期输入框中最灵活的格式是什么?
JSON不支持日期,所以您需要将日期作为字符串或整数发送,并在合适的时候将它们转换为Date对象。Angular不会为你做这些,但你可以将默认的transformResponse
函数定义为$httpProvider
。我尝试了$resource
,它确实影响了它,毕竟,$resource
是$http
的更高层次的抽象。
如果你不知道JSON的结构,或者不想在转换函数中依赖它,你只需要将类似日期的字符串转换为Date对象。
var convertDates = function(input) {
for(var key in input) {
if (!input.hasOwnProperty(key)) continue;
if (typeof input[key] === "object") {
convertDates(input[key]);
} else {
if (typeof input[key] === "string" && /^'d{4}-'d{2}-'d{2}T'd{2}:'d{2}:'d{2}$/.test(input[key])) {
input[key] = new Date(input[key]);
}
}
}
}
app.config(["$httpProvider", function ($httpProvider) {
$httpProvider.defaults.transformResponse.push(function(responseData){
convertDates(responseData);
return responseData;
});
}]);
根据你的应用程序,从性能的角度来看,这可能是不明智的(例如,只有少数JSON响应包含日期或实际上需要转换日期),所以最好在那些实际需要的控制器中转换日期。
- KnockoutJS处理引导程序日期选择器和日期格式
- Bootstrap日期选择器setDatesDisabled无法处理按钮单击
- 如何处理php(Laravel-api)和javascript(AngularJS)之间的日期时间
- 处理日期时间时间戳javascript(angularjs)和mongo的滑块
- 以 UTC 格式的 SQL 处理日期/时间
- 使用数据选择器和时刻处理不同语言的日期
- 哪个 JS 日期时间选取器正确处理 DST 转换
- 剑道日期时间选取器不处理 UTC 偏移量
- 在 Mongo 和 Nodejs 的 Web 应用程序中处理跨时区的日期
- 如何在Google Apps Script中处理日期
- 用Asp处理日期.. Net MVC和KnockoutJS
- 在PHP中以DD-MON-YYYY格式处理日期
- 如何在AngularJS的REST Api中处理日期字段
- Crossfilter.js,如何处理日期维度上的人工重复
- 我如何处理日期在javascript中,当它不断附加一个时间值
- 使用Moment.js和FullCalendar处理日期无关的事件
- 在javascript中转换字符串日期到日期时间,如何处理日期格式
- 在javascript中处理日期(格式和时区)
- 处理日期选择器日历小部件中的日期值
- 使用日期时间选取器的多个实例来处理日期之间的范围