Ⅰ php 計算兩個日期相隔多少年,多少月,多少天
1、首先計算2020-02-10和2020-02-01日間隔的天數。使瞎搜用strtotime:<?php $days = (strtotime('2020-02-10') - strtotime('2020-02-01'))/86400; echo $days;。
Ⅱ php日歷模塊的運算邏輯求解!如何求日期對應的星期幾!
現在以2010年6月14日為例說明。6月份共有30天,在這個日歷表中共5行,首先需要確定當前所在的日期(當然也可以指定一個日期),比如14日,通過表格可以知道它在第3行對應星期一那列(第3周)。通常每個月第1天不是在表格開始的位置,位置並不固定,同樣不固定的還有每個月的周數,有時候是4周,有時候是5周。這樣,想要完成這個日歷表格就需要確定一些基礎的日期變數,下面具體來看需要設定的基礎變數。
PHP提供了date()函數,該函數提供了豐富的日期處理功能。現在需要獲得的數據有兩個,第一個是當月的總天數;第二個是該月的第一天所在星期中的第幾天,數字表示0(表示星期天)到6(表示星期六)。通過date()函數可以很容易獲得上面的數據。
<?php
//date()函數的基本用法
$year = date('Y'); //獲得年份,例如2006
$month = date('n'); //獲得月份,例如04
$day = date('j'); //獲得日期,例如3
?>
通過mktime()函數和date()函數獲得當月的總天數。
//獲得當月的總天數
$daysInMonth = date("t",mktime(0,0,0,$month,1,$year));
同樣是組合使用mktime()函數和date()函數,獲得該月的第一天所在星期中的第幾天,數字表示0(表示星期天)到6(表示星期六)。
//獲得每個月的第一天,例如4
$firstDay = date("w", mktime(0,0,0,$month,1,$year));
現在重新來觀察下這個日歷表格,我們發現,表格中的值是從1到x(當月的總天數)。我們可以形象地通過一個坐標來表示每一個位置(x,y),表格的起始位置是(0,0),結束位置是(5,4),當月第一天的起始位置是(0,3)。現在來創建一個二維數組來存儲對應的日期。
(1)需要獲得表格的數目。
//計算數組中的日歷表格數
$tempDays = $firstDay + $daysInMonth;
(2)需要算出該月一共有幾周(即表格的行數)。
//獲得表格行數
$weeksInMonth = ceil($tempDays/7);
(3)在獲得行數的變數之後,創建一個二維數組用來存放日期信息,代碼如下:
<?php
for($j=0;$j<$weeksInMonth;$j++)
{
for($i=0;$i<7
;$i++)
{
$counter ++;
$week [$j] [$i] = $counter;
}
}
?>
(4)細心的讀者可能發現,上面的代碼其實是一個雛型,因為它處理出來的數據並沒有過濾那些空白的表格單元。下面來繼續改造下這段代碼,加入過濾和構造的部分。改造後的代碼如下:
<?php
//創建日期二維數組
for($j = 0; $j < $weeksInMonth; $j ++) {
for($i = 0; $i < 7; $i ++) {
$counter ++;
$week [$j] [$i] = $counter;
//日期偏移量
$week [$j] [$i] -= $firstDay;
if (($week [$j] [$i] < 1) || ($week [$j] [$i] > $daysInMonth)) {
$week [$j] [$i] = "";
}
}
}
?>
(5)在獲得正確的二維數組之後,就可以通過foreach()函數將存儲的日期信息遍歷出來,同時插入HTML標簽創建日期
不知是否正確,轉自我的一個朋友
Ⅲ 用php計算兩個日期相差多少
用php計算給定兩個日期相差多少天: 計算方法不只下面介紹的這些,只是一些比較常規的方法: 上面的php時間日期函數strtotime已經把字元串日期變成了時間戳,這樣只要讓兩數值相減,然後把秒變成天就可以了,比較的簡單,如下: $days=round(($enddate-$startdate)/3600/24) ; echo $days; //days為得到的天數;?下面介紹另外一種方法: 上面判斷的是兩個日期的大小,下面則是判斷生日的程序代碼,得到的$n就是相距生日的天數. $birthday=「生日」; $birthday = preg_replace('/\d+/', Date('Y'), $birthday, 1); $d = 60*60*24; $n= floor((strtotime($birthday)-time())/$d);$n=$n+1;還有如果相比的是現在的時間,就可以用time()函數,得到的就是現在的時間戳. 第二種情況呢,就是有資料庫,這樣就相對比較容易一些了!如果是MSSQL可以使用觸發器!用專門計算日期差的函數datediff()計算便可! 如果是MYSQL那就用兩個日期欄位的時間戳值,進行計算後便可得到相差的天數了.方法和上面的代碼很像.
Ⅳ PHP用今天日期計算出30天後的日期!
time()就是你現在的時間戳。
30之後就是
$time=time()+30*24*3600;
$date=date('y-m-d H:m:s',$time);
七天類似了,
$time=time()+7*24*3600;
$date=date('y-m-d H:m:s',$time);
Ⅳ PHP計算一年多少個星期和每周的開始和結束日期
PHP計算一年多少個星期和每周的開始和結束日期?方法如下:
方法一:
<php
header("Content-type:text/html;charset=utf-8");
date_default_timezone_set("Asia/Shanghai");
$year = (int)$_GET['year'];
$week = (int)$_GET['week'];
$weeks = date("W", mktime(0, 0, 0, 12, 28, $year));
echo $year . '年一共有' . $weeks . '周<br />';
if ($week > $weeks || $week <= 0)
{
$week = 1;
}
if ($week < 10)
{
$week = '0' . $week;
}
$timestamp['start'] = strtotime($year . 'W' . $week);
$timestamp['end'] = strtotime('+1 week -1 day', $timestamp['start']);
echo $year . '年第' . $week . '周開始時間戳:' . $timestamp['start'] . '<br />';
echo $year . '年第' . $week . '周結束時間戳:' . $timestamp['end'] . '<br />';
echo $year . '年第' . $week . '周開始日期:' . date("Y-m-d", $timestamp['start']) . '<br />';
echo $year . '年第' . $week . '周結束日期:' . date("Y-m-d", $timestamp['end']);
?>
方法二: <?php
header("Content-type:text/html;charset=utf-8");
function getIsoWeeksInYear($year)
{
$date = new DateTime;
$date->setISODate($year, 53);
return ($date->format("W") === "53" ? 53 : 52);
}
function weekday($custom_date)
{
$week_start = date('d-m-Y', strtotime('this week monday', $custom_date));
$week_end = date('d-m-Y', strtotime('this week sunday', $custom_date));
$week_array[0] = $week_start;
$week_array[1] = $week_end;
return $week_array;
}
echo '<br> Weeks in 2013<br>' . getIsoWeeksInYear(2013);
$weekday = weekday(strtotime(date('d-m-Y', strtotime('5-8-2013'))));
echo '<br> 10-8-2013';
echo '<br>Start: ' . $weekday[0];
echo '<br>End: ' . $weekday[1];
?>
或者方法三:
function get_week($year) {
$year_start = $year . "-01-01";
$year_end = $year . "-12-31";
$startday = strtotime($year_start);
if (intval(date('N', $startday)) != '1') {
$startday = strtotime("next monday", strtotime($year_start)); //獲取年第一周的日期
}
$year_mondy = date("Y-m-d", $startday); //獲取年第一周的日期
$endday = strtotime($year_end);
if (intval(date('W', $endday)) == '7') {
$endday = strtotime("last sunday", strtotime($year_end));
}
$num = intval(date('W', $endday));
for ($i = 1; $i <= $num; $i++) {
$j = $i -1;
$start_date = date("Y-m-d", strtotime("$year_mondy $j week "));
$end_day = date("Y-m-d", strtotime("$start_date +6 day"));
$week_array[$i] = array (
str_replace("-",
".",
$start_date
), str_replace("-", ".", $end_day));
}
return $week_array;
}
函數get_week()通過傳入參數$year年份,獲取當年第一天和最後一天所在的周數,計算第一周的日期,通過循環獲取每一周的第一天和最後一天的日期。最後返回是一個數組。
想得到指定周數的開始日期和結束日期,比如2011年第18周的開始日期和結束日期,代碼如下:
復制代碼 代碼如下:
$weeks = get_week(2011);
echo '第18周開始日期:'.$weeks[18][0].'';
echo '第18周結束日期:'.$weeks[18][1];
最後輸出結果:
第18周開始日期:2011.05.02
第18周結束日期:2011.05.08