0

ユーザーがフォームに入力した日付と現在の日付の違いを見つける必要があるアプリケーションに取り組んでいます。今私が持っているコードでは、現在の日付を入力すると、常に2の違いが表示されます。これを修正する方法についてアドバイスをいただければ幸いです。

function compareDates(dueDate) {  //dueDate is the value from the form
var cdate = new Date();
var cdateparse = Date.parse(cdate);
var dueDateparse = Date.parse(dueDate);
var diff = dueDateparse - cdateparse;
var daysCal = diff / 1000 / 60 / 60 / 24;
var days = Math.floor(daysCal);
console.log(days);  //keeps returning -2 when I enter the current date into the form
try {
 if(diff < 0) {
 mymessage = "this task is overdue by" + " " + -days + " " + "days"; //shows 2 
  throw new Error("you are overdue");
  }
  }
 catch(ex) {
 alert(ex.message);
 return;
 }
if(diff > 0) {
console.log("the difference is greater than 0");
mymessage = "you have" + " " + days + " " + "more days";
}
}
4

3 に答える 3

0

私はmoment.jsライブラリを使用して処理します。これには、差分APIが組み込まれており、次のように使用されます。

var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b, 'days') // 1
于 2013-03-19T02:09:18.823 に答える
0

Math.floor() を適用する前に、daysCal 値を丸める必要があります。

.....

var days = Math.floor(Math.round(daysCal));
.....
于 2013-03-19T04:34:49.067 に答える
0

Date.now()まず、代わりに使用する必要がある現在の日付を取得します+new Date。ブラウザーをサポートする場合は高速であり、IE<9 のこのポリフィルはパイのように簡単です。

Date.now = Date.now || function() {
    return +new Date;
};

ただし、moment.jsを使用する場合は、これを行う必要さえありません。

moment(someDate).fromNow()

.fromNow()momentjs.comで


@Slace が推奨するように moment.js を使用することをお勧めします。作成中の Web アプリで moment.js を使用しています。それらの相対日付メソッドは、「数秒前」、「4 年前」などの読みやすい形式を返します。非常にシンプルです。

于 2013-03-19T04:47:36.537 に答える