【问题标题】:Parse specific date time format in Javascript在 Javascript 中解析特定的日期时间格式
【发布时间】:2012-12-09 14:55:26
【问题描述】:

我有一个格式如下的日期:

2012-12-09T02:08:34.6225152Z

我正在使用datejs javascript library 并希望解析上述日期,但我似乎无法找出正确的格式字符串。我尝试了以下方法,但它不起作用。

Date.parse('2012-12-09T02:08:34.6225152Z', 'yyyy-MM-ddTHH:mm:ss.fffffffZ');

如果更简单,我也愿意用原生 javascript 解析字符串。

【问题讨论】:

    标签: javascript datetime datejs


    【解决方案1】:

    DateJS 似乎不支持毫秒解析。 DateJS extras 上有 u FormatSpecifier 可以工作(尚未测试)。

    http://code.google.com/p/datejs/wiki/FormatSpecifiers

    【讨论】:

    • 不幸的是,这不起作用。 DateJs 的附加内容仅用于输出格式(即 toString()),而不是解析。
    【解决方案2】:

    我最终通过在发送到 Javascript 时更改字符串的格式来解决这个问题。我使用以下代码将 JSON 序列化程序更改为输出 1363607010099,而不是 2012-12-09T02:08:34.6225152Z

    var serializer = new JsonNetSerializer(new JsonSerializerSettings
    {
        DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,
        NullValueHandling = NullValueHandling.Ignore
    });
    

    然后我更改了我的 javascript 以使用我找到的这个函数来解析日期:

    String.prototype.toDate = function () {
        "use strict";
        var match = /\/Date\((\d{13})\)\//.exec(this);
        return match === null ? null : new Date(parseInt(match[1], 10));
    };
    

    最后,我使用这段代码输出日期(利用 DateJS 库):

    myTime.toDate().toString('h:mm:ss tt dd-MMM-yyyy')
    

    而且它有效。这似乎有点骇人听闻,所以我愿意考虑替代方案。

    【讨论】:

    • 建设性建议:使用 toDate 函数扩展字符串对象有点难看,因为并非所有字符串都可以转换为日期。为什么该函数应该对所有可能的字符串都可用,而您只需要它用于一个特定的字符串? "some".toDate() 没有意义,而 ""today".toDate() 或 "2013-1-1".toDate() 将有意义但返回 null。 -- 只是支持:)
    • 好点。我并不是说我的解决方案是一个好的解决方案,但我看到这个问题仍然是开放的,并想用一个可以接受的答案来结束它,这就是我最终解决它的方式。如果您有更好的选择来解决原始问题,请发布您的答案。 =)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多