Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#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)
Meine Projekte:
Dashcam-Test | Babyphone-Testberichte | Türspionkameras
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
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
Meine Projekte:
Dashcam-Test | Babyphone-Testberichte | Türspionkameras
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
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
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
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
Seiten: 1