javascript没有正确地将角度ui datepicker日期转换为UTC [英] javascript doesn't convert angular ui datepicker date to UTC correctly
问题描述
我在我的项目中使用了角度ui datepicker(asp.net web api + angularjs)。一切正常,但是当我试图将日期保存到Db时,它没有正确地将它转换为UTC格式并且导致1天(实际上是几个小时,但它也影响了一天)。
I'm using angular ui datepicker in my project(asp.net web api + angularjs). All works fine but when I'm trying to save date to Db it doesn't convert it to UTC format correctly and substructs 1 day(actually a few hours but it affects for a day too).
例如,当我在datepicker中选择01/11/2014时:
For example when I choose 01/11/2014 in the datepicker:
Angularjs object:
Sat Nov 01 2014 00:00:00 GMT+0200 (FLE Standard Time)
In request:
2014-10-31T22:00:00.000Z
In asp.net api controller:
{31-Oct-14 10:00:00 PM}
Datepicker控制器:
Datepicker controller:
app.controller('DatepickerCtrl', function ($scope) {
$scope.today = function () {
$scope.dt = new Date();
};
$scope.today();
$scope.clear = function () {
$scope.dt = null;
};
$scope.open = function ($event) {
$event.preventDefault();
$event.stopPropagation();
$scope.opened = true;
};
$scope.format = 'dd/MM/yyyy';
$scope.dateOptions = {
'starting-day': 1
};
});
hnml:
<div class="form-group inputGroupContainer" ng-controller="DatepickerCtrl">
<label for="date">Date of Birth</label>
<p class="input-group">
<input type="text" name="date1" ui-date="{dateFormat: 'yy-mm-dd'}" ui-date-format="yy-mm-dd" placeholder="DD/MM/YYYY" class="form-control" datepicker-popup="{{format}}" ng-model="user.Personal.BirthDate" max-date="currentDate" is-open="opened" 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>
但似乎有角度的datepicker突出显示正确的日期:
But seems like angular datepicker highlight the correct date:
I我试图手动将日期转换为UTC格式,但也没有成功
I've tried to manually convert date to UTC format but unsuccessfully as well
toUTCDate: function (d) {
var date = new Date(d);
var _utc = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());//, date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()
return _utc;
}
我应该指定时区还是使用角度js过滤器?
Should I specify timezone or use angular js filter?
推荐答案
我遇到了完全相同的问题,解决方法是删除日期部分的时区组件。为了以更通用的方式解决问题,我编写了一个指令
I have had the exact same problem, the solution was to remove the timezone component of the date part. To solve the problem in a more generic way I had written a directive
csapp.directive("csDateToIso", function () {
var linkFunction = function (scope, element, attrs, ngModelCtrl) {
ngModelCtrl.$parsers.push(function (datepickerValue) {
return moment(datepickerValue).format("YYYY-MM-DD");
});
};
return {
restrict: "A",
require: "ngModel",
link: linkFunction
};
});
上述指令删除了时区部分,仅考虑ISO日期格式输入的日期部分。
above directive removes the timezone part and only considers the date part of the ISO date format input.
我确实使用moment.js进行日期操作。但你可以很容易地将上面的转换为不使用moment.js
I do use moment.js for date manipulations. But you can easily convert above to not use moment.js
编辑
像下面这样使用
<input ng-model='abc' cs-date-to-iso ui-datepicker>
这篇关于javascript没有正确地将角度ui datepicker日期转换为UTC的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!