1

datetimepicker tetxbox から値を取得し、それらの値を現在の時刻と比較しようとしています。

JSFiddle

        //startTime textbox text = 19/12/2014 03:58 PM
        var startTime = Date.parse($('[id$=txtStartDate]').val().toString());

        //endTime textbox text = 19/12/2014 04:58 PM
        var endTime = Date.parse($('[id$=txtEndDate]').val().toString());

        var currentTime = Date.now();
        alert(startTime);
        alert(endTime);
        alert(currentTime);

        if (currentTime >= startTime && currentTime <= endTime) {
              alert();

        }

Date.parse() は、文字列を 1970 年 1 月 1 日以降のミリ秒に変換するために使用されます。Date.now() は、1970 年 1 月 1 日以降の現在の日付のミリ秒を返します。

しかし、上記の変換方法は正しく機能していません。最初に19/12/2014 03:58 PMのような形式の文字列をDateオブジェクトに変換してから比較することにより、datetimeを比較するロジックは何ですか。

4

3 に答える 3

3

問題はDate()日付形式が mm/dd/yyyy であるため、日付が無効です。

次のように日付を修正できます。

function toValidDate(datestring){
    return datestring.replace(/(\d{2})(\/)(\d{2})/, "$3$2$1");   
}

var startTime = Date.parse(toValidDate($('[id$=txtStartDate]').val().toString())); 
var endTime = Date.parse(toValidDate($('[id$=txtEndDate]').val().toString()));    
var currentTime = Date.now();

alert(startTime);
alert(endTime);
alert(currentTime);

デモ: http://jsfiddle.net/3mztdaja/3/

于 2014-12-19T11:13:53.863 に答える
2

その形式は でサポートされていると文書化されていないDate.parseため、最善の策は自分で解析することです。これは難しくありません:String#splitまたは正規表現をキャプチャ グループと共に使用して、個々の部分に分割しparseInt、数値文字列を数値に変換し (または、このような制御された入力では単項+を使用するだけです)、new Date(...)それらの数値を使用してDateインスタンスを作成します。

1 つの落とし穴:期待されるmonth値はゼロベースです。たとえば、0 = 1 月です。また、入力が 24 時間制ではなく AM/PM を使用する場合は、時間の値に 12 を追加することを忘れないでください。new Date


または、もちろん、MomentJSなどのいくつかの日付/時刻処理ライブラリのいずれかを使用します。

于 2014-12-19T11:04:51.773 に答える
1

この方法を使用する必要があります

var startTime  = new Date(year, month, day, hours, minutes, seconds, milliseconds);

これはデモhttp://jsfiddle.net/hswp7x8k/

文字列から値を抽出するには、このメソッドを使用できます

dd = '19/12/2014 03:58';
dd.match(/(\d+)\/(\d+)\/(\d+)\s*(\d+):(\d+)/);

これはデモhttp://jsfiddle.net/w3wow1ay/2/

于 2014-12-19T11:06:38.303 に答える