2009-10-20 5 views

Antwort

22

für die vollständige Textdarstellung des Monats müssen Sie "F" zu übergeben:

echo date("y:F:d"); 

für Vormonats Sie

echo date("y:F:d",strtotime("-1 Months")) verwenden können;

+0

dank tyler .. ich brauche dieses ... – Fero

+4

Dies wird scheitern, wenn am 31. durchgeführt. Siehe meine Antwort. – Yarin

0

Sie werden Datum verwenden müssen ("F"); um die Volltextdarstellung des Datums zu erhalten.

6

in diesem Monat

date("y:M:d", mktime(0, 0, 0, date('m'), date('d'), date('Y'))); 

Vormonaten

date("y:M:d", mktime(0, 0, 0, date('m') - 1, date('d'), date('Y'))); 
date("y:M:d", mktime(0, 0, 0, date('m') - 2, date('d'), date('Y'))); 
+0

deins diese Antwort erzeugt PARSE ERROR Parse-Fehler: Syntaxfehler, unerwartete ';' in E: \ Programme \ xampp \ htdocs \ test_Fero \ test.php in Zeile 3 – Fero

+0

Wenn Sie die öffnenden Klammern '(' Sie finden, es gibt fünf in jeder Zeile, aber nur vier schließende Klammern. Wenn Sie balancieren Sie die zwei, fünf von jedem, der Code sollte funktionieren. –

+0

Sieht aus, als ob Sie ein anderes Schließen ")" vor dem Semikolon benötigen. –

2

Versuchen Sie, die in strtotime Funktion in PHP gebaut mit und 'F' mit voller Größe Textausgabe:

echo date('y:F:d'); // first month 
echo date('y:F:d', strtotime('-1 month')); // previous month 
echo date('y:F:d', strtotime('-2 month')); // second previous month 
echo date('y:F:d', strtotime('-3 month')); // third previous month 
-1
echo date('F', strtotime('-2 month')), '<br>', 
    date('F', strtotime('last month')), '<br>', 
    date('F'); 
+0

Wenn man sich daran erinnert, dass" last "einfach ein Synonym für" -1 "ist, sollte man auf strtotime() nicht verdoppeln, wenn es nicht nötig ist; Dies ist nur Zyklen zu verschwenden. –

+0

Was ist los damit? Es funktioniert wie erforderlich :) – vava

+0

@Nathan Kleyn, ich habe nicht über "-1 Monat" -Syntax, "letzten Monat" war nur eine Vermutung, die funktionierte. – vava

2

Wenn du OO sein willst P darüber, versuchen Sie dies:

$dp=new DatePeriod(date_create(),DateInterval::createFromDateString('last month'),2); 
foreach($dp as $dt) echo $dt->format("y:M:d"),"\n"; //or "y F d" 

Ausgänge:

  • 09: Oktober: 20
  • 09: Sep: 20
  • 09: Aug: 20
12

Uhr aus für die FUAH! Die anderen Antworten werden fehlschlagen, wenn sie am 31. des Monats ausgeführt werden. Verwenden Sie stattdessen:

/* 
Handles month/year increment calculations in a safe way, 
avoiding the pitfall of 'fuzzy' month units. 

Returns a DateTime object with incremented month values, and a date value == 1. 
*/ 
function incrementDate($startDate, $monthIncrement = 0) { 

    $startingTimeStamp = $startDate->getTimestamp(); 
    // Get the month value of the given date: 
    $monthString = date('Y-m', $startingTimeStamp); 
    // Create a date string corresponding to the 1st of the give month, 
    // making it safe for monthly calculations: 
    $safeDateString = "first day of $monthString"; 
    // Increment date by given month increments: 
    $incrementedDateString = "$safeDateString $monthIncrement month"; 
    $newTimeStamp = strtotime($incrementedDateString); 
    $newDate = DateTime::createFromFormat('U', $newTimeStamp); 
    return $newDate; 
} 

$currentDate = new DateTime(); 
$oneMonthAgo = incrementDate($currentDate, -1); 
$twoMonthsAgo = incrementDate($currentDate, -2); 
$threeMonthsAgo = incrementDate($currentDate, -3); 

echo "THIS: ".$currentDate->format('F Y') . "<br>"; 
echo "1 AGO: ".$oneMonthAgo->format('F Y') . "<br>"; 
echo "2 AGO: ".$twoMonthsAgo->format('F Y') . "<br>"; 
echo "3 AGO: ".$threeMonthsAgo->format('F Y') . "<br>"; 

Weitere, siehe meine Antwort here

-4
DECLARE @STARTDATE VARCHAR(MAX) 
DECLARE @ENDDATE VARCHAR(MAX) 
DECLARE @A INT 
SET @A=-12 
SET @STARTDATE= DATENAME(MONTH,GETDATE())+ DATENAME(YEAR, DATEADD(MONTH,0,GETDATE())) 
WHILE @A < 0 
BEGIN 
SET @STARTDATE = DATENAME(MONTH,DATEADD(MONTH,@A,GETDATE()))+' '+ DATENAME(YEAR, DATEADD(MONTH,@A,GETDATE())) 
SET @[email protected]+1 
PRINT @STARTDATE 
END 
0
DECLARE @STARTDATE INT 

SET @STARTDATE = -12 

WHILE @STARTDATE < 0 

BEGIN 

PRINT DATENAME(MONTH,DATEADD(MM,@STARTDATE,GETDATE()))+' '+ DATENAME(YEAR, DATEADD(MM,@STARTDATE ,GETDATE())) 

SET @STARTDATE [email protected]+1 

END 
Verwandte Themen