AngularJS - перетворення дат у контролер


114

Може хто-небудь, будь ласка, підкаже, як перетворити дату з цього 1387843200000формату в цей 24/12/2013 всередині мого контролера ?

Просто FYI мої дати зберігаються таким чином, і коли прив'язка для редагування форми з input type="date"полем взагалі не заповнюється.

Тут демонструється #Plunker

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 - шаблон

<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
Для чого потрібно перетворити в контролер? Ви можете використовувати фільтр дат, щоб відформатувати дату у вашому представленні, якщо вам просто потрібне значення для відображення.
Джастін Нісснер

@JustinNiessner - мої дати зберігаються таким чином, і коли прив'язка для редагування форми з input type="date"полем не заповнюється
Iladarsda

1
Ви можете скористатися фільтром часу date.js angularjs - github.com/urish/angular-moment
virender

Відповіді:


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

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

Але якщо ви використовуєте HTML5 type = "date", ОБОВ'ЯЗКОВО слід використовувати формат 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

ПРИМІТКА: використання pattern = "" with type = "date" виглядає нестандартно, але, здається, працює в очікуваному способі в Chrome 31.


Привіт, я намагався реалізувати, як було запропоновано, але це не працює для мене.
Mukun

Привіт, я намагався реалізувати, як було запропоновано, але це не працює для мене. моя відповідь від весняної веб-сервісу - {"basicPersonalInfo": {"empNo": "04005001", "dob": 490645800000}, "communicationInfo": null}, мені потрібно відобразити це у моєму полі для введення дати завантаження / HTML5. Я використовував фільтр у своєму контролері, як $ range.basicInfo = BasicInformationService.query (); $ option.basicInfo. $ obec.hen (функція (дані) {$ range.basicInfo.basicPersonalInfo.dob = $ filter ('дата') (data.basicPersonalInfo.dob, "yyyy-MM-dd");}); будь-яка допомога вдячна
Mukun

1
Ок, я змінив форматування в моєму контролері, як це, і, здається, він працює, не впевнений, що це правильний шлях. $ range.basicInfo.basicPersonalInfo.dob = нова дата ($ filter ('дата') (data.basicPersonalInfo.dob, "yyyy-MM-dd"));
Mukun

Моя дата надходить приблизно через API DateTime: "2017/12/15", але це робиться {{M.DateTime | дата: 'dd-MM-yyyy'}} не змінюється формат дати. Як я відформатую його всередині виразу?
Вішал Сінгх

16

створити filter.js, і ви можете зробити це як багаторазове використання

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

вид

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

або в контролері

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

Фільтрація дати та форматування у кутовому js.


1
Здається, у AngularJS вже вбудований фільтр дат: docs.angularjs.org/api/ng/filter/date
AlikElzin-kilaka

1

Всі рішення тут насправді не прив'язують модель до вводу, тому що вам доведеться змінити назад, dateAsStringщоб бути збереженим, як dateу вашому об'єкті (в контролері після подання форми).

Якщо вам не потрібен ефект прив'язки, а просто показати його на вході,

простим може бути:

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

Потім, за бажанням, у контролері ви можете зберегти відредаговану дату таким чином:

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

пам'ятайте: у своєму контролері ви повинні оголосити свою itemзмінну як $scope.itemдля того, щоб це працювало.


1

Я пропоную в Javascript:

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

а потім date1 - дата.


Так, ваше право там, де ми хочемо перетворити свою дату часу на дату
macha devendher
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.