=
34.238.189.171

Daschmi's Notizblog

Logo des Etikators - Tool um online drucken von Etiketten für selbst angefertigte Tinkturen

(Gesetzliche) Feiertage ermitteln in Abhängigkeit der Bundesländer mittels PHP

Erstellt in PHP, Sonstiges am 22. Februar 2019

Mit folgender PHP Funktion, kann überprüft werden ob an einem Datum (Timestamp) ein Feiertag ist und wenn ja in welchem Bundesland.

class Helper {

	/**
	 * @param $tDay Timestamp des Tages, der auf einen Feiertag überprüft werden soll 
	 * @return array(
	 * 	'text' => '' Text
	 *  'feast' => boolean True wenn Feiertag
	 *  'arState' => '' Leerer Array oder Array mit Bundesländern für die der Feiertag gilt
	 * )
	 * 
	 * 	BW = Baden-Württemberg
	 * 	BY = Bayern
	 * 	BE = Berlin
	 * 	BB = Brandenburg
	 * 	HB = Bremen
	 * 	HH = Hamburg
	 * 	HE = Hessen
	 * 	MV = Mecklenburg-Vorpommern
	 * 	NI = Niedersachsen
	 * 	NW = Nordrhein-Westfalen
	 * 	RP = Rheinland-Pfalz
	 * 	SL = Saarland
	 * 	SN = Sachsen
	 * 	ST = Sachsen-Anhalt
	 * 	SH = Schleswig-Holstein
	 * 	TH = Thüringen
	 */
	public static function getFeastInfo($tDay) {
		
		$md = date('md', $tDay);		
		$tEaster = easter_date(date('Y', $tDay));
		
		$text = ''; $feast = ''; $arState = [];		
				
		if ($md == '0101') { $feast = _('Neujahr'); }
		else if ($md == '0501') { $feast = _('Erster Mai'); }
		else if ($md == '0106') { $feast = _('Heiligen Drei Könige'); $arState = ['BW', 'BY', 'ST']; }
		else if ($md == date('md', strtotime('-2 day', $tEaster))) { $feast = _('Karfreitag'); }
		else if ($md == date('md', $tEaster)) { $feast = _('Ostersonntag'); }
		else if ($md == date('md', strtotime('+1 day', $tEaster))) { $feast = _('Ostermontag'); $arState = ['SN']; }
		else if ($md == date('md', strtotime('+39 day', $tEaster))) { $feast = _('Christi Himmelfahrt'); }
		else if ($md == date('md', strtotime('+49 day', $tEaster))) { $feast = _('Pfingstsonntag'); }
		else if ($md == date('md', strtotime('+50 day', $tEaster))) { $feast = _('Pfingstmontag'); }
		else if ($md == date('md', strtotime('+60 day', $tEaster))) { $feast = _('Fronleichnam'); $arState = ['BW', 'BY', 'HE', 'NW', 'RP', 'SL', 'SN', 'TH']; }
		else if ($md == '0815') { $feast = _('Maria Himmelfahrt'); $arState = ['SL', 'BY']; }
		else if ($md == '1003') { $feast = _('Tag der deutschen Einheit'); }
		else if ($md == '1031') { $feast = _('Reformationstag'); $arState = ['BB', 'MV', 'SN', 'ST', 'TH']; }
		else if ($md == '1101') { $feast = _('Allerheiligen'); $arState = ['BW', 'BY', 'NW', 'RP', 'SL']; }
		else if ($md == date('md', strtotime("last wednesday", mktime(0, 0, 0, 11, 23,date('Y', $tDay))))) { $feast = _('Buß- und Bettag'); $arState = ['SN']; }
		else if ($md == '1224') { $feast = _('Heiliger Abend'); }
		else if ($md == '1225') { $feast = _('1. Weihnachtsfeiertag'); }
		else if ($md == '1226') { $feast = _('2. Weihnachtsfeiertag'); }
		else if ($md == '1231') { $feast = _('Silvester (Bankfeiertag)'); }
		else if ($md == '1231') { $feast = _('Silvester (Bankfeiertag)'); }
		else if ($md == '0803') { $feast = _('Internationaler Frauentag'); $arState = ['BE']; }
					
		if (date('N', $tDay) === '6') $text = 'Samstag';
		else if (date('N', $tDay) === '7') $text = 'Sonntag';
		else $text = '';
		
		if (sizeof($arState) > 0) {
			
			$arStateMapping = [
				'BW' => 'Baden-Württemberg', 'BY' => 'Bayern', 'BE' => 'Berlin', 'HB' => 'Bremen', 'HH' => 'Hamburg', 'HE' => 'Hessen' ,'MV' => 'Mecklenburg-Vorpommern', 'NI' => 'Niedersachsen', 'NW' => 'Nordrhein-Westfalen',
				'RP' => 'Rheinland-Pfalz', 'SL' => 'Saarland', 'SN' => 'Sachsen', 'ST' => 'Sachsen-Anhalt', 'SH' => 'Schleswig-Holstein', 'TH' => 'Thüringen'
			];
			
			foreach ($arState as $k => $v) {
				
				$arState[$k] = $arStateMapping[$v];
				
			}
			
		}
						
		if ($feast === '' && $text === '') $text = 'Arbeitstag';
		else if ($feast !== '' && $text !== '') $text = $text.' ('.$feast.rtrim(', '.implode(', ', $arState), ' ,').')';
		else if ($feast !== '') $text = $feast.rtrim(', '.implode(', ', $arState), ' ,');
			
		return [
			'text' => $text, 
			'feast' => ($feast !== ''),
			'arState' => $arState
		];
		
	}

}

Siehe auch: https://de.wikipedia.org/wiki/Gesetzliche_Feiertage_in_Deutschland

HTML Textarea auf Zeilen/Rows bei Eingabe begrenzen

Erstellt in Sonstiges am 19. Januar 2019

Um ein HTML Input Element von Typ TEXTAREA auf Zeilenanzahl zu beschränken kann folgender Code verwendet werden.

Voraussetzung:

  • TEXTAREA hat eine feste Breite und Höhe
  • TEXTAREA hat eine definierte Zeilenhöhe
  • Resize der TEXTAREA sollte unterbunden werden
  • jQuery (der Code kann auch auf reines vanilla.js umgeschrieben werden)
<textarea style="white-space:normal; resize:none; min-height:0px; height:60px; width:300px; line-height:20px;" rows="3" id="limitlines"></textarea>

jQuery(document).ready(function() {
						
   jQuery('#limitlines').on('input', function() {
      
      var jqTextarea = jQuery(this);
      var line_height = parseInt(jqTextarea.css('line-height').replace(/px/, ''));
      var rows = parseInt(jqTextarea.attr("rows"));
      
      while (jqTextarea.get(0).scrollHeight > rows * line_height) {
            
         jqTextarea.val(jqTextarea.val().substring(0, jqTextarea.val().length - 1)); 
         
      }
         
   });
   
});

Beispiel:

Prefix im indexed_search Pager ausblenden / übersetzen

Erstellt in TS Schnipsel, TYPO3 am 14. Dezember 2018

In TYPO3 9 kann die Übersetzung von „Seite %d“ im Pager durch folgenden Language Key übersetzt werden:

plugin.tx_indexedsearch._LOCAL_LANG.default.displayResults.page =
plugin.tx_indexedsearch._LOCAL_LANG.de.displayResults.page =
plugin.tx_indexedsearch._LOCAL_LANG.fr.displayResults.page =
plugin.tx_indexedsearch._LOCAL_LANG.es.displayResults.page =
plugin.tx_indexedsearch._LOCAL_LANG.it.displayResults.page = 

Hier habe ich es im Beispiel ausgeblendet, damit nur die reine Zahl dargestellt wird.

Weiterhin gibt es noch folgende Schlüssel zum übersetzen:

plugin.tx_indexedsearch._LOCAL_LANG.default.displayResults.next =
plugin.tx_indexedsearch._LOCAL_LANG.default.displayResults.previous =

Nummern nach letzter Zahl/Zeichen alphabetisch oder numerisch hochzählen in VisualBasic / VB

Erstellt in Sonstiges am 10. Dezember 2018

Hat man eine Nummer und möchte dynamisch eine Folgenummer bilden, die sich nach dem letzten Zeichen richtet, kann man in Visual Basic folgende Funktion verwenden:

Imports System.Text.RegularExpressions

Module VBModule

    Function NextLetter(c As String) As String

        If c = "Z" Then

            Return "Z-1"

        ElseIf c = "z" Then

            Return "z-1"

        End If

        Return Chr(Asc(c) + 1)

    End Function

    Function NextNr(ByVal val As String) As String

        Dim regPatternNumber As String = "\d+$"
        Dim regNumber As Regex = New Regex(regPatternNumber)
        Dim matchNumber As Match = regNumber.Match(val)

        Dim regPatternChar As String = "[A-Za-z]+$"
        Dim regChar As Regex = new Regex(regPatternChar)
        Dim matchChar As Match = regChar.Match(val)

        If matchNumber.Success Then

            Dim NextNumber As Integer = Convert.toInt32(matchNumber.value)
            NextNumber = NextNumber + 1

            Return Regex.Replace(val, regPatternNumber, cstr(NextNumber))

        ElseIf matchChar.Success Then

            Return Regex.Replace(val, regPatternChar, NextLetter(matchChar.value))

        Else

            Return val + "-1"

        End If

        Return "_"

    End Function

    Sub Main()

        Console.WriteLine(NextNr("A/1"))
        Console.WriteLine(NextNr("A/1/B"))
        Console.WriteLine(NextNr("A/1/Z"))
        Console.WriteLine(NextNr("A/1/["))
        Console.WriteLine(NextNr("A/1/10"))

    End Sub

End Module

Die gleiche Funktion in PHP findet man hier.

Funktion um manuelle Nummern hochzuzählen

Erstellt in PHP am 23. November 2018

Mit folgender Funktion können Nummern hochgezählt werden, die aus Zahlen und Buchstaben bestehen können. Bei Buchstaben wird der nächste Buchstabe im Alphabet genommen, bei Zahlen die letzte Zahl der Nummer erhöht. Sollte keine Zahl oder Buchstabe am Ende der Nummer stehen, so bekommt die Nummer das Suffix „-1“.

abstract class DS {

   public static function getNextNumber($prevNumber) {
               
      $prevNumber = trim($prevNumber);
      
      if (strlen($prevNumber) <= 0) return "1";            
      
      preg_match('/\d+$/', $prevNumber, $mNumberic);
      preg_match('/[A-Za-z]+$/', $prevNumber, $mCharacter);
      
      if (isset($mNumberic[0]) && intal($mNumberic[0]) > 0) {
            
            return preg_replace('/\d+$/', intval($mNumberic[0]) + 1, $prevNumber);
            
      } else if (isset($mCharacter[0]) && strlen($mCharacter[0]) > 0) {

            return preg_replace('/[A-Za-z]+$/', ++ $mCharacter[0], $prevNumber);
            
      } else {
            
            return $prevNumber.'-1';
            
      }
      
   }

}

Ausgabe:

DS::getNextNumber("") => "1"
DS::getNextNumber("1") => "2"
DS::getNextNumber("100") => "101"
DS::getNextNumber("ABC/2/CED-100") => "ABC/2/CED-101"
DS::getNextNumber("ABC/2/CEE") => "ABC/2/CEF"
DS::getNextNumber("B") => "C"
DS::getNextNumber("Z") => "AA"
DS::getNextNumber("12B") => "12C"
DS::getNextNumber("12-B") => "12-C"
DS::getNextNumber("12-B/") => "12-B/-1"
DS::getNextNumber("A") => "ZZ"

Die gleiche Funktion für VisualBasic findet man hier.



Bitte genehmigen Sie die Verwendung von Cookies dieser Website! Mehr Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen. Wenn du diese Website ohne Änderung der Cookie-Einstellungen verwendest oder auf "Akzeptieren" klickst, erklärst du sich damit einverstanden.

Schließen