javascript - angularjs 中的日期在 $resource.$save() 中以 UTC 发送

标签 javascript angularjs

我对 angularjs 有疑问。我创建了一个工厂事件,当我使用 $save 方法时,d 日期以 UTC 而不是浏览器时区发送...

我创建了一个 jsfiddle 来说明它:

http://jsfiddle.net/Wr8mL/

(单击保存按钮并打开您的控制台以查看请求参数)

我的代码:

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/

相关文章:

javascript - jQuery:滑出并滑入下一个元素并循环?

javascript - Canvas 在动画之间闪烁

javascript - GMAIL 如何有一个显示未读邮件数的图标?

javascript - 如何在 AngularJS 部分文件中使用 php (wordpress) 函数?

javascript - 选择,用ng-repeat,ng-model的当前值不出现

javascript - Prototype 构造器和私有(private)属性的区别

javascript - 选择值时,chrome 中的输入[范围]进度解决方法不起作用

html - 如何使用 Bootstrap 弹出通知?

javascript - ng2-ckeditor 使用 typescript 和 angular 2.0 添加占位符插件

angularjs - WebStorm 中的 JSHint 不知道 Protractor 命令 "browser"