AngularJS - chuyển đổi ngày tháng trong bộ điều khiển


114

Bất cứ ai có thể vui lòng gợi ý cho tôi cách chuyển đổi ngày từ 1387843200000định dạng này sang định dạng này 24/12/2013 bên trong bộ điều khiển của tôi không?

Just FYI ngày của tôi được lưu trữ theo cách này & khi ràng buộc chỉnh sửa biểu mẫu với input type="date"trường sẽ không được điền.

#Plunker demo tại đây.

EditCtrl

app.controller("EditCtrl", [ "$scope", "$filter", "db" function ($scope, $filter, db){

    // this gets me an item object
    var item = db.readItem();

    // item date = 1387843200000
    // this returns undefined 
    item.date = $filter('date')(date[ item.date, "dd/MM/yyyy"]);

}]);

Edit.html - mẫu

<form name="editForm" class="form-validate">

        <div class="form-group">
            <label for="date">Event date.</label>
            <input type="date" class="form-control" ng-model="event.date" id="date" required />
        </div>

        <a href="#/" class="btn btn-danger ">Cancel</a>
        <button id="addEvent" class="btn btn-primary pull-right" ng-disabled="isClean() || editForm.$invalid" ng-click="saveEvent()">Save event.</button>

    </form>

1
Tại sao bạn cần chuyển đổi trong bộ điều khiển? Bạn có thể sử dụng bộ lọc ngày để định dạng ngày trong chế độ xem của mình nếu bạn chỉ cần một giá trị có thể hiển thị.
Justin Niessner

@JustinNiessner - ngày của tôi được lưu trữ theo cách này và khi gắn vào chỉnh sửa mẫu với input type="date"lĩnh vực không được dân cư
Iladarsda

1
Bạn có thể sử dụng moment.js angularjs lọc thời gian ngày - github.com/urish/angular-moment
Virender

Câu trả lời:


212
item.date = $filter('date')(item.date, "dd/MM/yyyy"); // for conversion to string

http://docs.angularjs.org/api/ng.filter:date

Nhưng nếu bạn đang sử dụng HTML5 type = "date" thì PHẢI sử dụng định dạng ISO yyyy-MM-dd.

item.dateAsString = $filter('date')(item.date, "yyyy-MM-dd");  // for type="date" binding


<input type="date" ng-model="item.dateAsString" value="{{ item.dateAsString }}" pattern="dd/MM/YYYY"/>

http://www.w3.org/TR/html-markup/input.date.html

LƯU Ý: việc sử dụng pattern = "" với type = "date" có vẻ không chuẩn, nhưng nó có vẻ hoạt động theo cách mong đợi trong Chrome 31.


Xin chào, tôi đã cố gắng triển khai theo đề xuất, nhưng nó không hiệu quả với tôi.
Mukun

Xin chào, tôi đã cố gắng triển khai theo đề xuất, nhưng nó không hiệu quả với tôi. câu trả lời của tôi từ dịch vụ web mùa xuân là {"basicPersonalInfo": {"empNo": "04005001", "dob": 490645800000}, "CommunicationInfo": null}, tôi cần hiển thị nó trong trường nhập ngày bootstrap / HTML5 của mình. Tôi đã sử dụng bộ lọc trong bộ điều khiển của mình như $ scope.basicInfo = BasicInformationService.query (); $ scope.basicInfo. $ promise.then (function (data) {$ scope.basicInfo.basicPersonalInfo.dob = $ filter ('date') (data.basicPersonalInfo.dob, "yyyy-MM-dd");}); bất kỳ sự giúp đỡ được đánh giá cao
Mukun

1
ok Tôi đã thay đổi định dạng trong bộ điều khiển của mình như thế này và nó có vẻ hoạt động, không chắc liệu nó có đúng cách hay không. $ scope.basicInfo.basicPersonalInfo.dob = new Date ($ filter ('date') (data.basicPersonalInfo.dob, "yyyy-MM-dd"));
Mukun

Ngày của tôi sắp tới như thế này từ API DateTime: "2017/12/15" nhưng đang thực hiện điều này {{M.DateTime | date: 'dd-MM-yyyy'}} không thay đổi định dạng ngày. Làm cách nào để định dạng nó bên trong biểu thức?
Vishal Singh

16

tạo một filter.js và bạn có thể sử dụng lại nó

angular.module('yourmodule').filter('date', function($filter)
{
    return function(input)
    {
        if(input == null){ return ""; }
        var _date = $filter('date')(new Date(input), 'dd/MM/yyyy');
        return _date.toUpperCase();
    };
});

lượt xem

<span>{{ d.time | date }}</span>

hoặc trong bộ điều khiển

var filterdatetime = $filter('date')( yourdate );

Lọc ngày và định dạng trong Angular js.


1
Có vẻ như đã là một bộ lọc ngày xây dựng vào AngularJS: docs.angularjs.org/api/ng/filter/date
AlikElzin-kilaka

1

Tất cả các giải pháp ở đây không thực sự ràng buộc mô hình với đầu vào bởi vì bạn sẽ phải thay đổi trở lại dateAsStringsẽ được lưu như datetrong đối tượng của bạn (trong bộ điều khiển sau khi biểu mẫu sẽ được gửi).

Nếu bạn không cần hiệu ứng ràng buộc mà chỉ cần hiển thị nó trong đầu vào,

một đơn giản có thể là:

<input type="date" value="{{ item.date | date: 'yyyy-MM-dd' }}" id="item_date" />

Sau đó, nếu muốn, trong bộ điều khiển, bạn có thể lưu ngày đã chỉnh sửa theo cách này:

  $scope.item.date = new Date(document.getElementById('item_date').value).getTime();

lưu ý: trong bộ điều khiển của bạn, bạn phải khai báo itembiến của mình để biến $scope.itemnày hoạt động.


1

tôi đề xuất bằng Javascript:

var item=1387843200000;
var date1=new Date(item);

và sau đó date1 là Ngày.


Có phải của bạn mà chúng tôi muốn chuyển đổi tem thời đại chúng ta cho đến nay
Macha devendher
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.