我在角度应用程序中使用bootstrap日期选择器 . 然而,当我从该日期选择器中选择一个日期选择器时,我已经更新了绑定的ng-model,我想要一个日期格式为'MM / dd / yyyy'的ng-model . 但它每次都像这样约会
"2009-02-03T18:30:00.000Z"
代替
02/04/2009
我为同一个创造了一个plunkr plunkr link
我的Html和控制器代码如下所示
<!doctype html>
<html ng-app="plunker">
<head>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.10/angular.js"></script>
<script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.11.0.js"></script>
<script src="example.js"></script>
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div ng-controller="DatepickerDemoCtrl">
<pre>Selected date is: <em>{{dt | date:'MM/dd/yyyy' }}</em></pre>
<p>above filter will just update above UI but I want to update actual ng-modle</p>
<h4>Popup</h4>
<div class="row">
<div class="col-md-6">
<p class="input-group">
<input type="text" class="form-control"
datepicker-popup="{{format}}"
ng-model="dt"
is-open="opened" min-date="minDate"
max-date="'2015-06-22'"
datepicker-options="dateOptions"
date-disabled="disabled(date, mode)"
ng-required="true" close-text="Close" />
<span class="input-group-btn">
<button type="button" class="btn btn-default" ng-click="open($event)">
<i class="glyphicon glyphicon-calendar"></i></button>
</span>
</p>
</div>
</div>
<!--<div class="row">
<div class="col-md-6">
<label>Format:</label> <select class="form-control" ng-model="format" ng-options="f for f in formats"><option></option></select>
</div>
</div>-->
<hr />
{{dt}}
</div>
</body>
</html>
Angular controller
angular.module('plunker', ['ui.bootstrap']);
var DatepickerDemoCtrl = function ($scope) {
$scope.open = function($event) {
$event.preventDefault();
$event.stopPropagation();
$scope.opened = true;
};
$scope.dateOptions = {
formatYear: 'yy',
startingDay: 1
};
$scope.format = 'dd-MMMM-yyyy';
};
在此先感谢您审核我的问题 .
UPDATE
我在下面调用方法来发布我的数据,VAR是大小为900的数组,其中包含日期选择器变量 .
public SaveCurrentData(formToSave: tsmodels.ResponseTransferCalculationModelTS) {
var query = this.EntityQuery.from('SaveFormData').withParameters({
$method: 'POST',
$encoding: 'JSON',
$data: {
VAR: formToSave.VAR,
X: formToSave.X,
CurrentForm: formToSave.currentForm,
}
});
var deferred = this.q.defer();
this.manager.executeQuery(query).then((response) => {
deferred.resolve(response);
}, (error) => {
deferred.reject(error);
});
return deferred.promise;
}
13 回答
虽然已经公布了类似的答案,但我想为我做出最简单,最干净的解决方案 . Assuming you are using the AngularUI datepicker 并且ng-Model的初始值没有格式化,只需将以下指令添加到项目中就可以解决问题:
我在Github AngularUI issues找到了这个解决方案,因此所有信用都归于那边的人 .
您可以使用$解析器,如下所示,这为我解决了它 .
HTML:
我遇到了同样的问题,经过几个小时的记录和调查,我修复了它 .
事实证明,这个值第一次在日期选择器中设置,$ viewValue是一个字符串,因此dateFilter按原样显示它 . 我所做的就是将其解析为Date对象 .
在ui-bootstrap-tpls文件中搜索该块
并将其替换为:
希望这会有所帮助:)
通过
datepicker-popup
指定的format
只是 the format for the displayed date . 底层ngModel
是一个Date对象 . 试图显示它将显示它是默认的,符合标准的表示 .您可以在视图中使用
date
过滤器显示它,或者,如果您需要在控制器中解析它,可以在控制器中注入$filter
并将其称为$filter('date')(date, format)
. 另见date filter docs .在datepicker指令中选择值后,您可以使用格式化程序 . 例如
LINK .
已经写了这么多答案,这是我的看法 .
使用Angular 1.5.6和ui-bootstrap 1.3.3,只需在模型上添加它即可完成 .
Note :只有当您担心日期落后1天并且没有受到额外时间T00:00:00.000Z的困扰时才使用此项
更新了Plunkr:
http://plnkr.co/edit/nncmB5EHEUkZJXRwz5QI?p=preview
所有提出的解决方案都不适用于我,但最接近的解决方案来自@Rishii .
我正在使用AngularJS 1.4.4和UI Bootstrap 0.13.3 .
我可以通过在JSP文件中添加以下代码来解决这个问题 . 现在模型和UI值都相同 .
更改ng-model的默认日期格式的步骤
对于不同的日期格式,请在此处检查jqueryui datepicker日期格式值,例如我使用了dd / mm / yy
创建angularjs指令
写dateFilter函数
在html页面中写入ng-modal属性
最后我对上述问题有了很好的解决方案 . angular-strap具有与我期望的完全相同的功能 . 只需应用
date-format="MM/dd/yyyy" date-type="string"
,我得到了以给定格式更新ng-model的预期行为 .这是工作插件link
定义一个解决bug的新指令并不是很理想 .
由于日期选择器正确显示更晚的日期,因此一个简单的解决方法可能是将模型变量首先设置为null,然后在一段时间后设置为当前日期:
datepicker(和datepicker-popup)指令要求ng-model是Date对象 . 记录here .
如果您希望ng-model是特定格式的字符串,则应创建包装器指令 . 这是一个例子(Plunker):
在检查了上面的答案之后,我想出了这个并且它完美地运行而无需在标记中添加额外的属性