2013-05-08 13 views
12

I bootstrap-datetimepicker und mit ISO8601 Datetime-Format als yyyy-mm-ddThh:ii:ssZ in ihren Optionen Abschnitt wie erwähnt bin mitAngularJS: Wie formatiere ich ISO8601 Datumsformat?

In meinem Controller, ich

transaction.date = $('.form_datetime input').val(); 

, der die Daten sendet als (console.log) Backend

created_on: "Wed, 08 May 2013 23:18:32 -0000" 

und speichert in der Datenbank als

2013-05-08 16:18:32-07 

In meiner Vorlage, ich

<td>{{ transaction.created_on | date:'medium'}}</td> 

und ich die Ausgabe auf meinem HTML sehen wie

Wed, 08 May 2013 23:18:32 -0000 

Aber nach der Angular doc, sollte es für Format Oct 28, 2010 8:40:23 PM

sein Was ist dass ich vermisse?

+0

Ich habe die Beispielformat von Angular Doc – daydreamer

+0

Möglicherweise möchten Sie es mit einem gültigen * erwarteten * Ergebnis konsistent machen. – user2246674

Antwort

12

Vorerst habe ich einen Filter erstellt

angular.module('customFilters', []). 
    filter('dateInMillis', function() { 
    return function(dateString) { 
     return Date.parse(dateString); 
    }; 
    }); 

als Abhängigkeit als

in app.js hinzugefügt
var app = angular.module('myApp', [ 
    '$strap.directives', 'ngCookies', 'categoryServices', 'transactionServices', 
    'customFilters' 
]); 

und in HTML verwendet es als

<!-- added dateInMillis to pass to date to filter Angular way --> 
<td>{{ transaction.created_on | dateInMillis | date: 'medium'}}</td> 

und präsentiert auf Datum HTML als

May 8, 2013 5:14:36 PM 

Wenn Sie eine bessere Idee kennen, mich

9

In Brasilien wissen lassen Sie es (und die meisten von Europa, Australien, etc.), verwenden wir die Standard-MySQL DATETIME- auf DB:

"Y-m-d HH:ii:ss" 

Aber Verwendung date() es wie folgt angezeigt:

"d/m/Y HH:ii:ss" 

um also in Winkel dieses Datum angezeigt werden, "richtig", einen Filter zu erstellen:

var app = angular.module(... 

// Converts MySQL datetime into readable BR format 
/* 
    Converts 2013-10-18 18:47:15 into 1382122035000 so angular can format date 
    using brazilian standards 
*/ 
app.filter('brDateFilter', function() { 
    return function(dateSTR) { 
     var o = dateSTR.replace(/-/g, "/"); // Replaces hyphens with slashes 
     return Date.parse(o + " -0000"); // No TZ subtraction on this sample 
    } 
}); 

Dann auf dem Winkel App, rufen Sie einfach die Filter und formatieren Sie den Wert für die Anzeige:

{{ item.datetime_value | brDateFilter | date:"dd/MM/yyyy HH:mm" }} 

Das Datumsformat in der brasilianischen, Großbritannien, Neuseeland, usw. Datumsformat für Winkel abdeckt, subtrahieren Sie die Zeitzone einfach richtig.

+0

Dies war eine große Hilfe beim Formatieren von Standard-MySQL-Daten. Funktioniert out of the box. Vielen Dank! – Jazzy

37

Ich verstehe nicht, warum niemand die einfache Antwort zur Verwendung des richtigen Formats im Filter zur Verfügung gestellt hat?

{{item.date | date:'yyyy-MM-ddTHH:mm:ssZ'}} 

, die als ISO-8601-Format wird

1

Neben all dem nur Sie ändern wie diese haben,

<td>{{ transaction.created_on | date:'medium'}}</td> 

versuchen, es wirte als

<td>{{ transaction.created_on | date:'MMM d, y h:mm:ss a'}}</td>