How to migrate date fields correctly?
This is plain awfull and totally undocumented. But I found out:

# creates a date field for the valid_from/to migration mapping
$current_row-&gt;valid_from = array(
  'from' =&gt; (string) $current_row-&gt;valid_from,
  'to' =&gt; (string) $current_row-&gt;valid_to,
  //'timezone' =&gt; DateMigrateFieldHandler::arguments('Europe/Berlin'),
  //'timezone_db' =&gt; DateMigrateFieldHandler::arguments('Europe/Berlin'),
  //'date_type' =&gt; 'datetime',
);


Two issues with the code above are solved:


The array containing the dates has to contain the fiels from and to. Otherwise it does not understand the date range. I've seen this in the date migration example but never thought the field names are important for the mapping. (I rather used the target names value and value2.)
The array should not contain information about timezone and date types. The DateMigrateFieldHandler::prepare() will do that for you.


The working code above yields:

[field_date] =&gt; Array
    (
        [und] =&gt; Array
            (
                [0] =&gt; Array
                    (
                        [value] =&gt; 1970-02-01 00:00:00
                        [value2] =&gt; 2013-12-31 00:00:00
                        [timezone] =&gt; Europe/Berlin
                        [timezone_db] =&gt; Europe/Berlin
                        [date_type] =&gt; datetime
                    )
            )
    )


Fixed. :)