2009-10-20 44 views

Trả lời

22

cho đại diện văn bản đầy đủ của tháng bạn cần phải vượt qua "F":

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

trong tháng trước, bạn có thể sử dụng

echo date("y:F:d",strtotime("-1 Months"));

+0

nhờ tyler .. tôi cần một này ... – Fero

+4

này sẽ thất bại khi thực hiện vào ngày 31. Xem câu trả lời của tôi. – Yarin

0

Bạn sẽ cần phải sử dụng ngày ("F"); để có được biểu diễn toàn văn của ngày tháng.

6

tháng này

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

tháng trước

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

của bạn câu trả lời này tạo ra PARSE ERROR Lỗi phân tích cú pháp: lỗi cú pháp, không mong muốn ';' trong E: \ Program Files \ xampp \ htdocs \ test_Fero \ test.php trên dòng 3 – Fero

+0

Nếu bạn đếm các dấu ngoặc mở '(' bạn sẽ tìm thấy có năm trong mỗi dòng, nhưng chỉ có bốn dấu ngoặc đóng. Nếu bạn cân bằng hai, năm của mỗi, mã nên làm việc –

+0

Hình như bạn cần một đóng ")" trước dấu chấm phẩy. –

2

Hãy thử sử dụng được xây dựng trong strtotime hàm trong PHP và sử dụng 'F' cho đầu ra văn bản đầy đủ:

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

Hãy nhớ rằng" cuối cùng "chỉ đơn giản là một từ đồng nghĩa với" -1 ", bạn không nên tăng gấp đôi lên trên strtotime() khi không cần thiết; đây chỉ là những chu kỳ lãng phí. –

+0

Có vấn đề gì với nó? Nó hoạt động theo yêu cầu :) – vava

+0

@Nathan Kleyn, tôi không nói về cú pháp "-1 tháng", "tháng trước" chỉ là một phỏng đoán có hiệu quả. – vava

2

Nếu bạn muốn là OO P về nó, hãy thử này:

$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" 

kết quả đầu ra:

  • 09: Jul: 20
  • 09: Sep: 20
  • 09: Aug: 20
12

Xem ra cho FUAH! Các câu trả lời khác sẽ thất bại khi được thực hiện vào ngày 31 của tháng. Sử dụng điều này thay vì:

/* 
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>"; 

Để biết thêm, xem câu trả lời của tôi 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 
Các vấn đề liên quan