我对 angularjs 有疑问。我创建了一个工厂事件,当我使用 $save 方法时,d 日期以 UTC 而不是浏览器时区发送...
我创建了一个 jsfiddle 来说明它:
(单击保存按钮并打开您的控制台以查看请求参数)
我的代码:
window.App = angular.module('App', ["ngResource"]);
App.factory('Event', ['$resource', '$http', function($resource, $http) {
Event = $resource('/events/:id.json',
{ id:'@id' },
{ update: {method:'PUT' }, 'query': { method: 'GET', isArray: false }});
return Event;
}])
App.controller("EventNewCtrl", ['$scope', "$http", "Event", function($scope, $http, Event) {
$scope.resetEvent = function(){
$scope.event = new Event({ date: new Date() })
}
$scope.save = function() {
$scope.event.$save();
}
$scope.resetEvent()
}]);
最佳答案
在提交数据之前,angular 使用 JSON.stringify 函数转换您的对象。试试看
console.log(JSON.stringify(new Date()));
这等同于:
console.log(new Date().toISOString());
(肯定第一个会被引号括起来)
有很多改变默认行为的可能性:
1) 用您自己的实现替换 toISOString 函数:
Date.prototype.toISOString = function(){
return 'here goes my awesome formatting of Date Objects '+ this;
};
2) 用您自己的 Angular 替换默认的 Angular 变换。您可以通过提供一个 transformRequest 函数来做到这一点(无论是针对每个资源配置还是通过 $httpProvider.defaults.transformRequest
为您的完整应用程序)。参见 $http service想要查询更多的信息。您的函数将如下所示:
transformRequest: function(data){
return your string representation of the data
}
如果您对为什么 toISODate 去除时区感兴趣,请查看 ECMAScript 语言规范:http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
关于javascript - angularjs 中的日期在 $resource.$save() 中以 UTC 发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21379869/