deutsches Datumsformat

vtigerCRM 6.0

06.03.2014 UPDATE - Small missing line modification in last block
19.02.2016 UPDATE - Tested until VtigerCRM 6.4.0
21.11.2016 UPDATE - Tested until VtigerCRM 6.4.0

After you have done this modifications, you need to clear your Browser cache!

1. neuer Eintrag in die 'vtiger_date_format' Tabelle mit folgender Query:

INSERT INTO `vtiger_date_format`
(`date_formatid`, `date_format`, `sortorderid`, `presence`)
VALUES
(4, 'dd.mm.yyyy', 0, 1);

Mit dem Wert in der 3. Spalte könnt Ihr die Sortierung der Datumsformate anpassen. Da ich möchte, dass er direkt an oberster Stelle steht, habe ich eine 0 eingesetzt.

2. /vtlib/Vtiger/Functions.php

Function: currentUserJSDateFormat($localformat)

An die gut erkennbare if-Anweisung folgendes anhängen:

elseif ($current_user->date_format == 'dd.mm.yyyy') {
   $dt_popup_fmt = "%d.%m.%Y";
}

Function: currentUserDisplayDate($value)

Innerhalb der Funktion finden:

if ($dat_fmt == '') {
$dat_fmt = 'dd-mm-yyyy';
}

Den Abschnitt folgendermaßen anpassen:

if ($dat_fmt == '') {
$dat_fmt = 'dd.mm.yyyy';
}

3. /include/fields/DateTimeField.php

Funktion : __convertToDBFormat(...) [Line ~95]

folgendes an passender Stelle einfügen: (If Abfragen sind gut erkennbar)

elseif ($format == 'dd.mm.yyyy') {
       if(strpos($date, "-") !== false) {
             list($d, $m, $y) = explode('-', $date);
       } else {
             list($d, $m, $y) = explode('.', $date);
       }
}

An dieser Stelle wird leider ab und zu ein Format dd-mm-yyyy und die Einstellung des Users dd.mm.yyyy übergeben. Deshalb die zusätzlichen Zeilen, welche das nochmals prüfen.

Funktion: __convertToUserFormat((...) [Line ~157]

folgendes an passender Stelle einfügen: (If Abfragen sind gut erkennbar)

elseif ($format == 'dd.mm.yyyy') {
                        $date[0] = $d . '.' . $m . '.' . $y;
}

Funktion: convertToUserFormat(...) [Line ~139]

An dieser Stelle wird das Standard-Format des Vtigers auf dd.mm.yyyy gesetzt. Diese Einstellung ist besonders für die Erweiterung PDFMaker relevant, da diese für Datumsausgaben in PDF's genutzt wird, welche aus einem Workflow genutzt werden.
Suchen:

if(empty($format)) {
    $format = 'dd-mm-yyyy';
}

ersetzen:

if(empty($format)) {
    $format = 'dd.mm.yyyy';
}

Funktion: convertToDBFormat(...) [Line ~139]

Suchen:

if(empty($format)) {
     $format = 'dd-mm-yyyy';
}

ersetzen:

if(empty($format)) {
    $format = 'dd.mm.yyyy';
}

4. /include/ComboStrings.php

Um Line 304 steht die Zuweisung

'date_format_dom' => Array('dd-mm-yyyy'=>'dd-mm-yyyy',
'mm-dd-yyyy'=>'mm-dd-yyyy',
'yyyy-mm-dd'=>'yyyy-mm-dd'
 ),

Daraus folgendes machen:

'date_format_dom' => Array('dd-mm-yyyy'=>'dd-mm-yyyy',
                           'dd.mm.yyyy'=>'dd.mm.yyyy',
                            'mm-dd-yyyy'=>'mm-dd-yyyy',
                            'yyyy-mm-dd'=>'yyyy-mm-dd'
                     ),

5. /modules/Calendar/RepeatEvents.php

Function: formattime

Diesmal passend in die switch-Anweisung folgendes einfügen:

case 'dd.mm.yyyy': $format_string = 'd.m.Y H:i'; break;

6. /modules/Vtiger/helpers/Util.php

Diese Anpassung ist nur dann notwendig, wenn Ihr auch die Ausgaben der Form “Wed, Dec 18, 2013 at 15:50” anpassen möchtet, sodass am Ende “Wed, 18. Dec 2013 at 15:50 Uhr” erscheint.
Diese Ausgabe richtet sich mit dieser Anpassung besser an der Spracheinstellung des vtigerCRM aus. Die Wochentage bzw. Monatsnamen werden sicherlich noch übersetzt, genau wie das kleine “at”.

Function: formatDateTimeIntoDayString($dateTime) [~213]

Search:

$formatedDate = vtranslate('LBL_'.date('D', $date)). ', ' .vtranslate('LBL_'.date('M', $date)). ' ' .date('d', $date). ', ' .date('Y', $date);
//Adding time details
$formatedDate .= ' ' .vtranslate('LBL_AT'). ' ' .$displayTime;

Replace with:

        if($currentUser->get("language") == "de_de") {
            $formatedDate = vtranslate('LBL_'.date('D', $date)). ', ' .date('d', $date). '. ' .vtranslate('LBL_'.date('M', $date)). ' ' .date('Y', $date);
            //Adding time details
            $formatedDate .= ' um ' .$displayTime. ' Uhr';
        } else {
            $formatedDate = vtranslate('LBL_'.date('D', $date)). ', ' .vtranslate('LBL_'.date('M', $date)). ' ' .date('d', $date). ', ' .date('Y', $date);
            //Adding time details
            $formatedDate .= ' ' .vtranslate('LBL_AT'). ' ' .$displayTime;
        }

7. /resources/app.js

Function: convertToDatePickerFormat(dateFormat)

Auch hier ist die if-Anweisung wieder gut zu erkennen, welche durch folgendes erweitert werden muss:

 else if (dateFormat == 'dd.mm.yyyy') {
            return 'd.m.Y';
        }
Function: convertTojQueryDatePickerFormat

Search:

var splitDateFormat = dateFormat.split('-');

Replace with:

  var dotMode = false;
  if(dateFormat.indexOf(".") != -1 && dateFormat.indexOf("-") == -1) {
      dotMode = true;
  }
  var splitDateFormat = dateFormat.split(dotMode?'.':'-');

Search:

  var joinedDateFormat =  splitDateFormat.join('-');

Replace with:

  var joinedDateFormat =  splitDateFormat.join(dotMode?'.':'-');

8. /layouts/vlayout/modules/Vtiger/resources/dashboards/Widget.js

Funktion convertToDateRangePicketFormat

Wieder an das Ende der if-Bedingung einfügen:

else if(userDateFormat == 'dd.mm.yyyy') {
       return 'dd.MM.yyyy';
}

9. /resources/helper.js

Function: getDateInstance : function(dateTime,dateFormat) [~Zeile 53]

Search:

var splittedDate = dateComponent.split("-");
var splittedDateFormat = dateFormat.split("-");

Replace with:

var dotMode = false;
if(dateComponent.indexOf(".") != -1 && dateComponent.indexOf("-") == -1) {
      dotMode = true;
}
var splittedDate = dateComponent.split(dotMode?".":"-");
var splittedDateFormat = dateFormat.split(dotMode?".":"-");