Globalize.js - 如何解析日期和时间而不仅仅是日期

时间:2013-07-17 22:50:58

标签: javascript datetime culture javascript-globalize

Globalize.js允许您根据当前应用的文化来解析日期字符串

var date = Globalize.parseDate("17/07/2013"); //Wed Jul 17 00:00:00 PDT 2013

我想做的是解析DateTime。 javascript Date对象处理这个,我很惊讶Globalize.js库没有。

var date = new Date("07/17/2013 11:55 pm"); //Wed Jul 17 23:55:00 PDT 2013
var date = Globalize.parseDate("07/17/2013 11:55 pm"); //null

我错过了什么吗?我倾向于自己解析时间部分。是否有另一个扩展Globalize.js的库提供此类功能?我环顾四周但却找不到多少。

更新/接受回答

如果您知道日期所在的格式,则可以解析日期。

    var date = Globalize.parseDate("17/07/2013 11:55 pm", "MM/dd/yyyy hh:mm tt"); 
    //date = null

在我的示例中,日期将为null,因为它希望时间段的格式为a.mp.m.。一旦我改变了,我就能解析一个约会时间。

   var date = Globalize.parseDate("17/07/2013 11:55 p.m.", "MM/dd/yyyy hh:mm tt"); 
   //date = Wed Jul 17 23:55:00 PDT 2013

注意:这仅适用于已弃用全球化0.x.

注意2 :传递硬编码模式是i18n推荐。

4 个答案:

答案 0 :(得分:12)

如果你知道你正在使用的模式:

var date = Globalize.parseDate("07/17/2013 11:55 pm", "MM/dd/yyyy hh:mm tt");

如果你不知道模式:

var date = Globalize.parseDate("07/17/2013 11:55 pm", Globalize.culture().calendar.patterns.d + " " + Globalize.culture().calendar.patterns.t)

上面的一行是假设当前的文化,如果你需要它用于其他文化,或者你没有通过调用Globalize.culture(“”)来建立当地文化,那么只需在文化()上指定文化。

我刚刚在几分钟前运行了这个场景,并找到了这个解决方案,最新的很麻烦,我希望有更简洁的方法来做到这一点。

注意:这仅适用于弃用的Globalize 0.x。

注意2 :传递硬编码模式是i18n推荐。

答案 1 :(得分:3)

Globalize 1.x基于CLDR,现在有不同的API。按照新代码完成您的需要:

Globalize("en").parseDate("5/14/2015, 9:47 AM", {skeleton: "yMdhm"});
// > Thu May 14 2015 09:47:00 GMT-0300 (BRT)

More information and examples
More information on how to load CLDR
Notes on how to use CLDR patterns

答案 2 :(得分:2)

我会调查moment.js,你可以用它做

d = moment("17/07/2013 11:55 pm" , "DD/MM/YYYY HH:mm a"); // parsed as 11:55pm local time
d = d.toDate(); //get it as a native js date object

除非您指定时区偏移量,否则解析字符串将在当前用户时区中创建日期。

答案 3 :(得分:1)

接受的答案表示所有日期时间字段必须具有完整的日期和时间。但是,某些字段只有一个日期是可以接受的。所以我修改了globalize.culture.en-AU.js来添加我的自定义模式。

Globalize.addCultureInfo( "en-AU", "default", {
    name: "en-AU",
    englishName: "English (Australia)",
    nativeName: "English (Australia)",
    numberFormat: {
        currency: {
            pattern: ["-$n","$n"]
        }
    },
    calendars: {
        standard: {
            firstDay: 1,
            patterns: {
                d: "d/MM/yyyy",
                D: "dddd, d MMMM yyyy",
                f: "dddd, d MMMM yyyy h:mm tt",
                F: "dddd, d MMMM yyyy h:mm:ss tt",
                M: "dd MMMM",
                Y: "MMMM yyyy",
                Z: "dd/MM/yyyy hh:mm:ss tt" // This is a custom one for our specifications.
            }
        }
    }
});

通过修改它并不是最佳解决方案,但对于我和其他大多数人来说,它们很快就不会upgrading the Globalization.js from version 0.x to 1.x

这个答案意味着您可以在同一个项目和同一页面上将时间日期与日期字段放在一起。