2011-11-21 27 views
45

私は 'date_trans'のIDを持つフォーム入力を持っています。/入力日付が今日の日付と等しいかどうかをチェックする方法は?

  • DD/MM/YYYY
  • DD-MM-YYYY
  • YYYY-MM-DD
  • YYYY:(サーバ側検証され)、その日付入力の形式は任意であることができますmm/dd

ただし、フォームを送信する前に、date_transフィールドの日付が今日の日付と等しいかどうかを確認したいと思います。私はサーバでも二重チェックを実行するので、撮影日がクライアントの日付(つまりjsを使用する)であればOKです。

私はjQueryのdate comparionsをやっているか、まったく古い古いJavaScriptをどうやってやっているのか全く分かりません。それが助け場合、私はUTC *メソッドを使用してjquery datepicker

+0

ところで、これらはあなたが受け入れているいくつかの愚かな日付形式です。あなたがそれらを受け入れるという決定を支配しているなら、私はそれらのすべての有用性/必要性を再考することを提案します。 – Phrogz

+0

彼らについては何が愚かですか?私たちは複数の国で活動しており、受け入れられているフォーマットです。皆さんが(ばかばかしい)米国のフォーマットで働いていると思いますか? – JonoB

+0

グッドネス、いいえ!米国のフォーマットは面倒ですが、それはあなたのリストには存在しませんが、あなたの最初のケースでは簡単には分かりません。あなたが4つすべてが必要であると確信したら、是非それらを使用してください。私にとっては、あなたが同時に恣意的に許可し、任意に制限することを選択したようです。 * shrug * – Phrogz

答えて

-4

あなたはを見ましたか?datejs (適切なグローバリゼーション・パックを使用してdd/mm/yyyyを正しく解析する)

日付をparse()メソッドに渡し、今日の日付と比較するだけです。

7
function sameDay(d1, d2){ 
    return d1.getUTCFullYear() == d2.getUTCFullYear() && 
     d1.getUTCMonth() == d2.getUTCMonth() && 
     d1.getUTCDate() == d2.getUTCDate(); 
} 

if (sameDay(new Date(userString), new Date)){ 
    // ... 
} 

を使用しています異なるタイムゾーンにある2つの等価日が同じグローバル日に一致することを保証同じです。 (両方の日付を直接解析する場合は必要ありませんが、考えてみるとよいでしょう)

+0

これは実際には月のインデックスではなく月の番号そのものではないことを言及する必要があります。したがって、1を追加する必要があります –

+0

ほとんどの場合、最初は等しい日、次に月、 –

+0

@ xcy7e笑入力データにもよりますが、可能性があります。ただし、実際に測定可能な違いがあるテストケースを作成できる場合は、非常に感心します。 – Phrogz

0

Date.jsは、日付の操作と書式設定のための便利なライブラリです。それはこの状況で助けることができます。純粋なJSで

+1

日付比較のみにDate.jsを使用する必要がありますか? – Exception

+0

いいえ、あなたはしません。しかし、日付が異なるフォーマットであれば、Date.jsはそれらを正規化すると便利です。 –

136

簡単な日付の比較が十分でなければなりません:

// Create date from input value 
var inputDate = new Date("11/21/2011"); 

// Get today's date 
var todaysDate = new Date(); 

// call setHours to take the time out of the comparison 
if(inputDate.setHours(0,0,0,0) == todaysDate.setHours(0,0,0,0)) { 
    // Date equals today's date 
} 

はここa working JSFiddleです。

+1

+1は 'setHours'の時/分/秒/ミリ秒版を使用しています。 – Phrogz

+3

日付の書式が「21-11-2011」または「21/11/2011」の場合には動作しません – JonoB

+4

入力した日付を再利用したい場合は、複製することを忘れないでください。 setHours(0,0,0,0) –

4

ちょうどあなたのJavaScriptで次のコードを使用します。

if(new Date(hireDate).getTime() > new Date().getTime()) 
{ 
//Date greater than today's date 
} 

変更は、あなたのrequirement.Hereに応じて条件は比較ですのための1つのリンク​​3210

18

使用してみてくださいmoment.js

moment('dd/mm/yyyy').isSame(Date.now(), 'day'); 
です

「日」の文字列を「年、月、分」に置き換えることができます。完全性について

55

this solutionから撮影:

あなたはtoDateString使用することができます

私見、

var today = new Date(); 
var isToday = (today.toDateString() == otherDate.toDateString()); 

なしライブラリの依存関係、および前の回答に示す 'setHours()' アプローチよりもクリーン探しを

+0

これは扱いにくいです。角型時計の場合、私はnewDates [i] = 1476252000000とoldDates [i] === 1476252000000を持っています。しかし、それらは等しくありません。 Date.parse(newDates [1])=== Date.parse(oldDates [1]) はfalseを返します。 – Winnemucca

+0

@Winnemucca与えられた値に対して私のために 'true'を返します。等価チェックのために 'Date.parse'を使用する必要はありません – User528491

-1
TodayDate = new Date(); 
if (TodayDate > AnotherDate) {} else{} 

< =も使用できますが、=とともに、ミリ秒に一致する必要があります。

+0

日付にも時刻がある場合、これは機能しません。 –

0

次の解決策では、タイムスタンプの整数を時間、分、秒、ミリ秒の値で割った値を比較します。

var reducedToDay = function(date){return ~~(date.getTime()/(1000*60*60*24));}; 
return reducedToDay(date1) == reducedToDay(date2) 

チルダtruncs除算結果(this article about integer divisionを参照)

関連する問題