我在项目中使用Angular UI datepicker。
该控件有一个选项" datepicker-popup"这允许我设置te格式我希望显示日期。但是日期作为日期对象绑定到我的模型而不是格式化字符串。
我的其余代码只需要将日期作为正确(yyyy-MM-dd)格式的字符串。
目前,每当我需要使用日期时,我会在传递之前将其格式化为正确的字符串。
现在可以使用,因为代码库非常小,但是有更好的方法以某种方式将日期绑定到我的模型作为字符串,以便有人在使用它之前忘记格式化日期并不会破坏系统
示例代码的plunker可以在这里找到。
我想也许我需要设置手表或其他东西,但不太确定正确的解决方案是什么。
答案 0 :(得分:6)
我认为我找到了更好的解决方案。您可以将自己的解析器用于datepickerPopup指令。适用于我的示例(您必须将此指令添加到应用程序中):
angular.module('myApp')
.directive('datepickerPopup', function (){
return {
restrict: 'EAC',
require: 'ngModel',
link: function(scope, elem, attrs, ngModel) {
ngModel.$parsers.push(function toModel(date) {
return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
});
}
}
});
每当您在日期选择器上选择日期时,您将拥有格式化日期的String对象:' yyyy-MM-dd'。希望它有所帮助。
答案 1 :(得分:2)
不,目前AngularUI和许多其他框架使用Date对象绑定信息。每次需要将日期格式化为字符串时,需要将日期格式化为字符串。这样做的方法是创建一个像
这样的函数$scope.getMyDateAsString = function(){
return myDate.toString(); // or however you format your string.
};
然后,只要你想获得字符串,你就可以调用这个函数。你可以创建一个观察者
$scope.$watch($scope.myDateModel, function(newVal, oldVal){
$scope.myDateAsString = $scope.getMyDateAsString();
});
这样,只要datepicker更改值,您就可以更改字符串的值。
答案 2 :(得分:0)
您可以使用Cordova Plugin Datepicker和Moment.js在挑选后设置日期格式,此解决方案适用于我:
$scope.pickSinceDate = function(){
pickDate($scope.filter.since).then(function(date){
$scope.since = moment(date).format('YYYY-MM-DD');
});
});
希望它有所帮助。