26

簡単な質問:

に変換する最も簡単な方法は何date-month-year hour(24):minuteですかtimestamp?

より多くのビューが上部に明確な質問を追加するため、バックグラウンドを通過する必要がなく、迅速なヘルプが必要な場合にすべて.


バックグラウンド :

シンプルな html テーブルがあり、jquery ソーターを使用してテーブルの列を並べ替えました。

次の形式のデータを持つ日付列を除いて、すべて正常に機能しています。

17-09-2013 10:08
date-month-year hour(24):minute

この列は (アルファベット順で) 並べ替えられていますが、期待どおりではありません (日付順)。次のようにカスタムパーサーを使用しようとしましたが、

$.tablesorter.addParser({ 
    id: 'date_column',  // my column ID
    is: function(s) { 
        return false; 
    }, 
    format: function(s) { 
        var timeInMillis = new Date.parse(s);
        return timeInMillis;         
    }, 
    type: 'numeric' 
}); 

問題: が原因で失敗しnew Date.parse(s)ます。

質問 :date-month-year hour(24):minuteタイムスタンプ に変換する最も簡単な方法は何ですか? 次に、行をスキップできvar timeInMillis = new Date.parse(s);ます。

ありがとう

編集:

について混乱して申し訳ありませんmilliseconds。実際にはtimestamp、現在の時刻と日付を表す数値である である必要があります。

4

4 に答える 4

40

JavaScript では日付の解析が面倒です。広範なネイティブ サポートがないからです。Date(year, month, day [, hour, minute, second, millisecond])ただし、オブジェクトのコンストラクター シグネチャに依存することで、次のようなことができDateます。

var dateString = '17-09-2013 10:08',
    dateTimeParts = dateString.split(' '),
    timeParts = dateTimeParts[1].split(':'),
    dateParts = dateTimeParts[0].split('-'),
    date;

date = new Date(dateParts[2], parseInt(dateParts[1], 10) - 1, dateParts[0], timeParts[0], timeParts[1]);

console.log(date.getTime()); //1379426880000
console.log(date); //Tue Sep 17 2013 10:08:00 GMT-0400

キャプチャ グループで正規表現を使用して、日付文字列を 1 行で解析することもできます。

var dateParts = '17-09-2013 10:08'.match(/(\d+)-(\d+)-(\d+) (\d+):(\d+)/);

console.log(dateParts); // ["17-09-2013 10:08", "17", "09", "2013", "10", "08"]
于 2013-09-17T12:29:57.370 に答える
1

午前/午後のマークを含む 12 時間形式の時刻を含む、一般的な 2001 年 1 月 1 日 (mm/dd/YYYY) などの非 ISO 標準の日付形式を使用している場合、次の関数は有効な Date オブジェクトを返します。 :

function convertDate(date) {

    // # valid js Date and time object format (YYYY-MM-DDTHH:MM:SS)
    var dateTimeParts = date.split(' ');

    // # this assumes time format has NO SPACE between time and am/pm marks.
    if (dateTimeParts[1].indexOf(' ') == -1 && dateTimeParts[2] === undefined) {

        var theTime = dateTimeParts[1];

        // # strip out all except numbers and colon
        var ampm = theTime.replace(/[0-9:]/g, '');

        // # strip out all except letters (for AM/PM)
        var time = theTime.replace(/[[^a-zA-Z]/g, '');

        if (ampm == 'pm') {

            time = time.split(':');

            // # if time is 12:00, don't add 12
            if (time[0] == 12) {
                time = parseInt(time[0]) + ':' + time[1] + ':00';
            } else {
                time = parseInt(time[0]) + 12 + ':' + time[1] + ':00';
            }

        } else { // if AM

            time = time.split(':');

            // # if AM is less than 10 o'clock, add leading zero
            if (time[0] < 10) {
                time = '0' + time[0] + ':' + time[1] + ':00';
            } else {
                time = time[0] + ':' + time[1] + ':00';
            }
        }
    }
    // # create a new date object from only the date part
    var dateObj = new Date(dateTimeParts[0]);

    // # add leading zero to date of the month if less than 10
    var dayOfMonth = (dateObj.getDate() < 10 ? ("0" + dateObj.getDate()) : dateObj.getDate());

    // # parse each date object part and put all parts together
    var yearMoDay = dateObj.getFullYear() + '-' + (dateObj.getMonth() + 1) + '-' + dayOfMonth;

    // # finally combine re-formatted date and re-formatted time!
    var date = new Date(yearMoDay + 'T' + time);

    return date;
}

使用法:

date = convertDate('11/15/2016 2:00pm');
于 2016-11-11T16:49:24.170 に答える