获取用户选择的不带时区的日期
get date selected by user without timezone
我的表单中有几个日期字段,我使用JqueryUI
datepicker
供用户选择日期。用户选择日期时,日期应以dd/mm/yy
格式显示。我使用KnockoutJS
来管理客户端的数据绑定,并使用以下JqueryUI
datepicker
的KO
绑定处理程序:
ko.bindingHandlers.datepicker = {
init: function (element, valueAccessor, allBindingsAccessor) {
var options = allBindingsAccessor().datepickerOptions || { dateFormat: 'dd/mm/yy' };
$(element).datepicker(options);
ko.utils.registerEventHandler(element, "change", function () {
var observable = valueAccessor();
observable($(element).datepicker("getDate"));
});
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
$(element).datepicker("destroy");
});
},
update: function (element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor()),
current = $(element).datepicker("getDate");
if (value - current !== 0) {
$(element).datepicker("setDate", value);
}
}
};
现在,当用户选择日期时,它在input
text
字段中以dd/mm/yy
格式正确显示,并且在KO
observable
中捕获javascript
Date
对象以及时区。我使用ko.toJSON()
函数将包含各种日期字段的整个复杂javascript object
转换为JSON
字符串,并在后端对其进行反序列化。
我面临的问题是,当javascript
Date
对象转换为JSON
字符串时,它会从用户选择的日期减少一天,我认为这是因为本地时区,这是javascript日期对象的默认行为。我还尝试了momentJs
库,使用以下代码从所选日期获取UTC
日期,但这似乎不起作用:
moment.utc(selectedDateObject).toDate()
我想要的是使用日期选择器获取用户在表单中选择的任何日期,而不需要任何时区,简单明了。我该怎么办?Date
对象在javascript中似乎变得不必要地复杂。
您需要覆盖当前的toJSON函数。
请参阅Moment Docs了解更多详细信息,但基本上你需要做一些类似的事情
moment.fn.toJSON = function () {
return this.format('YYYY-MM-DDTHH:mm:ss'); //Or any desired format
};
相关文章:
- 获取用户选择的不带时区的日期
- 分析特定区域设置(而不是时区!)中的日期字符串
- moment.js在两个时区格式的日期之间存在差异
- 获取本地时间的JS日期,日期对象中没有时区详细信息
- Javascript-将时区添加到日期倒计时中
- 使用JavaScript日期的任何时间的时区偏移量
- javascript日期时区问题
- 读取本地时区的日期的Javascript
- 时刻时区.js允许我传递时区缩写并获取转换后的日期/时间
- 转换 JSON 日期,不考虑时区
- 如何使用 JavaScript 更改日期的时区而不更改时间
- 如何将 UTC 日期时间(字符串)转换为访问者时区
- 情节.js为类型设置时区:“日期”
- 在 Jquery 中比较不同的时区日期
- Java 在 Java 中转换毫秒日期对应的时区日期
- 在 JS 中返回干净的无时区日期
- 将UTC中的Epoch转换为当前时区日期
- 将本地时区日期对象转换为UTC时区日期对象的优雅方式
- 显示任意时区日期的Dygraph
- 在 Javascript 中将 ISO 8601 字符串转换为当前时区日期时间对象