angular 时刻日期时间选择器时区指令问题
angular moment date time picker timezone directive issue
以下代码显示了表单中的日期时间选择器,我正在使用 angular-moment-picker 插件作为选择器。当我选择某个 date/time 时,它在选择器输入框中显示正确的时间,但是在提交表单后,在数据库中输入的时间滞后。所以我使用了来自 Whosebug 答案的时区指令。但是它抛出 viewValue.getMinutes is not a function 错误
<div moment-picker="startTime" class="form-control" name="startTime"
ng-model="shiftTimings.startTime" format="YYYY-MM-DD HH:mm:ss" datepicker-localdate >
{{ startTime }} </div>
指令
app.directive('datepickerLocaldate', ['$parse', function ($parse) {
var directive = {
restrict: 'A',
require: ['ngModel'],
link: link
};
return directive;
function link(scope, element, attr, ctrls) {
var ngModelController = ctrls[0];
ngModelController.$parsers.push(function (viewValue) {
viewValue.setMinutes(viewValue.getMinutes() - viewValue.getTimezoneOffset());
return viewValue.toISOString().substring(0, 10);
});
ngModelController.$formatters.push(function (modelValue) {
if (!modelValue) {
return undefined;
}
var dt = new Date(modelValue);
dt.setMinutes(dt.getMinutes() + dt.getTimezoneOffset());
return dt;
});
}
}]);
我也遇到过!当 javascript 日期传递给浏览器时,浏览器使用 GMT 作为时间,这就是您的时间在数据库中滞后的原因。
我使用了 moment 的解决方法。我没有传递 javascript 日期对象,而是在将日期传递给 backed 之前用 moment 格式化我的日期。
所以shiftTimings.startTime
可以在发送前用这样的时刻进行操作:
var tempDate=moment(shiftTimings.startTime).format("YYYY-MM-DDTHH:mm:ss.SSS") + 'Z';
然后您可以将 tempDate
传递给您的后端。
以下代码显示了表单中的日期时间选择器,我正在使用 angular-moment-picker 插件作为选择器。当我选择某个 date/time 时,它在选择器输入框中显示正确的时间,但是在提交表单后,在数据库中输入的时间滞后。所以我使用了来自 Whosebug 答案的时区指令。但是它抛出 viewValue.getMinutes is not a function 错误
<div moment-picker="startTime" class="form-control" name="startTime"
ng-model="shiftTimings.startTime" format="YYYY-MM-DD HH:mm:ss" datepicker-localdate >
{{ startTime }} </div>
指令
app.directive('datepickerLocaldate', ['$parse', function ($parse) {
var directive = {
restrict: 'A',
require: ['ngModel'],
link: link
};
return directive;
function link(scope, element, attr, ctrls) {
var ngModelController = ctrls[0];
ngModelController.$parsers.push(function (viewValue) {
viewValue.setMinutes(viewValue.getMinutes() - viewValue.getTimezoneOffset());
return viewValue.toISOString().substring(0, 10);
});
ngModelController.$formatters.push(function (modelValue) {
if (!modelValue) {
return undefined;
}
var dt = new Date(modelValue);
dt.setMinutes(dt.getMinutes() + dt.getTimezoneOffset());
return dt;
});
}
}]);
我也遇到过!当 javascript 日期传递给浏览器时,浏览器使用 GMT 作为时间,这就是您的时间在数据库中滞后的原因。
我使用了 moment 的解决方法。我没有传递 javascript 日期对象,而是在将日期传递给 backed 之前用 moment 格式化我的日期。
所以shiftTimings.startTime
可以在发送前用这样的时刻进行操作:
var tempDate=moment(shiftTimings.startTime).format("YYYY-MM-DDTHH:mm:ss.SSS") + 'Z';
然后您可以将 tempDate
传递给您的后端。