2009-11-02 39 views

回答

10

又一解決方案:

<?php 
     $week = 3; 
     $year = 2009; 

     $timestamp = mktime(0, 0, 0, 1, 1, $year) + ($week * 7 * 24 * 60 * 60); 
     $timestamp_for_monday = $timestamp - 86400 * (date('N', $timestamp) - 1); 
     $date_for_monday = date('Y-m-d', $timestamp_for_monday); 
?> 
+1

這是我的Linux和Windows平臺上迄今爲止最簡單的工作解決方案。 – Amadeus45 2009-11-02 06:56:04

+0

'date('U',$ timestamp)''可以縮短爲'$ timestamp'。 – deceze 2009-11-02 07:13:21

+0

根據deceze的建議更新。 – 2009-11-02 08:03:01

3

您可以使用strptime()來獲得時間。

$time = strptime('1 23 2009', '%w %U %Y'); 

這將讓時間爲週一(1天,0是星期天,6星期六)2009年第23周,如果你想這種格式爲日期,使用date()

$date = date('d F Y', $time); 
+0

+1的特定周:你的方法是不是更容易礦。 :D – NawaMan 2009-11-02 06:27:07

+0

是的,在PHP.net頁面的註釋中說:在Windows上沒有用。 – seanmonstar 2009-11-02 06:52:48

+0

在PHP> = 5.3中,似乎DateTime對象在窗口中也包含此功能。 http://www.php.net/manual/en/datetime.createfromformat.php – gnud 2009-11-02 08:21:57

0

這裏是非常簡單的解決方案,通過一個星期不,並返回日期。

ISO8601標準規定,第1周總是落在1月4日下降的那周。

例如,獲得一天在今年第四周:

$day_in_week = strtotime("2006-01-04 + 4 weeks")); 

然後,你可以調整這個值至週日(作爲起始的地方,你能保證你能找到):

// Find that day's day of the week (value of 0-6) 
$wday = date('w', $day_in_week); 
$offset = 6 - $wday; // How far it is from Sunday. 
$sunday_in_week = $day_in_week - ($offset * (60 * 60 * 24)); // $offset * seconds in a day 

然後,您再次在一天中添加秒數以獲得星期一。

$monday_in_week = $sunday_in_week + (60 * 60 * 24); 

注:這種方法可以偶爾有一些問題夏令時。 DST時間變化之間類似且稍微安全的方法將使用the DateTime class。但是,DateTime僅支持PHP 5.2.0或更高版本。上面的方法也適用於早期版本。

0

試試這個功能

function MondayOfWeek($WeekNumber, $Year=-1) { 
    if ($Year == -1) $Year = 0+date("Y"); 
    $NewYearDate    = mktime(0,0,0,1,1,$Year); 
    $FirstMondayDate   = 7 + 1 - date("w", mktime(0,0,0,1,1,2009)); 
    $Dates_fromFirstMonday = 7 * $WeekNumber; 
    $Second_fromFirstMonday = 60*60*24*($FirstMondayDate + $Dates_fromFirstMonday); 
    $MondayDay_ofWeek  = $NewYearDate + $Second_fromFirstMonday; 
    $Date_ofMondayDay_ofWeek = 0+date("j", $MondayDay_ofWeek); 
    return $Date_ofMondayDay_ofWeek; 
} 

for($i = 0; $i

中運行時,我得到:

-5-12-19-26-2-9-16-23-2-9-16-23-30-6-13-20-27-4-11-18-25-1-8-15-22-29-6-13-20-27-3-10-17-24-31-7-14-21-28-5-12-19-26-2-9-16-23-30-7-14-21-28 

希望這有助於。

1

似乎是工作,而不是依賴於服務器操作系統:

<?php 

    $week = 4; 
    $year = 2013; 

    $timestamp_for_monday = mktime(0, 0, 0, 1, 1, $year) + ((7+1-(date('N', mktime(0, 0, 0, 1, 1, $year))))*86400) + ($week-2)*7*86400 + 1 ; 

?> 

的想法是添加:

  • 第一選擇的年
  • 在一月的時間戳達到第一週結束時間的秒數(即7天減去1月1日+ 1天的星期幾)乘以每天的秒數
  • th的選擇週數減去第一週和當前星期
  • 1秒秒ë數量達到當前周

我的示例返回的拳頭第二:1358722801 ,其是2013年時間戳/ 1月21日0:00:01

41

很簡單的PHP 5.3

echo date('M d',strtotime('2013W15')); 

,其中15是週數。但對於數量在10以下的人,請確保它的格式爲01,02爲第一週和第二週。

+0

我沒有看到使用PHP 5.2或5.1的任何問題。我工作得很好,我使用5.2.18我認爲。感謝這個捷徑! – Metropolis 2013-05-31 19:47:49

5

以一種乾淨的方式得到這個好方法是使用php DateTime類。

$year = 2015; 
$week_no = 1; 

$date = new DateTime(); 
$date->setISODate($year,$week_no); 
echo $date->format('d-M-Y'); 

這將導致到:29-12-2014

1

接下來的這個腳本給了7天,一年

$time = new DateTime(); 
$time->setISODate(2016, 13); 
for($i=0;$i<7;$i++){ 
    echo $time->format('d-M-Y') . '<br />'; 
    $time->add(new DateInterval('P1D')); 
} 
相關問題