Why does the same form/field appear diffently depending on the browser? I have a custom content entity created with Drupal Console and the corresponding CRUD forms.
In this entity there is a field defined this way:  

$fields['startdate'] = BaseFieldDefinition::create('datetime')
  -&gt;setLabel(t('Membership Start Date'))
  -&gt;setSetting('datetime_type', 'date')
  -&gt;setDefaultValue(array(0 =&gt; array(
    'default_date_type' =&gt; 'now',
    'default_date' =&gt; 'now',
  )))


The way this field appears when in edit mode is completely different depending on the browser (see screen captures).  



  

The most 'annoying' being the displayed date format: mm/dd/yyyy with Firefox, yyyy-mm-dd with Safari. The only correct would be dd/mm/yyyy in Chrome.
Because the users of this site are french people that are used to dd/mm/yyyy...
Of course, the settings of my site (language, date and time, etc.) are 'French'.  

Any idea how I can fix this and have the same behavior whatever the browser?
The primary confusion around this is that the widgets (the code responsible for field input) for datetime, datetime range, and timestamp fields use HTML5 date/time input elements (except when using the select list version).  One for the date portion, and one for the time portion.

The browser, not Drupal, renders out HTML5 date/time input elements.  So, the actual UI will vary from browser to browser, and OS-to-OS.  In addition, not all browsers support these inputs.  

When a browser encounters an input element type it doesn't recognize, it defaults back to plain text entry.  In this case, Drupal provides a polyfill for the date portion based on the jQuery UI component.  There is an issue for the time element, but it currently languishing in the queue.

It looks like from your screenshots, Safari is using the polyfill and the rest are using the browser versions of the inputs.

The "yyyy-mm-dd" format for Safari, is a side effect of the fallback.  The HTML5 input elements require dates in that format, so that is how the widget gets configured and rendered out.  The native elements are using a localized version of the inputs, and handling the conversion behind the scenes so that Drupal gets the right format.