2016-03-24 9 views
0
import moment from 'moment'; 

export class DateTimeFormat { 
    format(date, time) { 
     alert(date); 

     return moment(date + 'T' + time, 'DD/MM/YYYY HH:mm:ss'); 
    } 
} 

‚Datum‘ umwandeln kann als String ‚DD/MM/YYYY‘ (von der DB auf Last) kommt durch, oder ein Datum Objekt aus dem calander (this.value = $('.input-group.date', this.element).datepicker('getUTCDate');) picker wird innerhalb eines benutzerdefinierten Elements verwendet.moment.js kann nicht zwei Saiten ein

Datetimeformat wird wie folgt verwendet:

  .ensure('baseContent.ValidFromDate', (config) => { config.computedFrom(['baseContent.ValidFromDate', 'baseContent.ValidFromTime', 'baseContent.ValidToDate', 'baseContent.ValidToTime']) }) 
       .if(() => { 
        return this.baseContent.ValidFromDate !== null && this.baseContent.ValidFromTime !== null && this.baseContent.ValidToDate !== null && this.baseContent.ValidToTime !== null }) 
        .passes(() => { return this.datetimeformat.format(this.baseContent.ValidFromDate, this.baseContent.ValidFromTime) < this.datetimeformat.format(this.baseContent.ValidToDate, this.baseContent.ValidToTime) }) 
        .withMessage('< Valid To') 
       .endIf() 

ich versucht habe. Moment (Datum) - Fails ungültiges Datum moment.utc (Datum) - Fails ungültiges Datum

ich nicht Wissen Sie, ob ich einen Versuch hinzufügen muss? Ich versuche und konvertiere von einem Date-Objekt, wenn es in den Catch fällt, dann muss es eine Zeichenkette von einer db usw. sein?

Verwenden Sie die folgenden Informationen aus @VicenzoC Ich habe hinzugefügt, eine if-Anweisung

var dateFormatted; 

if (typeof(date) === 'string') 
{ 
    dateFormatted = date; 
} 
else 
{ 
    // Must be an object from a calendar etc 
    alert(date); 
    dateFormatted = moment(date, 'DD/MM/YYYY'); 
    alert(dateFormatted); 
} 

return moment(date + 'T' + time, 'DD/MM/YYYY HH:mm:ss'); 

Erste alert -

enter image description here

Zweite alert -

enter image description here

Antwort

1

Es scheint, zu mir das y unsere .datepicker('getUTCDate') gibt ein Date Objekt, in diesem Fall, dass Sie es in moment Objekt analysieren kann nur moment(Date);

this.value = $('.input-group.date', this.element).datepicker('getUTCDate'); 
var momentObj = moment(this.value); 

mit der Wenn Sie eine Zeichenfolge, haben Sie es mit analysieren kann:

Sobald Sie ein moment Objekt haben, können Sie die format Methode verwenden, wenn Sie Ihr Datum in einem benutzerdefinierten Format angezeigt werden müssen.

+0

Dank @VicenzoC, wenn die Seite zuerst lädt die Daten aus einer db gezogen wird und daher kommt wie 'DD/MM/YYYY' nur wenn es aus dem Kalender ausgewählt wurde, gibt es ein Datum Objekt zurück. Mache ich am besten so etwas wie eine Versuchs-/Fang-Aussage? –

+0

@VicenzoC - Meine Frage wurde aktualisiert, da ich nicht glaube, dass ich sie richtig erklärt habe. –

+0

@ClareBarrington vielleicht können Sie den Operator ['typeof'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof) verwenden, um den Typ Ihrer Eingabevariablen zu bestimmen und dann den Moment aufzurufen geeignete Parsing-Funktion. – VincenzoC

0
import moment from 'moment'; 

export class DateTimeFormat { 
    format(date, time) { 

     var dateFormatted; 

     if (typeof(date) === 'string') 
     { 
      dateFormatted = date; 
     } 
     else 
     { 
      // Must be an object from a calendar etc 
      dateFormatted = moment(date).format('DD/MM/YYYY'); 
     } 

     return moment(dateFormatted + 'T' + time, 'DD/MM/YYYY HH:mm:ss'); 
    } 
} 

Dies ist der letzte Code, ich zum ersten Mal der typeof (nochmals vielen Dank @VicenzoC mich in dieser Richtung für den Hinweis) bestimmen dann handhabe ich das Datum Teil innerhalb der if-Anweisung.