For a given period, getting the smallest list of dates, using jokers Consider a date formatted in YYYY-MM-DD.
You can use the joker * at the end of the date string. E.g. 2016-07-2* describes all the dates from 2016-07-20 to 2016-07-29.

Now, consider a period represented by a start date and an end date. 

The algorithm must find the smallest possible list of dates representing the period. 

Let's use an exemple. For the following period: 


start date: 2014-11-29
end date: 2016-10-13


The algorithm must return an array containing the following list of dates:


2014-11-29
2014-11-30
2014-12-*
2015-*
2016-0*
2016-10-0*
2016-10-10
2016-10-11
2016-10-12
2016-10-13
PHP, 541 343 bytes
I wanted to get the algorithm working in the first place; but golfing it down was actually far more fun than I expected (especially browsing the supported date &amp; time formats).
Three major actions saved about 130 bytes; but the 70 bytes from minor golfings
(which also rendered one of the large steps obsolete) carried a lot of fun.
for($a=($f=strtotime)($argv[1]);!$p=$a&gt;$z=$f($argv[2]);$a+=86400){$x=$z&lt;$e=$f(Dec31,$a);(101&lt;$q=date(md,$a))?$q-1001|$x?:$a=$e+$p=&quot;1*&quot;:($x?($t=$f(IX30,$a))&gt;$z?:$a=$t+$p=&quot;0*&quot;:$a=$e+$p=&quot;*&quot;);$p?:($q%100&gt;1|$z&lt;($t=$f(date(Ymt,$a)))?$q%10&gt;0&amp;$q%100&gt;1|$z&lt;($t=min($t,$a+777600))?:$a=$t+$p=&quot;m-$q[2]*&quot;:$a=$t+$p=&quot;m-*&quot;);echo date(&quot;Y-&quot;.($p?:&quot;m-d&quot;),$a),&quot;
&quot;;}

takes input from command line arguments. Run with -nror test it online.
notes

prints Y-m-3* for Y-m-30; add 7 bytes to fix: Insert |$a==$t after 777600)).
throws warnings in PHP 7.1; add 5 bytes to fix: Replace +$p with +!$p.
A breakdown and some golfings explained are ready to be posted;
but I´ll wait a bit to see if someone else submits before I spoil.