Расчет разницы дат на основе условия - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь использовать разные даты в условии для вычисления разницы дат.Мои расчеты основаны на следующих условиях:

Сценарий 1: Дата начала SAE <Дата начала приема препарата или нет Начало приема дозы препарата Продолжительность: «До начала лечения» </p>

Сценарий 2: Начало SAEДата> = Дата начала приема препарата и Дата начала приема препарата SAE <= Дата прекращения приема препарата или дата отсутствия приема препарата. Продолжительность приема дозы: Дата начала приема препарата SAE - Дата начала приема препарата + 1 + «дни» </p>

Сценарий 3: Дата начала приема препарата SAE> ПрепаратДата окончания Доза Длительность: SAE Дата начала - Дата окончания приема препарата + «дни после последней дозы»

Приведенный ниже код является модификацией первой версии, в которой использовались только 2 даты, и она работала правильно.Но когда применяется 3-я дата к условию, она больше не работает.Не уверен, что я делаю неправильно в функции 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 голосов
/ 03 апреля 2019

Вы проверяете пустую дату, сравнивая ее с пустой строкой - однако функция 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 "; 
 } 
}
...