我从ASP.NET MVC /Date(1446393600000)/
其中它在SQL数据库值'2015-11-02'
这个值,它是一个date
(仅日期),并把它作为处理JavaScript对象,我用moment.js服务器发布目的,从而moment('/Date(1446393600000)/')
使用时,我得到了这个结果"2015-11-01T16:00:00.000Z"
如何处理日期为
所以这段代码:
的bindingHandler可以发现here
ko.bindingHandlers.datepicker = {
init: function(element, valueAccessor, allBindingsAccessor) {
var options = allBindingsAccessor().datepickerOptions || {},
$el = $(element);
//initialize datepicker with some optional options
$el.datepicker(options);
//handle the field changing
ko.utils.registerEventHandler(element, "change", function() {
var observable = valueAccessor();
observable(moment($el.datepicker("getDate"))); // I added moment function here
});
//handle disposal (if KO removes by the template binding)
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
$el.datepicker("destroy");
});
}
/*,
update: function(element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor()),
$el = $(element),
current = $el.datepicker("getDate");
if (value - current !== 0) {
$el.datepicker("setDate", value);
}
}*/
};
var vm = {
sampleDate: ko.observable(moment('/Date(1446393600000)/')), // I added moment function here
originalValue: '/Date(1446393600000)/', // For reference only
FromSqlDb: '2015-11-02' // For reference only
};
vm.formattedDate = ko.pureComputed(function() {
return this.sampleDate() ?
this.sampleDate().format("ddd, DD MMM YYYY") :
'';
}, vm);
ko.applyBindings(vm);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<input type="text" data-bind="datepicker: sampleDate" /> <br />
<pre data-bind="text: ko.toJSON($root, null, 2)"></pre>
正如你所看到的,值2015-11-02
现在转化为UTC"2015-11-01T16:00:00.000Z"
时,我就可以用moment()
。这是我不希望的,因为我想保留我从数据库
了所以我的问题是:
我的临时解决方案是post
的computed
变量。 (formattedDate
和它的工作原理)
请帮我理解错误发生的原因。任何帮助将非常感谢谢谢!
#1,我说的对,如果日期有'Z'在最后表示为UTC基于ISO-8601格式? #2我尝试使用'toDate',但结束发布日期的最小值,而不是我使用'toISOString'。你怎么看? –
如果使用'toISOString',则日期在时区Z中表示。并且,除非您制作自定义绑定程序ASP。NET MVC简化日期没有考虑到时区。对于该时区东部的任何国家(西欧,葡萄牙和英国除外)将获得之前的日期。您可以尝试在发布之前使用'.utcOffset'时刻来纠正此问题。但是如果你开始使用日期和时间部分,这会导致问题。 – JotaBe
是的。但我不需要时间部分,因为我只需要存储'日期'和日期。我轮到一个日历日期。我从数据库中检索到的值与它在页面上显示的值相同。没有转换。我有什么选择?由于'toDate()'会给我最小日期值。 'toISOString'会吗? –