diff --git a/application/Espo/Controllers/Import.php b/application/Espo/Controllers/Import.php index 6c75d7edc8..07b2a05a20 100644 --- a/application/Espo/Controllers/Import.php +++ b/application/Espo/Controllers/Import.php @@ -167,12 +167,18 @@ class Import extends \Espo\Core\Controllers\Record throw new BadRequest(); } + $timezone = 'UTC'; + if (isset($data['timezone'])) { + $timezone = $data['timezone']; + } + $importParams = array( 'headerRow' => !empty($data['headerRow']), 'fieldDelimiter' => $data['fieldDelimiter'], 'textQualifier' => $data['textQualifier'], 'dateFormat' => $data['dateFormat'], 'timeFormat' => $data['timeFormat'], + 'timezone' => $timezone, 'personNameFormat' => $data['personNameFormat'], 'decimalMark' => $data['decimalMark'], 'currency' => $data['currency'], diff --git a/application/Espo/Resources/i18n/en_US/Import.json b/application/Espo/Resources/i18n/en_US/Import.json index 130f70902d..3b84d7554a 100644 --- a/application/Espo/Resources/i18n/en_US/Import.json +++ b/application/Espo/Resources/i18n/en_US/Import.json @@ -50,7 +50,8 @@ "Imported": "Imported", "Duplicates": "Duplicates", "Updated": "Updated", - "Skip searching for duplicates": "Skip searching for duplicates" + "Skip searching for duplicates": "Skip searching for duplicates", + "Timezone": "Timezone" }, "messages": { "utf8": "Should be UTF-8 encoded", diff --git a/application/Espo/Services/Import.php b/application/Espo/Services/Import.php index 11692bd632..7fc272c19b 100644 --- a/application/Espo/Services/Import.php +++ b/application/Espo/Services/Import.php @@ -655,8 +655,10 @@ class Import extends \Espo\Services\Record } break; case Entity::DATETIME: - $dt = \DateTime::createFromFormat($dateFormat . ' ' . $timeFormat, $value); + $timezone = new \DateTimeZone(isset($params['timezone']) ? $params['timezone'] : 'UTC'); + $dt = \DateTime::createFromFormat($dateFormat . ' ' . $timeFormat, $value, $timezone); if ($dt) { + $dt->setTimezone(new \DateTimeZone('UTC')); return $dt->format('Y-m-d H:i'); } break; diff --git a/client/res/templates/import/step-1.tpl b/client/res/templates/import/step-1.tpl index 65a1ed129d..5d0fbf535f 100644 --- a/client/res/templates/import/step-1.tpl +++ b/client/res/templates/import/step-1.tpl @@ -103,6 +103,20 @@ +
+
+
+
+ + +
+
+
+
diff --git a/client/src/views/import/step1.js b/client/src/views/import/step1.js index a14a614ff8..ec8a48f534 100644 --- a/client/src/views/import/step1.js +++ b/client/src/views/import/step1.js @@ -90,7 +90,8 @@ Espo.define('views/import/step1', 'view', function (Dep) { {key: "hh:mma", value: '11:00pm'}, {key: "hh:mm A", value: '11:00 PM'}, {key: "hh:mmA", value: '11:00PM'} - ] + ], + timezoneList: this.getMetadata().get(['entityDefs', 'Settings', 'fields', 'timeZone', 'options']) }; }, @@ -102,6 +103,7 @@ Espo.define('views/import/step1', 'view', function (Dep) { textQualifier: '"', dateFormat: 'YYYY-MM-DD', timeFormat: 'HH:mm', + timezone: 'UTC', decimalMark: '.', personNameFormat: 'f l', }; @@ -123,6 +125,7 @@ Espo.define('views/import/step1', 'view', function (Dep) { this.formData.textQualifier = $('#import-text-qualifier').val(); this.formData.dateFormat = $('#import-date-format').val(); this.formData.timeFormat = $('#import-time-format').val(); + this.formData.timezone = $('#import-timezone').val(); this.formData.decimalMark = $('#import-decimal-mark').val(); this.formData.currency = $('#import-currency').val(); this.formData.personNameFormat = $('#import-person-name-format').val(); @@ -151,6 +154,7 @@ Espo.define('views/import/step1', 'view', function (Dep) { $('#import-text-qualifier').val(this.formData.textQualifier); $('#import-date-format').val(this.formData.dateFormat); $('#import-time-format').val(this.formData.timeFormat); + $('#import-timezone').val(this.formData.timezone); $('#import-decimal-mark').val(this.formData.decimalMark); $('#import-person-name-format').val(this.formData.personNameFormat);