当前位置: 首页 > 知识库问答 >
问题:

如何在JavaScript中解析格式为“YYYYmmdd”的日期?

樊熠彤
2023-03-14

这是一个很难回答的问题:

如何在没有外部库的情况下解析< code >“YYYYmmdd”格式的日期?如果输入字符串不是这种格式,我希望得到< code>invalid Date(或者undefined,如果这样更简单的话)。

共有3个答案

柯良骏
2023-03-14

也许答案很简单,没有检查,但很快...

var date = parseInt(date);
new Date(date / 10000, date % 10000 / 100, date % 100);

或者,如果月份在源中不为零,

new Date(date / 10000, (date % 10000 / 100) - 1, date % 100);
卜勇
2023-03-14

验证数字的更强大的版本:

 function parse (str) {
        // validate year as 4 digits, month as 01-12, and day as 01-31 
        if ((str = str.match (/^(\d{4})(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])$/))) {
           // make a date
           str[0] = new Date (+str[1], +str[2] - 1, +str[3]);
           // check if month stayed the same (ie that day number is valid)
           if (str[0].getMonth () === +str[2] - 1)
              return str[0];
        }
        return undefined;
 }

参见小提琴:http://jsfiddle.net/jstoolsmith/zJ7dM/

我最近写了一个更有能力的版本,你可以在这里找到:http://jsfiddle.net/jstoolsmith/Db3JM/

邓嘉致
2023-03-14
function parse(str) {
    if(!/^(\d){8}$/.test(str)) return "invalid date";
    var y = str.substr(0,4),
        m = str.substr(4,2),
        d = str.substr(6,2);
    return new Date(y,m,d);
}

用法:

parse('20120401');

更新:

正如火箭所说,月份在js中是0-如果月份在字符串中不是基于 0,请使用此选项

function parse(str) {
    if(!/^(\d){8}$/.test(str)) return "invalid date";
    var y = str.substr(0,4),
        m = str.substr(4,2) - 1,
        d = str.substr(6,2);
    return new Date(y,m,d);
}

更新:

更严格地检查日期的有效性。采用HBP的方法来验证日期。

function parse(str) {
    var y = str.substr(0,4),
        m = str.substr(4,2) - 1,
        d = str.substr(6,2);
    var D = new Date(y,m,d);
    return (D.getFullYear() == y && D.getMonth() == m && D.getDate() == d) ? D : 'invalid date';
}
 类似资料:
  • 问题内容: Python和Matlab经常具有如下所示的整数日期表示形式: 733828.0 733829.0 733832.0 733833.0 733834.0 733835.0 733836.0 733839.0 733840.0 733841.0 这些数字对应于今年的某些日期。你们知道哪个功能可以将它们转换回YYYYMMDD格式吗? 太感谢了! 问题答案: 该课程可以为您提供帮助。如果将这

  • 问题内容: 我有以下格式的日期(yyyymmdd,18751104,19140722)…将其转换为date()的最简单方法是什么?或者使用mktime()和子字符串是我的最佳选择…? 问题答案: 使用含日期到字符串转换Unix时间戳: 您可以将结果作为第二个参数传递给自己重新格式化日期: 注意 在1970年Unix时代之前的日期将失败。 另一种适用于1970年之前的日期的替代方法:

  • 问题内容: 我在中收到格式日期。我如何解析它得到和。 ISO格式的日期: 问题答案: 一些参考 http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html 希望能帮助到你

  • 问题内容: 如何解析此日期以在Android中格式化? 又是什么之间和是什么意思?谢谢。 我不知道后端开发人员如何获得这种格式。我正在使用Java。 问题答案: 如果使用的是Java,则可以与模式一起使用: 输出为: 日期日期格式:输出日期:09.01.2018 09:11 编辑: 感谢@ OleV.V。,对于API> 26或使用ThreeTenABP, 我们可以使用 DateTimeFormat

  • 这是一个示例文档 我数到50999 当我为匹配条件添加日期字段时,如下所示,我没有得到任何值。 DBObject火柴=new BasicDBObject();match.put("data.type","score.type");match.put("body.name", new BasicDBObject("$存在",1));match.put("时间戳","2014-09-03T22:07:

  • 我有以下两个日期: 2009年10月8日 我正在使用Jackson将日期从rest api转换为joda Datetime。 我以为模式“dd MMM.yyyy”可以工作,但“may”没有点,所以在那一点上崩溃了。 有没有解决方案,或者我必须自己编写datetime解析器? jackson中的注释是: 所以只允许有一种约会模式。