2011-04-05 80 views
16

假設我有我提供一個日期:查找日期範圍目前周,月,年

2011-04-05 (i.e., 5th April, 2011) 

我想找到當前周,月,年的日期範圍

Current Week: 3rd April to 9th April 
Current Month: 1st April to 30 April 
Current Year: 1st Jan to 31 Dec 

我明白今年一直會在1月1日到31日,但當前的月份和星期又怎麼樣?

編輯:

我怎樣才能找到日期,這是10天指定日期的提前或推後。 例子:

假設今天的日期是2011年4月6日 10天早期:2011年3月28日 10天后期:2011年4月15日

任何對此的思考,男人?

+0

@all:謝謝 – 2011-04-07 05:13:55

回答

12

可以使用strtotime

例如:

date('d.m.Y',strtotime('last day of this month')) 
date('d.m.Y',strtotime('last monday')) // for first day of this week 
+17

當一天是星期日/星期一時,這將返回錯誤! – 2013-06-27 12:06:31

+0

$ last_monday = date('Y-m-d',strtotime(「$ this_year-W $ week_number」)); //第一天的打印日期(MONDAY),week_number必須是兩位數,年份必須是4位ISO 8601 – mhk 2016-06-26 12:21:41

4

退房的getdate功能,還有如何使用它的手冊頁我聯繫上了幾個例子。我認爲它會回報你正在尋找的一切,

25
function rangeMonth ($datestr) { 
    date_default_timezone_set (date_default_timezone_get()); 
    $dt = strtotime ($datestr); 
    return array (
    "start" => date ('Y-m-d', strtotime ('first day of this month', $dt)), 
    "end" => date ('Y-m-d', strtotime ('last day of this month', $dt)) 
    ); 
} 

function rangeWeek ($datestr) { 
    date_default_timezone_set (date_default_timezone_get()); 
    $dt = strtotime ($datestr); 
    return array (
    "start" => date ('N', $dt) == 1 ? date ('Y-m-d', $dt) : date ('Y-m-d', strtotime ('last monday', $dt)), 
    "end" => date('N', $dt) == 7 ? date ('Y-m-d', $dt) : date ('Y-m-d', strtotime ('next sunday', $dt)) 
    ); 
} 

print_r (rangeMonth('2011-4-5')); // format: YYYY-M-D 
print_r (rangeWeek('2011-4-5')); 

輸出rangeMonth()

Array 
(
    [start] => 2011-04-01 
    [end] => 2011-04-30 
) 

輸出rangeWeek()

Array 
(
    [start] => 2011-04-04 
    [end] => 2011-04-08 
) 

注意:像GETDATE函數(),日期()等警告如果默認時區未在php.ini中設置。

+0

好的答案!對於rangeWeek()函數,如果需要執行時間戳,我們可以將其修改爲第二秒: 'function rangeWeek(){ $ dt = time(); $ res [0] = date('N',$ dt)== 1? strtotime('today',$ dt):strtotime('last monday',$ dt); $ res [1] = date('N',$ dt)== 7? strtotime('今日',$ dt):strtotime('下週日',$ dt); return $ res; }' – 2015-08-03 19:53:51

5

下面的代碼會給你一個星期的開始和截止日期:

$today = getdate(); 
    print_r($today); 
    echo "<br/>"; 

    $weekStartDate = $today['mday'] - $today['wday']; 
    $weekEndDate = $today['mday'] - $today['wday']+6; 
    echo "<br/>"; 
    echo "<br/>"; 
    echo "week start date:".$weekStartDate; 
    echo "<br/>"; 
    echo "week end date:".$weekEndDate; 

希望它可以幫助...

+1

+1個很好的例子 – 2012-12-11 19:29:39

+0

原則上這是一個不錯的主意,但實際上,返回的值不是月份感知的。我的意思是,這段代碼不會知道當前,前後幾個月有多少天。因此,如果(並且這將是一種非常常見的情況),該月的開始或結束日期是週中,那麼最終會出現負值或不存在的日期。 – AdamJB 2015-06-25 13:29:12

+0

這就是'strtotime();'真的很方便 - 通過@ Wh1T3h4Ck5查看解決方案 – AdamJB 2015-06-25 13:36:43

7

這辦法很簡單,它在考慮以當前一天星期一或星期天。

注意:如果一天不是星期一,則使用strtotime('last weekday')可能會有效,否則它將返回上一個星期一。正因爲如此,我們應該使用的strtotime(「上週一,的strtotime(「明天」)),它會爲當前每週的任何一天工作=)

解決方案:

$monday = strtotime('last monday', strtotime('tomorrow')); 
$sunday = strtotime('+6 days', $monday); 
echo "<P>". date('d-M-Y', $monday) . " to " . date('d-M-Y', $sunday) . "</P>"; 
0

正常工作,例如,它處理星期一問題

<?php 
$monday = strtotime("last monday"); 
$monday = date('w', $monday)==date('w') ? $monday+7*86400 : $monday; 

$sunday = strtotime(date("Y-m-d",$monday)." +6 days"); 

$this_week_sd = date("Y-m-d",$monday); 
$this_week_ed = date("Y-m-d",$sunday); 

echo "Current week range from $this_week_sd to $this_week_ed "; 
?> 
相關問題