Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 08. März 2012 11:55

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

den letzten Monatsnamen herausfinden

Ich versuche mit Smarty immer den vorigen vom aktuellen Monat zu bestimmen:

{assign var="currentmonth" value=$smarty.now|date_format:'%m'} {* = 3 *}
{assign var="currentmonthname" value=$smarty.now|date_format:'%B'} {* = March *}
{assign var="themonth" value="`$currentmonth-1`"} {* = 2 *}
{assign var="themonthname" value=$themonth|date_format:'%B'} {* = January *}

Komischerweise kommt aber am Ende Januar statt Februar raus. Ich meine ich versuche ja dann aus einer simplen Zahl den Monatsnamen herauszubekommen. Ich glaube das wird so nichts.

Beitrag geändert von nicmare (08. März 2012 11:56)

Offline

#2 08. März 2012 12:25

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.436

Re: den letzten Monatsnamen herausfinden

Nee, das wird so nichts.
{$smarty.now} ist der aktuelle Timestamp.
Das sind ja bekanntlich Sekunden seit dem 1. 1. 1970.
{$themonth} ist nur die Zahl 3.
Wenn Du das mit date_format verarbeitest, gilt das als 3 Sekunden seit dem 1. 1. 1970. Und da kommt dann logischerweise Januar raus, weil 3 Sekunden seit dem 1. 1. 1970 immer noch der 1. 1. 1970 ist wink

Du musst also den Timestamp des letzten Monats ermitteln. Nicht einfach nur seine Zahl im Jahr. Das wirst Du mit Smarty allein nicht hinbekommen. Da bräuchtest Du schon ein Plugin oder UDT. Denn Du musst außerdem berücksichtigen, ob wir gerade Januar haben. Dann wäre der Vormonat nämich nicht einfach nur 1 - 1, sondern 12. Und dann muss evtl. noch das letzte Jahr ermittelt werden.

Bsp.:

$now = time(); // aktueller Timestamp
$current_month_nr = strftime('%m', $now); // Nr. des aktuellen Montats
$current_year = strftime('%Y', $now); // aktuelles Jahr
$last_month_nr = $current_month_nr == 1 ? 12 : $current_month_nr - 1; // Nr. des vorherigen Monats
$last_month = mktime(0, 0, 0, $last_month_nr, 1, $current_year); // timestamp des letzten monats (am jeweils 1. um 00:00 Uhr - allerdings immer noch im gleichen Jahr; ist nur für den Namen des Monats irrelevant; für das komplette Datum muss das Jahr auch noch angepasst werden;)
$last_month_name = strftime('%B', $last_month); // Name des letzten Monats

Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#3 08. März 2012 12:47

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: den letzten Monatsnamen herausfinden

verdammt. hätte nich gedacht dass es so komplizier ist. aber spätestens im januar ists natürlich problematisch. danke für den hinweis

Offline

#4 08. März 2012 13:31

piratos
arbeitet mit CMS/ms
Registriert: 12. August 2011
Beiträge: 545

Re: den letzten Monatsnamen herausfinden

So etwas macht man am einfachsten und am schnellsten mit Mysql

SELECT MONTH( DATE_SUB( NOW( ) , INTERVAL 1
MONTH ) ) AS lastmonth

Ergibt in lastmonth die Nummer des Monats

oder

SELECT MONTHNAME( DATE_SUB( NOW( ) , INTERVAL 1
MONTH ) ) AS lastmonth

ergibt den Monatsnamen

Version 1 ist meist die bessere da Mysql englische Namen auswirft.

Offline

#5 08. März 2012 13:52

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.436

Re: den letzten Monatsnamen herausfinden

Noch einfacher:

$months = array('Januar', 'Februar', 'März', ...);
$index = strftime('%m', time()) - 1;
$index = $index == 0 ? 11 : $index -1;
return $months[$index];

Hier gehts ja gerade um den Namen.
Einfach nur die Nr. kann man auch ohne Mysql oder extra PHP Code berechnen.

Edit: kleine Fehler korrigiert.

Beitrag geändert von NaN (08. März 2012 15:57)


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#6 08. März 2012 14:15

piratos
arbeitet mit CMS/ms
Registriert: 12. August 2011
Beiträge: 545

Re: den letzten Monatsnamen herausfinden

NaN schrieb:

extra PHP Code

abgesehen davon das es sich hier ebenfalls um PHP handelt, funzt diese Version nicht, da arrays bei 0 anfangen.
Man müsste noch einen Dummy am Array - Anfang einsetzen, der auf 0 liegt.

Die SQL Variante  hat den Vorteil das man auch nach Jahren noch weiß was man da gemacht hat (erklärt sich selbst) und man kann auf dieser Basis alles berechnen was irgendwie mit Datum und Zeit zu tun hat.

Nachtrag:

<0 wird auch nicht funzen <= oder einfach <1 wäre besser.

Beitrag geändert von piratos (08. März 2012 14:24)

Offline

#7 08. März 2012 14:28

nockenfell
Moderator
Ort: Lenzburg, Schweiz
Registriert: 09. November 2010
Beiträge: 2.930
Webseite

Re: den letzten Monatsnamen herausfinden

@piratos: Als Geschwindigkeitsfanatiker:

Ist dies nun von Vorteil Prefomancemässig Datumsberechnungen an mysql auszulagern oder würde man dies besser mit PHP Bordmitteln machen? Hast du da mal einen Test gemacht?


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#8 08. März 2012 14:46

piratos
arbeitet mit CMS/ms
Registriert: 12. August 2011
Beiträge: 545

Re: den letzten Monatsnamen herausfinden

Die realen Zeiten sind kaum korrekt zu ermitteln liegen im Mikrosekundenbereich - es wird ja auch keinerlei Tabelle abgefragt.
Bei solch Kleinkram wird es kaum Unterschiede zu reinen PHP Berechnungen geben, das sieht aber ganz anders aus wenn man über Kleinkram hinausgeht - da hat Mysql die Nase vorne und es ist verdammt einfach zu nutzen.
Ich finde es besser, weil man da eigentlich überhaupt nicht programmieren muss und die Möglichkeiten sind gewaltig..

Siehe auch http://dev.mysql.com/doc/refman/5.1/de/ … tions.html

Offline

#9 08. März 2012 15:55

nockenfell
Moderator
Ort: Lenzburg, Schweiz
Registriert: 09. November 2010
Beiträge: 2.930
Webseite

Re: den letzten Monatsnamen herausfinden

Ich habe mir mal eine Klasse genau zu diesem Zweck geschrieben. MySQL ist was die Berechnung von Daten angeht wirklich etwas von einfachsten das es gibt.


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#10 08. März 2012 16:28

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.436

Re: den letzten Monatsnamen herausfinden

p... schrieb:

abgesehen davon das es sich hier ebenfalls um PHP handelt

Mit extra PHP Code meinte ich, dass man die Nr. des vorherigen Montas ja auch direkt im Template via Smarty ermitteln kann. Ohne Plugin oder UDT. So wie es Nic ja bereits gemacht hat.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#11 08. März 2012 16:35

piratos
arbeitet mit CMS/ms
Registriert: 12. August 2011
Beiträge: 545

Re: den letzten Monatsnamen herausfinden

nockenfell schrieb:

Ich habe mir mal eine Klasse genau zu diesem Zweck geschrieben. MySQL ist was die Berechnung von Daten angeht wirklich etwas von einfachsten das es gibt.

Ich will nicht verschweigen das man mit PHP 5.3 und DateTime ähnlichen "Schweinkram" sehr gut machen kann.

Beispiel:

[== PHP ==]
$date = new DateTime(date('Y-m-d',time()));
$date->modify("-1 month");
echo  $date->format("n"); 

Dazu sollte man sich aber das PHP Manual durchlesen und das hier:

http://en.wikipedia.org/wiki/ISO_8601#Time_intervals

Beitrag geändert von piratos (08. März 2012 16:38)

Offline