在JavaScript中解析DateTime字符串


Answers:


140

看到:

码:

var strDate = "03.09.1979";
var dateParts = strDate.split(".");

var date = new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]);

mmm,但是如何检查strDate具有无效值,例如“ 30.30.2000”?
博士

2
@ user674887,您可以在解析后比较这些值。例如,dateParts [1] -1 == date.getMonth()
Jonathan Fingland 2011年

如果您都有两个这样的日期:“ 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 2014年

无法相信您必须使用拆分来获取javascript中的预期日期格式
Claudiu Creanga '16

其他人发现有关Date对象本身的Mozilla参考文章说的很奇怪"Note: parsing of date strings with the Date constructor (and Date.parse, they are equivalent) is strongly discouraged due to browser differences and inconsistencies."吗?
NanoWizard '16

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/


21
+1我并不认为完全超出范围,JavaScript和JQuery是常见的组合。
djna 2012年

答案不应依赖OP中未标记或提及的库。当3行函数可以完成相同的工作时,将jQuery用作日期库是很大的替代。
RobG


6

裁判: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是一个矫kill过正,因为使用纯JavaScript仅需要数百个字节,而MomentJS压缩为12.4kb。对开发人员来说很方便,但是会降低网站速度。不值得。
猛禽2015年

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

使用日期对象:

var time = Date.parse('02.02.1999');
document.writeln(time);

给:917902800000


16
new Date(Date.parse('02.02.1999'))
2013年

+1 For Duke对new Date(Date.parse('02.02.1999'))Javascript的评论
杰克

在至少两个当前浏览器中返回NaN。请参阅为什么Date.parse给出不正确的结果?
RobG

@Duke- new Date(Date.parse('02.02.1999'))将产生与相同的结果new Date('02.02.1999'),包括在某些浏览器中的无效日期。使用内置解析器可以说是解析时间戳的最差方法。
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

快乐...的意思是只是了解senario
Bachas

好。我认为您的示例与Martin Staufcik给出的示例没有什么不同。实际上,他的答案还有其他逻辑可以处理无效日期。
萨加尔

Martin Staufcik处理通常不会发生的那些情况。你能给我任何可以使无效的日历吗?为什么当我们能以短方式处理时我们应该写那么长的代码。如果马丁·斯塔夫奇克(Martin Staufcik)也愿意花点时间处理日期,那会更好。
巴查斯(Bachas)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.