如何将字符串转换为JavaScript日期对象?

var st = "date in some format"
var dt = new Date();

var dt_st = // st in Date format, same as dt.

当前回答

日期。解析几乎可以得到你想要的。它在上午/下午部分窒息,但通过一些黑客你可以让它工作:

var str = 'Sun Apr 25, 2010 3:30pm',
    timestamp;

timestamp = Date.parse(str.replace(/[ap]m$/i, ''));

if(str.match(/pm$/i) >= 0) {
    timestamp += 12 * 60 * 60 * 1000;
}

其他回答

只是新日期(st);

假设这是正确的格式。

字符串解析的最佳字符串格式是ISO日期格式和JavaScript date对象构造函数。

ISO格式的例子:YYYY-MM-DD或YYYY-MM-DDTHH:MM:SS。

但是等等!仅仅使用“ISO格式”本身并不能可靠地工作。字符串有时解析为UTC,有时解析为localtime(基于浏览器供应商和版本)。最佳实践应该始终是将日期存储为UTC,并以UTC进行计算。

要将日期解析为UTC,请添加Z -例如:new date ('2011-04-11T10:20:30Z')。

使用.toUTCString()显示UTC日期, 使用. tostring()以用户的本地时间显示日期。

关于MDN |日期和这个答案的更多信息。

对于旧的Internet Explorer兼容性(小于9的IE版本在日期构造函数中不支持ISO格式),您应该将日期时间字符串表示拆分为部分,然后您可以使用使用日期时间部分的构造函数,例如:new Date('2011', '04' - 1, '11', '11', '51', '00')。注意,月份的数字必须小于1。


替代方法-使用适当的库:

您还可以利用Moment.js库,该库允许使用指定的时区解析日期。

建议:我建议使用包含很多格式的日期包,因为时区和格式时间管理确实是一个大问题,moment js解决了很多格式。你可以很容易地从一个简单的字符串解析日期,但我认为这是一个艰苦的工作,以支持所有格式和日期的变化。

更新:Moment现在已弃用,一个很好的Moment的替代品是datefns https://date-fns.org/


moment.js (http://momentjs.com/)是一个完整和良好的使用日期包,支持ISO 8601字符串。

您可以添加字符串日期和格式。

moment("12-25-1995", "MM-DD-YYYY");

你可以检查一个日期是否有效。

moment("not a real date").isValid(); //Returns false

一些显示示例

let dt = moment("02-01-2019", "MM-DD-YYYY");
console.log(dt.fromNow()+' |'+dt.format('LL')) 
// output: "3 months ago | February 1, 2019"

看文档 http://momentjs.com/docs/#/parsing/string-format/

这个答案是基于卡塞姆的答案,但它也适用于两位数的年份。我对卡塞姆的答案进行了编辑,但以防它没有被批准,我还将这个作为单独的答案提交。

function stringToDate(_date,_format,_delimiter) {
        var formatLowerCase=_format.toLowerCase();
        var formatItems=formatLowerCase.split(_delimiter);
        var dateItems=_date.split(_delimiter);
        var monthIndex=formatItems.indexOf("mm");
        var dayIndex=formatItems.indexOf("dd");
        var yearIndex=formatItems.indexOf("yyyy");
        var year = parseInt(dateItems[yearIndex]); 
        // adjust for 2 digit year
        if (year < 100) { year += 2000; }
        var month=parseInt(dateItems[monthIndex]);
        month-=1;
        var formatedDate = new Date(year,month,dateItems[dayIndex]);
        return formatedDate;
}

stringToDate("17/9/14","dd/MM/yyyy","/");
stringToDate("17/9/2014","dd/MM/yyyy","/");
stringToDate("9/17/2014","mm/dd/yyyy","/")
stringToDate("9-17-2014","mm-dd-yyyy","-")

如果你可以使用很棒的luxon库,你可以很容易地解析你的日期。

var luxonDate = DateTime.fromISO("2014-09-15T09:00:00");

和可以访问JS date对象通过

luxonDate().toJSDate();

旧的答案使用的是MomentJS

var momentDate = moment("2014-09-15 09:00:00");
momentDate ().toDate();