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

Javascript Globalize.js-如何解析日期和时间,而不仅仅是日期,javascript,datetime,culture,javascript-globalize,Javascript,Datetime,Culture,Javascript Globalize,允许您基于应用的当前区域性分析日期字符串 var date = Globalize.parseDate("17/07/2013"); //Wed Jul 17 00:00:00 PDT 2013 我想做的是解析一个DateTime。javascript日期对象处理了这个问题,我很惊讶Globalize.js库没有 var date = new Date("07/17/2013 11:55 pm"); //Wed Jul 17 23:55:00 PDT 2013 var date = Globa

允许您基于应用的当前区域性分析日期字符串

var date = Globalize.parseDate("17/07/2013"); //Wed Jul 17 00:00:00 PDT 2013
我想做的是解析一个DateTime。javascript日期对象处理了这个问题,我很惊讶
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
在我的示例中,日期将为空,因为它希望时间段的格式为
a.m
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
注意:这仅适用于已弃用的全球化0.x


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

我会查看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

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

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

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建议。

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)



接受的答案意味着所有日期时间字段必须有完整的日期和时间。但是,有些字段只有日期是完全可以接受的。因此,我修改了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.
            }
        }
    }
});
通过修改它并不是最好的解决方案,但对于我和大多数其他人来说,它们不会很快出现


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

我发现moment.js在处理日期/时间时非常有用。然而,在我处理的场景中,大多数情况下,文化是由用户或浏览器定义的,因此我不知道正确的模式。我通常会得到这样的结果:矩(“16/07/2012 12:45”,矩().lang()。_longDateFormat.L+“”+矩().lang()。_longDateFormat.LT).toDate(),这与我下面使用Globalize的回答类似。你知道有没有更短的方法吗?我只是想解析时间,所以我使用了Globalize.parseDate(“11:55 pm”,Globalize.culture().calendar.patterns.t)。但结果我得到了空值。有什么建议吗?@MARKANDBhatt只需在时间字符串前加上一个有效的日期字符串,然后调用Globalize.parsedate我认为此解决方案适用于
Globalize
0.x版,但不适用于1.x版的库传递硬编码模式不是i18n建议。您应该改用骨架(globalize1.x)。如何设置不同的分隔符而不是逗号?yMdHm强制使用逗号(,)作为分隔符,而我需要空间。Globalize在这方面并不宽容,即忽略一个文本或接受任何文本。(注意逗号和空格是由格式定义的文字)。一个黑客解决方案是在将CLDR数据提供给Globalize之前对其进行修改。或者,您可以使用引导输入,如?我正在使用骨架尝试这种方法,但它不解析:Globalize(“nb”).parseDate(“05.09.2018 12:00”,{skeleton:“yMdHm”})//根据ca-gregorian.json,yMd是d.m.y,Hm是HH:mm