【发布时间】:2015-03-03 11:42:33
【问题描述】:
所以我试图用 mongodb / mongoose / angular 来处理日期。
我试图将 用作日期选择器。但它需要 yyyy-MM-dd 格式。猫鼬模式生成的日期在哪里:
created: {
type: Date,
default: Date.now
},
这些日期的格式如下:2014-12-13T22:23:20.633Z
所以我四处寻找人们在需要转换时如何处理与数据模型的绑定。
我想出了以下指令。
'use strict';
angular.module('clients').directive('mongooseDateFormat', ['$filter',
function ($filter) {
return {
require: 'ngModel',
link: function (scope, element, attrs, ngModelController) {
ngModelController.$parsers.push(function (data) {
console.log(data);
data = $filter('date')(data, 'yyyy-MM-dd');
console.log(data);
return data; //converted
});
ngModelController.$formatters.push(function (data) {
console.log(data); // gets 2015-01-12T00:00:00.000Z
data = $filter('date')(data, 'yyyy-MM-dd');
console.log(data); // converts to 2015-01-11
return data; //converted
});
}
};
} ]);
所以我包含了我正在测试值的 console.log 函数,并在上面的代码中显示了 cmets 中的一些示例日期。
可以看到 2015-01-12T00:00:00.000Z 变成了 2015-01-11。
因此发送到过滤器的值带有 0 时间戳,并且 $format(date)(data, "yyyy-MM-dd") 命令删除了时间戳但更改了日期。
(..sigh.. 脏话已删除)
对于必须关心日期格式的新手来说,这简直令人震惊。是我没有使用时区的问题吗?我的意思是 mongodb 和 mongoose 没有生成时区?当您尝试格式化时,为什么时间为零的日期会向下舍入到前一个日期?
当有人告诉我简单的答案时,我可以继续抱怨这有多奇怪,并让自己听起来很愚蠢。我就发帖看看有没有人知道。
<input type="text" data-mongoose-date-format data-ng-model="client.mydate">
或
<input type="date" data-mongoose-date-format data-ng-model="client.mydate">
它们都在您输入日期后绑定,它被转换并返回一个少一天的日期。
【问题讨论】:
标签: angularjs mongodb angularjs-directive mongoose