Преобразование строки datetime в метку времени в Javascript

Вопрос вкратце:

Самый простой способ конвертировать date-month-year hour(24):minute в timestamp?

из-за большего количества просмотров добавьте четкий вопрос наверху, так что вам не нужно проходить через background & all, если вам нужна быстрая помощь.


Задний план :

У меня простая 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 которая представляет собой число, которое представляет текущее время и дату.

Ответ 1

Синхронизация дат - это боль в 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

Вы также можете использовать регулярное выражение с группами захвата для синтаксического анализа строки даты в одной строке.

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"]

Ответ 2

Date.parse() не является конструктором, его статическим методом.

Итак, просто используйте

var timeInMillis = Date.parse(s);

вместо

var timeInMillis = new Date.parse(s);

Ответ 3

Похоже, проблема связана с форматом даты.

 var d = "17-09-2013 10:08",
 dArr = d.split('-'),
 ts = new Date(dArr[1] + "-" + dArr[0] + "-" + dArr[2]).getTime(); // 1379392680000

Ответ 4

Для тех из нас, кто использует нестандартные форматы даты, отличные от ISO, например, гражданский язык 01/01/2001 (мм/дд/год), включая время в формате даты 12 часов с отметками am/pm, следующая функция вернет действительный объект 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');