Javascript 弹出式日历显示本地日期,但所选日期为UTC
我想以UTC格式保存所选日期 但是弹出式日历与所选日期时间不同步 假设我点击08/13,选择的日期是08/12 因为在我的时区是08/13,但它仍然是08/12与UTC时区 HTMLJavascript 弹出式日历显示本地日期,但所选日期为UTC,javascript,angularjs,angular-ui-bootstrap,Javascript,Angularjs,Angular Ui Bootstrap,我想以UTC格式保存所选日期 但是弹出式日历与所选日期时间不同步 假设我点击08/13,选择的日期是08/12 因为在我的时区是08/13,但它仍然是08/12与UTC时区 HTML 如果您将其存储为UTC,为什么将其保留为UTC会有问题?。如果您想将时间从UTC更改为另一个时区,您可以使用力矩进行角度调整。但你们必须给这个时刻一个转换的时区。例如: function utctoTimeZoneFormat(date, current_tz) { var offse
如果您将其存储为UTC,为什么将其保留为UTC会有问题?。如果您想将时间从UTC更改为另一个时区,您可以使用力矩进行角度调整。但你们必须给这个时刻一个转换的时区。例如:
function utctoTimeZoneFormat(date, current_tz) {
var offset = moment(date).tz(current_tz).utcOffset();
var returnObj = {
"day": "",
"time": ""
}
returnObj.day = moment.utc(date).tz(current_tz).utcOffset(offset).format('dddd');
returnObj.time = moment.utc(date).tz(current_tz).utcOffset(offset).format('HH:mm:ss')
return returnObj;
}
您可以将date参数作为您从UI中选择的日期传递,将current_tz作为您的时区传递。但你必须像“美国/洛杉矶”一样通过时区名称
function timeZoneToUTCFormat(date, current_tz) {
var offset = moment(date).tz(current_tz).utcOffset();
offset = offset * -1;
var returnObj = {
"day": "",
"time": ""
}
returnObj.day = moment.utc(date).tz(current_tz).utcOffset(offset).format('dddd');
returnObj.time = moment.utc(date).tz(current_tz).utcOffset(offset).format('HH:mm:ss')
return returnObj;
}
第二个功能使您能够将所选日期存储为UTC。您应该相应地传递参数。例如如果您在“America/Los_Angeles”,则应将时区作为给定字符串传递,并将其转换为UTC。因此,您可以使用上面编写的两个函数同步UI和后端。在较新版本的UI datepicker中,有一种更简单的方法可以解决此问题
ng-modal-options='{"timezone":"utc"}'
这将从日期中删除时区组件
在旧版本中
解决方案是删除日期部分的时区组件(最好有可重用性指令
myapp.directive("dateToIso", 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
};
});
你可以像下面那样使用它
<input ng-model='abc' date-to-iso ui-datepicker>
您正试图将选定的时间存储为UTC?首先,您应该确定计时器的时区,然后您可以使用“时刻”或其他方式将其存储为UTC。但要回答您的问题,您应该提供有关问题的明确信息。@Fatihaktpe是的,无论用户单击什么,我都会将时间存储为UTC。我知道这是不寻常的。但这只是我的用例。谢谢。@user3675188这似乎是个错误。似乎有一个解决办法;只是吹毛求疵,UTC不是时区。UTC是一种标准格式,默认使用GMT时区。您可以通过给它正确的时区来表示UTC的本地时间。弹出的日历显示用户的时间区域不是utc。例如,如果我将操作系统上的时区从-8更改为+8,弹出的时区将完全不同。比方说,如果我在弹出窗口上单击2016-08-10时我的区域位于+8,则所选日期可能是2016-08-09。我想使其同步如果弹出窗口显示用户时区,则您可以将所选日期存储为utc。要更新我的答案吗。如果答案解决了您的问题,请给我一个反馈。错误更正:应该是ng model options='{“timezone”:“utc”}'
myapp.directive("dateToIso", 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
};
});
<input ng-model='abc' date-to-iso ui-datepicker>