Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中将日期时间字符串转换为时间戳_Javascript_Jquery - Fatal编程技术网

在Javascript中将日期时间字符串转换为时间戳

在Javascript中将日期时间字符串转换为时间戳,javascript,jquery,Javascript,Jquery,问题简介: 将日期-月-年-小时(24):分钟转换为时间戳的最简单方法是什么 由于有更多的视图,在顶部添加了清晰的问题,因此无需查看背景&如果需要快速帮助,请参阅 背景: 我有一个简单的html表格,我过去常常对表格列进行排序 一切正常,除了日期列有以下数据格式 17-09-2013 10:08 date-month-year hour(24):minute 此列正在排序(按字母顺序),但不是我预期的(按日期)。我尝试使用自定义解析器,如下所示: $.tablesorter.addParse

问题简介:

将日期-月-年-小时(24):分钟转换为时间戳的最简单方法是什么

由于有更多的视图,在顶部添加了清晰的问题,因此无需查看背景&如果需要快速帮助,请参阅


背景:

我有一个简单的html表格,我过去常常对表格列进行排序

一切正常,除了日期列有以下数据格式

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' 
}); 
问题: 由于
新的日期。解析
而失败

问题: 将日期-月-年-小时(24):分钟转换为时间戳的最简单方法是什么?然后我可以跳过
var timeInMillis=newdate.parse(s)

谢谢

编辑:


很抱歉关于
毫秒的混淆
,实际上它应该是
时间戳
,这是一个代表当前时间和日期的数字。

似乎是日期格式的问题

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

解析日期在JavaScript中是一个难题,因为没有广泛的本机支持。但是,您可以通过依赖对象的
日期(年、月、日[、小时、分钟、秒、毫秒])
构造函数签名来执行以下操作

您还可以使用带有捕获组的正则表达式来解析一行中的日期字符串

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"]
Date.parse()
不是构造函数,而是静态方法

所以,只要使用

var timeInMillis = Date.parse(s);
而不是

var timeInMillis = new Date.parse(s);

对于我们这些使用非ISO标准日期格式的人,如民用方言01/01/2001(mm/dd/YYYY),包括带有am/pm标记的12小时日期格式的时间,以下函数将返回有效的日期对象:

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.parse()
有什么问题,它怎么不起作用呢?您可以使用
moment.js
:将时间转换为毫秒您确切的意思是什么转换为毫秒?你不能仅仅把一个日期转换成毫秒。日期是对特定时间点的引用,毫秒是对特定时间点的时间度量,如果你明白我的意思的话。你可以从一个特定的日期得到毫秒数,比如从2013年9月17日开始的毫秒数,但是因为你有一整列的日期,我猜这不是你想要的。或者您可以将毫秒添加到当前时间以获得更精确的点,这就是您要查找的吗?@Pekka error:
TypeError:Date.parse不是构造函数
编码时查看控制台。请查看文档以了解更多信息。您的日期字符串格式有效吗?文档将告诉您。正如澄清所述:
日期-月-年-小时(24):分钟
将解析为
月-日-年-小时(24):分钟
;Sumurai8:OP的问题是,将时间转换为毫秒的最简单方法是什么?另一部分是什么?我尝试了一下,在
s.split('-')
@kadaj中得到了
未定义的
。不过我想你是对的。我相信
新日期(…).getTime()和
日期.解析(…)
做同样的事情。@Janith Chinthana
s
打印什么?我能用
日期部件做什么?@Janith Chinthana,正则表达式示例只是显示了一种解析日期字符串的替代方法,而不是使用多个
split
调用。链接到MDN(不是W3)!很好+1@plalx,当var dateString='17-09-2013 10:08:30'时,它不工作;当有第二个对应的
Date时基本上不工作。parse()
是最好的解决方案。它在任何情况下都有效,但不是真的。我有一个关于NaN的例子,那么你的例子是什么@格拉夫米科洛申里奇
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');