How do you prevent bootstrap-datepicker from clearing existing value from input if no date is selected?

Set Force parse value to false: forceParse: false

    $(".applyDatepicker").datepicker({
            forceParse: false
    });

Can't tell for sure without more of an example but the problem is probably that the $this->swimmers->dob string you are giving to the input is not recognised as a date format by bootstrap-datepicker. You can define the date format it uses by adding the data-date-format attribute to your input.

For example if you were using a MySQL formatted date or PHP's DateTime object with $date->format('Y-m-d') you could use:

<div id="datepicker" class="input-group date">
    <input type="text" class="form-control" id="dob" name="dob" value="<?php echo $this->swimmers->dob;?>" data-date-format="yy-mm-dd"><span class="input-group-addon"><i class="glyphicon glyphicon-th"></i></span>
</div>

I am not sure about its working in php but for mvc I got the same problem that Bootstrap would erase the value if the control gets and loses focus without making a date selection.

I found that Bootstrap erases the value as it doesn't recognize the value set by

$('#dtControl').val(nextMonth);

I am working with bootstrap v3.1.1 and the following code worked for me

$('#dtControl').datepicker('setDate', nextMonth);

to populate the datepicker control. This way Bootstrap recognizes the date and doesn't erase it if control gets and loses focus