在JavaScript中解析日期时间字符串

95

有人知道如何解析日期字符串到所需的格式dd.mm.yyyy吗?


你想从一个字符串中创建一个符合该格式的新日期对象吗? - Kieran Hall
9个回答

139

嗯,但如何检查strDate是否具有类似于“30.30.2000”的无效值? - Dr. No
2
@user674887,您可以在解析后比较这些值。例如,dateParts [1] - 1 == date.getMonth()。 - Jonathan Fingland
如果您有像这样的日期和时间:"2014-05-20T16:43:56.71-06:00"var partesFecha = solicitud.CreatedDate.split("T")[0].split("-"); var createdDate = new Date(partesFecha[0], (partesFecha[1] - 1), partesFecha[2]);首先提取T之前的日期,然后拆分年、月和日。 - RolandoCC
难以置信在JavaScript中必须使用split来获取预期的日期格式。 - Claudiu Creanga
还有其他人觉得Mozilla关于Date对象本身的参考文章中说“注意:由于浏览器之间的差异和不一致性,强烈不建议使用Date构造函数(和Date.parse,它们是等效的)解析日期字符串。”这很奇怪吗? - NanoWizard

51

如果您正在使用jQuery UI,则可以使用以下方法格式化任何日期:

<html>
    <body>
        Your date formated: <span id="date1"></span><br/>
    </body>
</html>

 

var myDate = '30.11.2011';
var parsedDate = $.datepicker.parseDate('dd.mm.yy', myDate);

$('#date1').text($.datepicker.formatDate('M d, yy', parsedDate));

http://jsfiddle.net/mescalito2345/ND2Qg/14/


22
+1 我认为这并不超出范围,JavaScript 和 JQuery 是常见的组合。 - djna
一个答案不应该依赖于在 OP 中没有标记或提到的库。当一个三行函数可以完成同样的工作时,使用 jQuery 作为日期库是巨大的过度设计。 - RobG

9
我们使用这段代码来检查字符串是否为有效日期。
var dt = new Date(txtDate.value)
if (isNaN(dt))

给定的格式与 https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Date/parse 所需的格式不匹配(因此 Date 构造函数将无法使用)。 - Jonathan Fingland
这根本没有测试有效日期,它只是测试Date构造函数是否可以从输入中生成有效日期。这两个东西并不相同。 - RobG

7

参考文献: http://momentjs.com/docs/#/parsing/string/

如果您使用moment.js,可以使用“字符串”+“格式”模式

moment(String, String);
moment(String, String, String);
moment(String, String, Boolean);
moment(String, String, String, Boolean);

示例:

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

2
对于大多数情况而言,MomentJS 是一种过度设计,因为使用纯 JavaScript 只需要几百字节,而 MomentJS 则需要 12.4kb 的压缩文件。虽然方便开发人员,但会拖慢网站速度。不值得。 - Raptor

3

我在IE中使用以下代码。(兼容IE8)

var dString = "2013.2.4";
var myDate = new Date( dString.replace(/(\d+)\.(\d+)\.(\d+)/,"$2/$3/$1") );
alert( "my date:"+ myDate );

2

OP没有提到他使用ASP.NET。 - Raptor

2
使用Date对象:
var time = Date.parse('02.02.1999');
document.writeln(time);

给出:917902800000


16
new Date(Date.parse('02.02.1999')) - Duke
+1 对于 Javascript 中 new Date(Date.parse('02.02.1999')) 的 Duke 评论 - Jack
在至少两个当前的浏览器中,返回NaN。请参见为什么Date.parse会给出错误的结果?(https://dev59.com/jXE85IYBdhLWcg3w2HNa) - RobG
@Duke- new Date(Date.parse('02.02.1999'))将产生与new Date('02.02.1999')相同的结果,包括在某些浏览器中的Invalid Date。使用内置解析器可以说是解析时间戳的最糟糕的方法。 - RobG

2

这个函数还可以处理无效的日期,如 29.2.2001。

function parseDate(str) {
    var dateParts = str.split(".");
    if (dateParts.length != 3)
        return null;
    var year = dateParts[2];
    var month = dateParts[1];
    var day = dateParts[0];

    if (isNaN(day) || isNaN(month) || isNaN(year))
        return null;

    var result = new Date(year, (month - 1), day);
    if (result == null)
        return null;
    if (result.getDate() != day)
        return null;
    if (result.getMonth() != (month - 1))
        return null;
    if (result.getFullYear() != year)
        return null;

    return result;
}

0

您可以通过使用JavaScript代码中的这种类型来格式化日期。

 // for eg.
              var inputdate=document.getElementById("getdate").value);
                 var datecomp= inputdate.split('.');

                Var Date= new Date(datecomp[2], datecomp[1]-1, datecomp[0]); 
                 //new date( Year,Month,Date)

你应该使用 JavaScript 而不是 jQuery,因为没有 jQuery 标签。 - Sagar
快乐...的意思只是理解情境。 - Bachas
嗯,我认为你的例子与Martin Staufcik给出的例子没有任何区别。事实上,他的答案还有额外的逻辑来处理无效日期。 - Sagar
Martin Staufcik 处理通常不会发生的条件。你能给我一个可以使其无效的日历吗?为什么我们要写那么长的代码,当我们可以用简短的方式处理呢?如果 Martin Staufcik 还能处理日期和时间,那就更好了。 - Bachas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接