2013-07-17 3 views
12

Globalize.js ermöglicht es Ihnen, ein Datum Zeichenfolge zu analysieren auf der aktuellen Kultur basiert angewandtGlobalize.js - wie Datum und Zeit eher zu analysieren als Datum nur

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

Was ich möchte, ist tun, um eine Datetime zu analysieren. Das JavaScript-Date-Objekt behandelt dies, ich bin überrascht, dass die Globalize.js-Bibliothek dies nicht tut.

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 

Fehle ich etwas? Ich lehne mich an, den Zeitabschnitt selbst zu analysieren. Gibt es eine andere Bibliothek, die Globalize.js erweitert, die diese Art von Funktionalität bietet? Ich habe mich umgesehen, aber nicht viel gefunden.

UPDATE w/akzeptierte Antwort

Sie können das Datum analysieren, wenn Sie das Format kennen, der das Datum liegt.

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

In meinem Beispiel wird das Datum, weil es null sein erwartet, dass der Zeitraum im Format a.m oder p.m. ist. Sobald ich das geändert habe, konnte ich eine Datetime parsen.

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 

Hinweis: Dies gilt nur für die veraltet 0.x. globalisieren

Anmerkung 2: ein hartcodierte Muster Passing ist NICHT eine i18n Empfehlung.

+0

Das Übergeben eines fest codierten Musters ist KEINE Empfehlung von i18n. Sie sollten stattdessen skeleton (Globalize 1.x) http://stackoverflow.com/a/30237866/798133 verwenden. –

Antwort

11

Wenn Sie kennen das Muster, das Sie verwenden:

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

Wenn Sie nicht wissen, das Muster:

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

Die Zeile über aktuelle Kultur wird unter der Annahme, wenn Sie es für andere brauchen Kultur oder wenn Sie die lokale Kultur nicht durch Aufruf von Globalize.culture ("") festgelegt haben, geben Sie einfach die Kultur in culture() an.

Ich bin gerade vor ein paar Minuten auf dieses Szenario gelaufen, und fand diese Lösung, die neueste es ist chaotisch, ich hoffe, es gibt einen saubereren Weg, dies zu tun.

Hinweis: Dies gilt nur für die veraltete Version von Globeize 0.x.

Anmerkung 2: ein hartcodierte Muster Passing ist NICHT eine i18n Empfehlung.

+0

Ich wollte nur die Zeit analysieren, also habe ich Globalize.parseDate ("11:55 pm", Globalize.culture(). Calendar.patterns.t) verwendet. Aber ich wurde dadurch null. Irgendein Rat? –

+0

@MARKANDBhatt nur eine gültige Datumszeichenkette an Ihre Zeit Zeichenfolge voran und rufen Sie Globalize.parseDate –

+1

Ich denke, diese Lösung wäre anwendbar auf die 'globalisieren' Version 0.x, aber nicht für die 1.x-Version der Bibliothek –

2

würde ich in moment.js aussehen, mit ihm können Sie

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 

tun, wenn Sie eine Zeitzone angeben, Offset, einen String-Parsing wird ein Datum in der aktuellen Benutzer Zeitzone erstellen.

+2

Ich finde moment.js sehr nützlich, wenn es um Datum/Zeit Manipulation geht. In den Szenarien, mit denen ich mich meist beschäftige, wird die Kultur jedoch entweder vom Benutzer oder vom Browser definiert, so dass ich das richtige Muster vorher nicht kenne. Ich bekomme normalerweise etwas wie: moment ("16/07/2012 12:45", Moment(). Lang() ._ longDateFormat.L + "" + Moment(). Lang() ._ longDateFormat.LT) .toDate() das ist ähnlich zu meiner Antwort unten mit Globalize. Weißt du, ob es einen kürzeren Weg gibt? –

3

Globalize 1.x basiert auf CLDR und hat jetzt eine andere API.Folgen Sie den neuen Code zu erreichen, was Sie brauchen:

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

+0

Wie würde Sie legen ein anderes Trennzeichen als Komma fest? yMdHm erzwingt Komma (,) als Trennzeichen, während ich Platz brauche. – Jimit

+0

In dieser Hinsicht ist Globalize nicht nachsichtig, d. H. Ein Literal zu ignorieren oder ein beliebiges Literal zu akzeptieren. (Beachten Sie, dass Komma und Leerzeichen ein Literal sind, das durch das Format definiert ist). Eine Hacky-Lösung wäre, CLDR-Daten zu modifizieren, bevor Sie sie mit Globalize füttern. Alternativ können Sie eine geführte Eingabe wie https://github.com/rxaviers/react-date-input verwenden? –

1

Die akzeptierte Antwort bedeutet, dass alle Datumszeitfelder ein vollständiges Datum und eine vollständige Uhrzeit haben müssen. Es ist jedoch mehr als akzeptabel, dass einige Felder nur ein Datum haben. Also habe ich die Datei globalize.culture.en-AU.js modifiziert, um mein benutzerdefiniertes Muster hinzuzufügen.

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. 
      } 
     } 
    } 
}); 

Es ist nicht die beste Lösung, es durch Modifikation, aber für meine und die meisten anderen Zweck werden sie nicht bald upgrading the Globalization.js from version 0.x to 1.x jederzeit sein.

Diese Antwort bedeutet, dass Sie ein Datum mit der Zeit und nur ein Datumsfeld zusammen im selben Projekt und auf derselben Seite haben können.