【问题标题】:Issue with Javascript Date formatJavascript日期格式问题
【发布时间】:2013-07-03 07:04:17
【问题描述】:

我正在使用 Momentjs 验证 Javascript 中的日期/时间字符串。

var day= "Sunday, February 14th 2010, 3:25:50 pm";
var valid=moment(day,"dddd, MMMM Do YYYY, h:mm:ss a").isValid();
alert(valid);

这总是返回 false 。我不确定是什么问题。

我正在使用 Momentjs 库 - http://momentjs.com/docs/#/parsing/is-valid/

我也创建了一个 jsfiddle - http://jsfiddle.net/FUDf7/1/

请帮忙。

【问题讨论】:

标签: javascript parsing date momentjs


【解决方案1】:

解析中不支持序数——请参阅the source code

    /************************************
        Parsing
    ************************************/


    // get the regex to find the next token
    function getParseRegexForToken(token, config) {
        switch (token) {
        case 'DDDD':
            return parseTokenThreeDigits;
        case 'YYYY':
            return parseTokenFourDigits;
        case 'YYYYY':
            return parseTokenSixDigits;
        case 'S':
        case 'SS':
        case 'SSS':
        case 'DDD':
            return parseTokenOneToThreeDigits;
        case 'MMM':
        case 'MMMM':
        case 'dd':
        case 'ddd':
        case 'dddd':
            return parseTokenWord;
        case 'a':
        case 'A':
            return getLangDefinition(config._l)._meridiemParse;
        case 'X':
            return parseTokenTimestampMs;
        case 'Z':
        case 'ZZ':
            return parseTokenTimezone;
        case 'T':
            return parseTokenT;
        case 'MM':
        case 'DD':
        case 'YY':
        case 'HH':
        case 'hh':
        case 'mm':
        case 'ss':
        case 'M':
        case 'D':
        case 'd':
        case 'H':
        case 'h':
        case 'm':
        case 's':
            return parseTokenOneOrTwoDigits;
        default :
            return new RegExp(token.replace('\\', ''));
        }
    }

它是been reported as a bug,但它是not going to get fixed,“除非对此有更多需求。”

【讨论】:

    【解决方案2】:

    改用D[th]fiddle

    ps 我不知道为什么Do 不起作用

    【讨论】:

      【解决方案3】:

      我认为 14 号是你的问题

      http://jsfiddle.net/blackjim/FUDf7/3/

      var day= "Sunday, February 14 2010, 3:25:50 pm";
      var valid=moment(day,"dddd MMMM D YYYY h:mm:ss a").isValid();
      alert(valid);
      

      【讨论】:

      • 但是根据momentjs.com/docs/#/displaying/format ,14th应该是与'Do'匹配的有效格式
      • 之前没用过,不知道怎么用。尝试制作一个单独的示例来使这个“做”工作。
      • @vladkras 是的,我想他会的。我不知道 moment.js 如何将字符串解析为我现在无法提出其他建议。您的解决方案似乎更好。
      猜你喜欢
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      • 2014-04-01
      相关资源
      最近更新 更多