2013-05-08 15 views
12

Sto usando bootstrap-datetimepicker e utilizzando il formato datetime ISO8601 come yyyy-mm-ddThh:ii:ssZ come menzionato nella loro sezione opzioniAngularJS: come formattare il formato di data ISO8601?

Nel mio controller, faccio

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

che invia i dati al backend come (console.log)

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

e salva nel database come

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

Nel mio modello, lo faccio

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

e vedo l'output sul mio HTML come

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

Ma come per la Angular doc, dovrebbe essere per il formato Oct 28, 2010 8:40:23 PM

Che cosa è che mi manca?

+0

ho dato il esempio di formato da Angular Doc – daydreamer

+0

Potrebbe voler renderlo coerente con un risultato * previsto * valido. – user2246674

risposta

12

Per ora, ho creato un filtro

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

aggiunto come dipendenza nel app.js come

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

e in HTML usavano come

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

e che presenta data HTML come

May 8, 2013 5:14:36 PM 

Se conosci una migliore idea, per favore fatemelo sapere

9

In Brasile (e la maggior parte di Europa, Australia, ecc), si usa il valore di default di MySQL DATETIME il DB di:

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

Ma l'uso date() per visualizzare in questo modo:

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

Quindi, al fine di visualizzare tale data in angolare, "correttamente", creare un filtro:

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

Poi, sulla vostra applicazione angolare, basta chiamare il filtro e formattare il valore per la visualizzazione:

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

che copre il formato della data in Brasile, Regno Unito, Nuova Zelanda, ecc formato di data per angolare, basta sottrarre correttamente il fuso orario.

+0

Questo è stato di grande aiuto per formattare le date predefinite di MySQL. Funziona fuori dalla scatola. Grazie! – Jazzy

37

Non capisco perché nessuno ha fornito la semplice risposta di utilizzare il formato corretto nel filtro?

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

che sarà formato ISO-8601

1

Accanto a tutto questo, solo avete cambiamento come questo,

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

cercare di Wirte come

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