2013-05-08 34 views
12

Tôi đang sử dụng bootstrap-datetimepicker và sử dụng định dạng datetime ISO8601 như yyyy-mm-ddThh:ii:ssZ như đã đề cập trong lựa chọn của họ phầnAngularJS: Làm thế nào để định dạng định dạng ngày ISO8601?

Trong điều khiển của tôi, tôi làm

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

đó gửi dữ liệu để phụ trợ như (console.log)

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

và tiết kiệm trong cơ sở dữ liệu như

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

Trong mẫu của tôi, tôi làm

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

và tôi thấy đầu ra trên HTML của tôi như

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

Nhưng theo Angular doc, nó phải là cho định dạng Oct 28, 2010 8:40:23 PM

là gì mà tôi đang mất tích?

+0

tôi đã cho định dạng mẫu từ Angular Doc – daydreamer

+0

Có thể muốn làm cho nó phù hợp với kết quả * mong đợi * hợp lệ. – user2246674

Trả lời

12

Còn bây giờ, tôi đã tạo ra một bộ lọc

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

thêm vào như là phụ thuộc vào app.js như

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

và trong HTML sử dụng nó như là

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

và trình bày ngày HTML

May 8, 2013 5:14:36 PM 

Nếu bạn biết một ý tưởng tốt hơn, xin vui lòng cho tôi biết

9

Tại Brazil (và hầu hết châu Âu, Úc, vv), chúng tôi sử dụng mặc định của MySQL DATETIME trên DB:

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

Nhưng ngày sử dụng() để hiển thị nó như thế này:

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

Vì vậy, để hiển thị ngày đó trong góc, "chính xác", tạo ra một bộ lọc:

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

Sau đó, trên ứng dụng góc của bạn, chỉ cần gọi các bộ lọc và định dạng giá trị để trưng bày:

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

Đó bao gồm định dạng ngày tháng trong Brazil, Anh, New Zealand, vv định dạng ngày cho góc, chỉ cần trừ múi giờ chính xác.

+0

Đây là một trợ giúp rất lớn để định dạng ngày mặc định của MySQL. Sáng tạo. Cảm ơn! – Jazzy

37

Tôi không hiểu tại sao không ai cung cấp câu trả lời đơn giản về việc sử dụng đúng định dạng trong bộ lọc?

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

Điều đó sẽ định dạng như ISO-8601

1

Bên cạnh tất cả điều này, chỉ cần bạn có sự thay đổi như thế này,

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

cố gắng để wirte nó như

<td>{{ transaction.created_on | date:'MMM d, y h:mm:ss a'}}</td> 
Các vấn đề liên quan