2016-08-18 9 views
0

他の質問がありましたが、私のコードで問題が見つかっていません。 しかし、私はまだに実行し、私は新しいの2つの日付を見つけようとしています、と私は次の操作を行うと日時の論理を比較する

var bool = false 
    if (year1 <= year2) 
     if (month1 <= month2) 
      if (day1 <= day2) 
       if (hours1 <= hours2) 
        if (minutes1 <= minutes2) 
         if (seconds1 <= seconds2) 
          bool = true; 
return bool; 

を比較することができますので、私は変数にDD、MM YY、HH、MM、SSを分割しています例えば、最初の日付が日の月と年と時ではなく、分と秒で大きい場合

例:時刻1が18/7/2016 15:16:4で時刻2が19/7/2016 18:14:59

時間2が新しいものであっても、それは問題の秒数であっても偽になります。 これはelseで修正できますか?あなたの質問のために

+1

理由だけで実行しない: '場合(YEAR1 <= YEAR2 && MONTH1 <= MONTH2 && 1日目の< = day2 && hours1 <= hours2 && minutes1 <= minutes2 && seconds1 <= seconds2){ \t \t bool = true; \t} '? – vaso123

+0

'Date'オブジェクトのネイティブ比較演算子を使用するのではなく、なぜフィールドの日付を分割するのですか? – Aaron

+0

[JavaScriptとの2つの日付の比較]の可能な複製(0125774/compare-two-dates-with-javascript) – Aaron

答えて

1

私はgetTime()機能を使用することをお勧めすることができます2日付

の新しいを見つけようとしています。

ダニで時間を比較できるようになります。

date1date2があるとします。 date1は、2015年6月10日午後03時20分30秒とdate2である16時30分50秒

date1.getTime() 2016年6月10日であるdate2.getTime()

DATE1 Human time (GMT): Wed, 10 Jun 2015 15:20:03 GMT Epoch timestamp: 1433949603 Timestamp in milliseconds: 1433949603000

日付2よりも小さくなります Human time (GMT): Fri, 10 Jun 2016 16:30:50 GMT Epoch timestamp: 1465576250 Timestamp in milliseconds: 1465576250000

example here

convertor here


更新:

// returns true if date1 is newer than date2 and false viceversa 
function compareForNewer(date1, date2) { 
    return date1.getTime() > date2.getTime(); 
} 

それとも、あなたは常に新しい日付を返すことができます。 ベローは、関数の例です。次のように:

// returns the newer date 
function getNewer(date1, date2) { 
    return date1.getTime() > date2.getTime() ? date1 : date2; 
} 

希望します。楽しい!

+0

論理的な音、私は試してみる、ありがとう – user3676224

+0

@ user3676224私は関数の例を追加;)幸運! – meorfi

+0

'>'演算子がNumberに引数を強制し、* getTime *と同じDateの内部時間値を返すので、* getTime *、 'date1> date2'は十分です。 – RobG

0

構文解析に関する質問には多くの回答がありますが、最終行は数行で特注の関数を書くことができるということですが、小さな構文解析と書式設定ライブラリを使用して作業する方が良いでしょう。 moment.js,date.jsfecha.jsなど、多くのものがあります。

たとえば、fechaを使用します。あなたができる、一般的なパーサがなけれ

/* Convert args to Dates, return earliest as a Date 
** or first as a date if they are equal. 
** requires fecha.js https://github.com/taylorhakes/fecha 
** 
** @param {string} dateStr0 - date string in DD/MM/YYYY hh:mm:ss format 
** @param {string} dateStr1 - date string in DD/MM/YYYY hh:mm:ss format 
** @returns {Date} earliest of dateStr0 and dateStr1 or dateStr0 if equal 
*/ 
function getEarliest(dateStr0, dateStr1) { 
    var d0 = fecha.parse(dateStr0, 'DD/MM/YYYY hh:mm:ss'); 
    var d1 = fecha.parse(dateStr1, 'DD/MM/YYYY hh:mm:ss'); 
    return d1 < d0? d1 : d0; 
} 

:JSとローカルとして扱われるべきである18/7/2016午前15時16分40秒のような入力形式を想定しては、次のようなgetEarliest機能の何かをしたいです次のような関数を使用し、解析ビットを置き換えるために使用します。また、それが有効な日付を作成したことを確認するための解析の結果をテストする必要があります。

/* Parse string in format DD/MM/YYYY hh:mm:ss 
 
** @param {string} s - date string in format DD/MM/YYYY hh:mm:ss 
 
** @returns {Date} if values invalid, returns invalid Date 
 
*/ 
 
function parseDate(s) { 
 
    var b = s.split(/\D/); 
 
    var d = new Date(b[2], --b[1], b[0], b[3], b[4], b[5]); 
 
    return d && d.getMinutes() == b[4] && d.getDate() == b[0] && d.getMonth() == b[1]? d : new Date(NaN); 
 
} 
 

 
/* Convert args to Dates, return earliest as a Date 
 
** or first as a date if they are equal. 
 
** If either date is invalid, returns undefined 
 
** 
 
** @param {string} dateStr0 - date string in DD/MM/YYYY hh:mm:ss format 
 
** @param {string} dateStr1 - date string in DD/MM/YYYY hh:mm:ss format 
 
** @returns {Date} earliest of dateStr0 and dateStr1 or 
 
**     dateStr0 if equal or 
 
**     undefined if either is invalid 
 
*/ 
 
function getEarliest(dateStr0, dateStr1) { 
 
    var d0 = parseDate(dateStr0); 
 
    var d1 = parseDate(dateStr1); 
 
    if (isNaN(d0) || isNaN(d1)) return; 
 
    return d1 < d0? d1 : d0; 
 
} 
 

 
// Both valid dates 
 
console.log(getEarliest('15/08/2016 15:23:48', '18/08/2016 17:25:08')) 
 

 
// One date invalid 
 
console.log(parseDate('15/08/2016 15:73:48', '18/08/2016 17:25:08'))