12

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

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

我想做的是解析一个日期时间。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提供这种功能的扩展库?我环顾四周,但没有找到太多。

更新 w/接受的答案

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

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

在我的示例中,日期将为空,因为它预计时间段的格式为a.mor p.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

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

注意 2:传递硬编码模式不是i18n 的建议。

4

4 回答 4

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("") 建立本地文化,那么只需在culture() 上指定文化。

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

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

注意 2:传递硬编码模式不是i18n 的建议。

于 2013-07-19T22:08:31.210 回答
3

我会研究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

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

于 2013-07-17T23:11:34.090 回答
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)

更多信息和示例
有关如何加载 CLDR 的更多信息
关于如何使用 CLDR 模式的注意事项

于 2015-05-14T12:50:49.000 回答
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.
            }
        }
    }
});

修改它不是最好的解决方案,但出于我和大多数其他人的目的,他们不会很快将 Globalization.js 从版本 0.x 升级到 1.x。

这个答案意味着您可以在同一个项目和同一页面上拥有一个带时间的日期,以及一个日期字段。

于 2015-08-19T02:23:09.827 回答