web-dev-qa-db-ja.com

javascript getTime()が関数ではないのはなぜですか?

私は次の機能を使用しました、

_function datediff()
{
 var dat1 = document.getElementById('date1').value;
 alert(dat1);//i get 2010-04-01
var dat2 = document.getElementById('date2').value;
 alert(dat2);// i get 2010-04-13

var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds
var diffDays = Math.abs((dat1.getTime() - dat2.getTime())/(oneDay));
alert(diffDays);
}
_

エラーdat1.getTime() is a function ....が表示されます。

33
udaya

_dat1_および_dat2_変数は単なる文字列であるためです。

それらを解析してDateオブジェクトを取得する必要があります。その形式では、常に次の関数を使用します。

_// parse a date in yyyy-mm-dd format
function parseDate(input) {
  var parts = input.match(/(\d+)/g);
  // new Date(year, month [, date [, hours[, minutes[, seconds[, ms]]]]])
  return new Date(parts[0], parts[1]-1, parts[2]); // months are 0-based
}
_

Date.parse(string) (またはnew Date(string))メソッドは実装に依存するため、およびyyyy-MM-dd形式は最新のブラウザで機能しますが、notIEでは、手動で行うことを好みます。

44
CMS

この関数/メソッドを使用するには、クラスのインスタンスDateが必要です。

このメソッドは、常にDateオブジェクトと組み合わせて使用​​されます。

以下のコードを参照してください。

var d = new Date();
d.getTime();

リンク: http://www.w3schools.com/jsref/jsref_getTime.asp

11
Haim Evgi

ここに来て実際に日付型変数を使用したすべての人のために、私が見つけた解決策があります。 TypeScriptにも適用されます。

私は次の方法を使用して2つの日付を比較しようとしたため、このエラーに直面していました

_var res = dat1.getTime() > dat2.getTime(); // or any other comparison operator
_

ただし、TypeScriptでangularjsを使用しており、型付きAPI呼び出しからデータを取得したため、Dateオブジェクトを使用したことは確かです。

エラーが発生する理由はわかりませんが、オブジェクトがJSONの逆シリアル化によって作成されたため、おそらくgetTime()メソッドが単にプロトタイプに追加されなかったと思われます。

溶液

この場合、日付に基づいて日付オブジェクトを再作成すると、問題が修正されます。

_var res = new Date(dat1).getTime() > new Date(dat2).getTime()
_

編集:

私はこれについて正しかった。型は対応する型にキャストされますが、インスタンス化されません。したがって、日付にキャストされる文字列があり、明らかにランタイム例外が発生します。

秘Theは、日付や関数などの非プリミティブのみのデータを持つインターフェイスを使用する場合、httpリクエストの後にマッピングを実行する必要があるということです。

_class Details {
    description: string;
    date: Date;
    score: number;
    approved: boolean;

    constructor(data: any) {
      Object.assign(this, data);
    }
}
_

マッピングを実行するには:

_public getDetails(id: number): Promise<Details> {
    return this.http
               .get<Details>(`${this.baseUrl}/api/details/${id}`)
               .map(response => new Details(response.json()))
               .toPromise();
}
_

配列の使用:

_public getDetails(): Promise<Details[]> {
    return this.http
               .get<Details>(`${this.baseUrl}/api/details`)
               .map(response => {
                   const array = JSON.parse(response.json()) as any[];
                   const details = array.map(data => new Details(data));
                   return details;
               })
               .toPromise();
}
_

クレジットと詳細情報 このトピックについては、リンクをたどってください。

7
LuckyLikey

dat1とdat2はJavaScriptの文字列です。 StringプロトタイプにはgetTime関数はありません。 Date.parse()関数が必要だと思います: http://www.w3schools.com/jsref/jsref_parse.asp

次のように使用します。

var date = Date.parse(dat1);
5
Ryan Doherty