Yii Framework Forum: Yii2 mit Datumformat dd.mm.yyyy und Zahlformat "xxxx,nn" - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Yii2 mit Datumformat dd.mm.yyyy und Zahlformat "xxxx,nn" Rate Topic: -----

#1 User is offline   jim. 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 150
  • Joined: 28-June 12
  • Location:Germany

Posted 26 November 2014 - 05:35 AM

Hier im deutschen Forum ist zwar kaum was los, aber ich versuche mal mein Glück:

Der Umgang mit abweichendem (deutschen) Datumformat wurde in Yii2 wohl leider nicht verbessert?!
Auch das Dezimalzahlenformat (xxxx,nn statt xxxx.nn) wird nicht out of the box unterstützt?!

Es ist nicht möglich, bei Yii2 an einer zentralen Stelle die entsprechenden Formate zu konfigurieren, so dass
Gridview, Detailview und Activeform die Daten entsprechend dem eingestellten Format anzeigen und abspeichern!

Wie löst man das dann?

Die Anforderungen sind wie folgt:

1. Datumfelder sollen im Format dd.mm.yyyy eingegeben werden (Activeform) und beim Speichern automatisch ins passende Datenbank-Format (Unix Timestamp) umgewandelt werden.

2. Bei einem Eingabefeld vom Typ DECIMAL soll das Komma als Dezimaltrennzeichen eingerichtet werden.
Der Anwender soll 1234,99 eingeben können und nicht 1234.99 eingeben müssen.

3. Die Ausgabe im Gridview und Detailview soll im eingestellten Format erfolgen. Im Gridview muss das Format auch beim Filter funktionieren.

Das soll natürlich automatisiert erfolgen. Wenn man viele Tabellen mit vielen Datum-/Dezimalfeldern hat, macht es keinen Sinn, jedes Feld manuell anzufassen und umzuwandeln.
0

#2 User is offline   PinkBrainPlan 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 42
  • Joined: 06-February 11
  • Location:Austria

Posted 02 December 2014 - 03:39 AM

Hi,

das mit den Datumsformaten ist wie schon beschrieben, eine ganz eigene Sache... Allerdings kann man sich mit I18n und DateFormatter echt gut helfen...
Ich benütze auch gerne die Erweiterung von Krajee die sich nach meiner Meinung echt gut um das Thema kümmert... - Kalenderformat kann für Sicht und Speichern separat definiert werden und in der Oberfläche kümmert sich ein JS um die Umwandlung...:)

LG Philipp



View Postyiim, on 26 November 2014 - 05:35 AM, said:

Hier im deutschen Forum ist zwar kaum was los, aber ich versuche mal mein Glück:

Der Umgang mit abweichendem (deutschen) Datumformat wurde in Yii2 wohl leider nicht verbessert?!
Auch das Dezimalzahlenformat (xxxx,nn statt xxxx.nn) wird nicht out of the box unterstützt?!

Es ist nicht möglich, bei Yii2 an einer zentralen Stelle die entsprechenden Formate zu konfigurieren, so dass
Gridview, Detailview und Activeform die Daten entsprechend dem eingestellten Format anzeigen und abspeichern!

Wie löst man das dann?

Die Anforderungen sind wie folgt:

1. Datumfelder sollen im Format dd.mm.yyyy eingegeben werden (Activeform) und beim Speichern automatisch ins passende Datenbank-Format (Unix Timestamp) umgewandelt werden.

2. Bei einem Eingabefeld vom Typ DECIMAL soll das Komma als Dezimaltrennzeichen eingerichtet werden.
Der Anwender soll 1234,99 eingeben können und nicht 1234.99 eingeben müssen.

3. Die Ausgabe im Gridview und Detailview soll im eingestellten Format erfolgen. Im Gridview muss das Format auch beim Filter funktionieren.

Das soll natürlich automatisiert erfolgen. Wenn man viele Tabellen mit vielen Datum-/Dezimalfeldern hat, macht es keinen Sinn, jedes Feld manuell anzufassen und umzuwandeln.

0

#3 User is offline   cradle 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 1
  • Joined: 28-July 15

Posted 29 July 2015 - 08:31 AM

Hallo, ich bin erst seit kurzem mit Yii am werkeln.
Habe das gleiche Problem und folgende Lösung:

Ändern der value im model nachdem es erstellt ist:

$this->Preis = yii::$app->formatter->asDecimal($this->Preis,2);


Und für die Validation und das Zurückschreiben in die DB eine filter rule:

['Preis', 'filter', 'filter' => function ($value) {$value = str_replace(',', '.', $value); return $value; }],


Das muss dann in jedem model für jedes Decimal-Feld gemacht werden.
Es funktioniert, aber was ist davon zu halten?
0

#4 User is offline   Julian-B90 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 11
  • Joined: 10-December 15

Posted 11 December 2015 - 04:38 PM

Hi yiim,

das ist ganz einfach über die web.php Config machbar.

Hier ein kleines Beispiel.

'components' => [
  'formatter' => [
      'dateFormat' => 'd.M.Y',
      'thousandSeparator' => ',',
      'decimalSeparator' => '.'
  ]
]

0

#5 User is offline   jim. 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 150
  • Joined: 28-June 12
  • Location:Germany

Posted 14 December 2015 - 07:14 AM

Über die oben aufgezeichnete Config-Einstellung kann nur die Ausgabe angepasst werden, aber nicht die Eingabe (siehe mein Punkt 1 und 2)
0

#6 User is offline   Julian-B90 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 11
  • Joined: 10-December 15

Posted 15 December 2015 - 03:35 AM

Hi yiim,

ja das ist richtig.

Die eingabe kann man dann über das jeweilige Model Steuern.

Bsp:
    
public function rules()
{
   return [
         [['dateField'], 'date', 'format' => 'yyyy-d-M H:m'],
   ];
}

0

#7 User is offline   jim. 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 150
  • Joined: 28-June 12
  • Location:Germany

Posted 16 December 2015 - 01:09 AM

Wäre ja schön, wenn es so einfach wäre...

Ich verwende jetzt folgende Extension, mit der die Eingabe "31.12.2015" beim Speichern automatisch in das passende Datenbankformat umgewandelt wird:
https://github.com/k...i2-datecontrol/
0

#8 User is offline   masterblume 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 2
  • Joined: 28-August 15

Posted 05 April 2016 - 04:28 AM

Auch wenn der Eintrag schon älter ist und hier tatsächlich nix los ist.
Ich benutze YII2 und hatte ähnliche Probleme.

Es ging hier um ein Feld für den Geburtstag.

MySQL Tabelle profile
Feld birthdate mit dem Datatype DATE.

Model Profile
    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            ...
            [['birthdate'], 'date', 'format' => 'php:Y-m-d'],
        ];
    }


Ich musste tatsächlich 'php:Y-m-d' schreiben ohne 'php:' hatte es nicht funktioniert, wegen des PHP DateTime Formats.
Siehe Doku

Views/profile/_form.php
<?php
        echo $form->field($model, 'birthdate')->widget(DatePicker::className(), [
            'language' => 'de',
            'inline' => false,
            'dateFormat' => 'dd.MM.yyyy',
            'clientOptions' => [
                'showAnim'=>'slideDown',
                'yearRange' => '-115:+0',
                'changeMonth'=> true,
                'changeYear'=> true,
                'autoSize'=>true,
                'showOn'=> "button",
                'buttonText' => 'Kalender',
            ]
        ]);
    ?>


Evtl. gibt es auch noch bessere Lösungen, bei mir funktioniert es aber aktuell so.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users