Javascript 检查日期,如果距离今天不到一个月,则使用Knockout.js显示一些内容

Javascript 检查日期,如果距离今天不到一个月,则使用Knockout.js显示一些内容,javascript,jquery,jquery-ui,knockout.js,Javascript,Jquery,Jquery Ui,Knockout.js,我有一个输入字段,要求用户选择一个日期,如果该日期小于今天的30天,它将显示一些其他内容。我正在使用jQueryUI datapicker和knockout.js进行数据绑定,这是我到目前为止所做的,但它不起作用。我错过了什么 $(文档).ready(函数(){ $(“#日期选择器”).datepicker(); }); $(文档).ready(函数(){ var viewModel=函数(){ var self=这个; self.request_due_date=ko.observable(

我有一个输入字段,要求用户选择一个日期,如果该日期小于今天的30天,它将显示一些其他内容。我正在使用jQueryUI datapicker和knockout.js进行数据绑定,这是我到目前为止所做的,但它不起作用。我错过了什么

$(文档).ready(函数(){
$(“#日期选择器”).datepicker();
});
$(文档).ready(函数(){
var viewModel=函数(){
var self=这个;
self.request_due_date=ko.observable();
self.request\u due\u date\u rush=ko.可观察(假);
self.request_due_date_rush_reason=ko.observable();
自助申请、到期日、订阅(功能(dd){
var cur=新日期(),
rush_date=cur.setDate(cur.getDate()+30);
如果(dd<赶工日期){
自我请求、到期日、赶时间(真);
}
});
};
应用绑定(新的viewModel());
});
截止日期:
赶工原因:

您需要绑定
,而不是
文本

<input id="datepicker" data-bind="value: request_due_date" type="text" />

请参见

这是因为当您创建datepicker对象时,底层输入元素在DOM中被移动,从而破坏了绑定。考虑编写自己的绑定处理程序,就像在这里看到的:

感谢@MaxBrodin提供的洞察力(绑定
,而不是
文本
),我发现以下解决方案可行。以下是最新的

$(文档).ready(函数(){
$(“#日期选择器”).datepicker();
});
$(文档).ready(函数(){
var viewModel=函数(){
var self=这个;
self.request_due_date=ko.observable();
self.request\u due\u date\u rush=ko.可观察(假);
self.request_due_date_rush_reason=ko.observable();
自助申请、到期日、订阅(功能(dd){
var date1=新日期(dd);
var date2=新日期();
var timeDiff=Math.abs(date2.getTime()-date1.getTime());
变量天数=数学单元(时间差/(1000*3600*24));
自我请求、到期日、高峰时间(天数<30天);
});
};
应用绑定(新的viewModel());
});
截止日期:
赶工原因:

如果将条件更改为(天<30天),它将正常工作,但不正确。它更新了几乎所有的DOMdate@Saeed你说得对,错误在于天数计数和日期格式。我想我(在你的帮助下)已经弄明白了。我把我的答案贴出来作为答案。
var days = moment().diff(moment(dd, "MM/DD/YYYY"), "days");