我正在尝试在条件中使用不同的日期来计算日期差。 我的计算基于以下条件:
方案1:SAE发病日期<药物开始日期或无药物开始状态 剂量持续时间:“药物治疗之前”
方案2:SAE起始日期> =药物起始日期和SAE起始日期<=药物终止日期或无药物终止日期 剂量持续时间:SAE发作日期–药物开始日期+ 1 +“天”
方案3:SAE发病日期>停药日期 剂量持续时间:SAE发病日期–药物终止日期+“最后一次给药后的天数”
下面的代码是对第一个版本的修改,仅使用了2个日期,并且工作正常。但是,将第三个日期应用于条件时,它不再起作用。不知道我在DiffInDays函数中做错了什么。
<script src="includes/jmesa/jquery.min.js">// for OC versions before 3.1.4, use jquery-1.3.2.min.js !</script>
<script>
$.noConflict();
jQuery(document).ready(function($) {
var fieldDate1 = $("#onsetDT").parent().parent().find("input");
var fieldDate2 = $("#startDT").parent().parent().find("input");
var fieldDate3 = $("#endDT").parent().parent().find("input");
var fieldDiff = $("#Diff").parent().parent().find("input");
function OCDateToJDate(OCDate){
var dateParts = OCDate.split("-");
var JDate = new Date(1900,1,1);
JDate.setFullYear(dateParts[2]);
JDate.setMonth(Calendar._SMN.indexOf(dateParts[1]));
JDate.setDate(dateParts[0]);
return JDate;
}
function DiffInDays(OCDate1, OCDate2, OCDate3){
var msecPerDay = 1000 * 60 * 60 * 24;
var onsetdt=OCDateToJDate(OCDate1).getTime();
var startdt=OCDateToJDate(OCDate2).getTime();
var enddt=OCDateToJDate(OCDate3).getTime();
if (((onsetdt>=startdt) && (onsetdt<=enddt)) || (enddt==='')){
var days = Math.round((onsetdt - startdt)/ msecPerDay );
return days+1+" days";
}
if ((onsetdt<startdt) || (startdt==='')){
return "Prior to drug treatment"
}
if(onsetdt>startdt){
var days = Math.round((onsetdt-enddt) / msecPerDay );
return days+" days post last dose "; }
}
function calcDiff(){
var calculatedDifference = DiffInDays(fieldDate1.val(), fieldDate2.val(), fieldDate3.val());
if (fieldDiff.val() != calculatedDifference){
fieldDiff.val(calculatedDifference);
fieldDiff.change();
}
};
fieldDate1.blur(function(){ calcDiff(); });
fieldDate2.blur(function(){ calcDiff(); });
fieldDate3.blur(function(){ calcDiff(); });
fieldDiff.blur(function(){ calcDiff(); })
fieldDiff.focus(function(){
calcDiff();
})
$("#srl").focus(function(){
calcDiff();
});
$("#srh").focus(function(){
calcDiff();
});
})
</script>
结果将符合我之前提到的条件。
任何帮助表示赞赏。谢谢!
答案 0 :(得分:0)
您正在通过比较空字符串来检查空日期-但是,函数OCDateToJDate()
返回的是日期,而不是字符串。
function OCDateToJDate(OCDate)
{
var dateParts = OCDate.split("-");
var JDate = new Date(1900,1,1);
if(dateParts.length === 3)
{
JDate.setFullYear(dateParts[2]);
JDate.setMonth(Calendar._SMN.indexOf(dateParts[1]));
JDate.setDate(dateParts[0]);
}
return JDate;
}
function DiffInDays(OCDate1, OCDate2, OCDate3)
{
var msecPerDay = 1000 * 60 * 60 * 24;
var empty = (new Date(1900,1,1)).getTime();
var onsetdt=OCDateToJDate(OCDate1).getTime();
var startdt=OCDateToJDate(OCDate2).getTime();
var enddt=OCDateToJDate(OCDate3).getTime();
if ((onsetdt<startdt) || (startdt===empty))
{
return "Prior to drug treatment"
}
if (((onsetdt>=startdt) && (onsetdt<=enddt)) || (enddt===empty))
{
var days = Math.round((onsetdt - startdt)/ msecPerDay );
return (days+1) + " days";
}
if(onsetdt>startdt)
{
var days = Math.round((onsetdt-enddt) / msecPerDay );
return days + " days past last dose ";
}
}