AngularJS - convert dates in controller

非 Y 不嫁゛ 提交于 2019-11-26 03:08:49

问题


Could anyone please suggest me how to convert date from this 1387843200000 format into this 24/12/2013 inside my controller?

Just FYI my dates are stored in this way & when binding to edit form with input type=\"date\" field is not being populated at all.

#Plunker demo here.

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 - template

<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:


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

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

But if you are using HTML5 type="date" then the ISO format yyyy-MM-dd MUST be used.

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

NOTE: use of pattern="" with type="date" looks non-standard, but it appears to work in the expected way in Chrome 31.




回答2:


create a filter.js and you can make this as reusable

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

view

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

or in controller

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

Date filtering and formatting in Angular js.




回答3:


All solutions here doesn't really bind the model to the input because you will have to change back the dateAsString to be saved as date in your object (in the controller after the form will be submitted).

If you don't need the binding effect, but just to show it in the input,

a simple could be:

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

Then, if you like, in the controller, you can save the edited date in this way:

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

be aware: in your controller, you have to declare your item variable as $scope.item in order for this to work.




回答4:


i suggest in Javascript:

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

and then date1 is a Date.



来源:https://stackoverflow.com/questions/20131553/angularjs-convert-dates-in-controller

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!