在PHP中使用它最簡單的方法是什麼?如何在PHP(多平臺)中獲得給定週數的第一天?
我希望週一的一年中給定的週數的日期(例如:週數2009年3)
謝謝!
編輯:如果你只使用Linux的機器,使用cletus的解決方案,但是我正在尋找一些可以在Windows和Linux上工作的東西。
在PHP中使用它最簡單的方法是什麼?如何在PHP(多平臺)中獲得給定週數的第一天?
我希望週一的一年中給定的週數的日期(例如:週數2009年3)
謝謝!
編輯:如果你只使用Linux的機器,使用cletus的解決方案,但是我正在尋找一些可以在Windows和Linux上工作的東西。
又一解決方案:
<?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);
?>
您可以使用strptime()
來獲得時間。
$time = strptime('1 23 2009', '%w %U %Y');
這將讓時間爲週一(1天,0是星期天,6星期六)2009年第23周,如果你想這種格式爲日期,使用date()
。
$date = date('d F Y', $time);
+1的特定周:你的方法是不是更容易礦。 :D – NawaMan 2009-11-02 06:27:07
是的,在PHP.net頁面的註釋中說:在Windows上沒有用。 – seanmonstar 2009-11-02 06:52:48
在PHP> = 5.3中,似乎DateTime對象在窗口中也包含此功能。 http://www.php.net/manual/en/datetime.createfromformat.php – gnud 2009-11-02 08:21:57
這裏是非常簡單的解決方案,通過一個星期不,並返回日期。
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或更高版本。上面的方法也適用於早期版本。
試試這個功能
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
希望這有助於。
似乎是工作,而不是依賴於服務器操作系統:
<?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 ;
?>
的想法是添加:
我的示例返回的拳頭第二:1358722801 ,其是2013年時間戳/ 1月21日0:00:01
很簡單的PHP 5.3
echo date('M d',strtotime('2013W15'));
,其中15是週數。但對於數量在10以下的人,請確保它的格式爲01,02爲第一週和第二週。
我沒有看到使用PHP 5.2或5.1的任何問題。我工作得很好,我使用5.2.18我認爲。感謝這個捷徑! – Metropolis 2013-05-31 19:47:49
以一種乾淨的方式得到這個好方法是使用php DateTime類。
$year = 2015;
$week_no = 1;
$date = new DateTime();
$date->setISODate($year,$week_no);
echo $date->format('d-M-Y');
這將導致到:29-12-2014
接下來的這個腳本給了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'));
}
這是我的Linux和Windows平臺上迄今爲止最簡單的工作解決方案。 – Amadeus45 2009-11-02 06:56:04
'date('U',$ timestamp)''可以縮短爲'$ timestamp'。 – deceze 2009-11-02 07:13:21
根據deceze的建議更新。 – 2009-11-02 08:03:01