Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Datepicker not binding formatted value

This is probably an easy question, but I'm having a problem with this datepicker. The problem is I set the format to dd/mm/yyyy with data-date-format attribute. However, when checking my ng-model the value is the following: Wed Jul 17 2013 00:00:00 GMT+0000 (Greenwich Standard Time)

What I want is it to bind to dd/mm/yyyy format.

How can I fix this?

Here is my code:

<label for="inputDateFrom">Frá</label>
<div class="control-group input-append">
    <input type="text" ng-model="booking.Booking.DateFrom" data-date-format="dd/mm/yyyy" bs-datepicker>
    <button type="button" class="btn" data-toggle="datepicker"><i class="icon-calendar"></i></button>
</div>

Update 18.07.13:

According to rGil's answer I tried to use $scope.$watch. It works fine but first it gets the CORRECT date (from getBooking() service function), then it changes to the CURRENT date - which is not the date.

JavaScript code is following:

$scope.$watch('booking.Booking.DateFrom', function(v){ // using the example model from the datepicker docs
    $scope.booking.Booking.DateFrom = moment(v).format();
    alert(moment(v).format());
});

$scope.$watch('booking.Booking.DateTo', function(v){ // using the example model from the datepicker docs
    $scope.booking.Booking.DateTo = moment(v).format();
    alert(moment(v).format());
});

// Sækjum staka bókun
if(bookingID != null) {
    BookingService.getBooking(bookingID).then(function(data) {
        $scope.booking = data.data;
        $scope.booking.Booking.DateFrom = moment($scope.booking.Booking.DateFrom);
        $scope.booking.Booking.DateTo = moment($scope.booking.Booking.DateTo);
    });
}

Then my HTML is the following:

<label for="inputDateFrom">Frá</label>
<div class="control-group input-append">
        <input type="text" ng-model="booking.Booking.DateFrom" data-date-format="dd-mm-yyyy" bs-datepicker>
        <button type="button" class="btn" data-toggle="datepicker"><i class="icon-calendar"></i></button>
</div>

<label for="inputDateTo">Til</label>
<div class="control-group input-append">
        <input type="text" ng-model="booking.Booking.DateTo" data-date-format="dd-mm-yyyy" bs-datepicker>
        <button type="button" class="btn" data-toggle="datepicker"><i class="icon-calendar"></i></button>
</div>
like image 212
Gaui Avatar asked Jul 15 '13 22:07

Gaui


Video Answer


2 Answers

Looking over the AngularStrap source code, I found that if you set the (seemingly undocumented) attribute date-type to any value outside of "Date" (for example: String) this prevents bs-datpicker from returning the selected date as a date object and solves the issue. So in this case it would be:

<input type="text" ng-model="booking.Booking.DateFrom" data-date-format="dd/mm/yyyy" date-type="string" bs-datepicker>

Tested on AngularStrap v0.7.4 and v0.7.5

like image 102
MCybertron Avatar answered Oct 02 '22 03:10

MCybertron


This can easily be done without a plugin. Using this post you can create a $scope variable with the correct formatting.

Example:

$scope.$watch('datepicker.date', function(v){ // using the example model from the datepicker docs
    var d = new Date(v);
    var curr_date = d.getDate();
    var curr_month = d.getMonth() + 1; //Months are zero based
    var curr_year = d.getFullYear();
    $scope.modDate = curr_date + "/" + curr_month + "/" + curr_year;
    console.log($scope.modDate)
})

FORKED DEMO - open console

like image 43
rGil Avatar answered Oct 02 '22 03:10

rGil