根据条件计算日期差

时间:2019-04-02 19:42:25

标签: javascript date calculation crf

我正在尝试在条件中使用不同的日期来计算日期差。 我的计算基于以下条件:

方案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>

结果将符合我之前提到的条件。

任何帮助表示赞赏。谢谢!

1 个答案:

答案 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 "; 
 } 
}