亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHP 日期 - Unix 時間戳

PHP 日期 - Unix 時間戳

PHP
臨摹微笑 2022-08-05 09:45:38
有人可以幫我解決這個PHP時間戳謎語嗎?我試圖根據兩個給定的日期找到工作日的數量。我得到一個字符串日期,例如開始日期:01 / 10 / 2019(2019年10月1日)并將其分解為數組= > $s數組$s設置如下:Array ( [0] => 01 [1] => 10 [2] => 2019 )然后我從中制作了一個Unix時間戳:date('U', mktime(0, 0, 0, $s[1], $s[0], $s[2]));由于上述日期轉換,我得到了1569884400。然后我使用循環來運行它,所以我可以根據2個給定的日期找到周天數。這是該循環的結果,正如您所看到的,由于某種原因,10月27日重復。只是為了澄清這個PHP頁面的頂部,我已經設置了時區date_default_timezone_set('Europe/London');這是以下結果背后的代碼基于最后日期的總$total天數(在本例中為 2019 年 10 月 31 日,即:31 天)2019年10月應該有23個工作日,因為我得到2x 27th十月,我將只得到22個工作日。我在這里做錯了什么? $wk_days = array(1, 2, 3, 4, 5);  $days = 0;  for ($i = 0; $i < $total_days; $i++) {    $tmp = $first + ($i * 86400);    echo  $i." x86400 add to ". $first . " ==> " . $tmp. " and the new date is "  .date('Y-m-d',$tmp) ."<br/>";    $chk = date('w', $tmp);    if (in_array($chk, $wk_days)) {      $days++;    }  }0 x86400 添加到 1569884400 ==> 1569884400 新日期為 2019-10-011 x86400 添加到 1569884400 ==> 1569970800 新日期為 2019-10-022 x86400 添加到 1569884400 ==> 1570057200 新日期為 2019-10-033 x86400 添加到 1569884400 ==> 1570143600 新日期為 2019-10-044 x86400 添加到 1569884400 ==> 1570230000 新日期為 2019-10-05...23 x86400 添加到 1569884400 ==> 1571871600 新日期為 2019-10-2424 x86400 添加到 1569884400 ==> 1571958000 新日期為 2019-10-2525 x86400 添加到 1569884400 ==> 1572044400 新日期為 2019-10-2626 x86400 添加到 1569884400 ==> 1572130800 新日期為 2019-10-27 //***27 x86400 添加到 1569884400 ==> 1572217200 新日期為 2019-10-27 //***28 x86400 添加到 1569884400 ==> 1572303600 新日期為 2019-10-2829 x86400 添加到 1569884400 ==> 1572390000 新日期為 2019-10-2930 x86400 添加到 1569884400 ==> 1572476400 新日期為 2019-10-30
查看完整描述

4 回答

?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

你不需要任何復雜的東西。您可以有一個簡單的 while 循環并計算工作日。這可能不是最有效的方法,但它應該有效。


function getNoOfWeekdays(string $startdate, string $enddate, string $format = 'd/m/Y'): int

{

    $start = date_create_from_format($format, $startdate);

    $end = date_create_from_format($format, $enddate);


    $count = 0;

    while ($start <= $end) {

        if ($start->format('N') < 6) $count++;

        $start->modify('+1 days');

    }


    return $count;

}


查看完整回答
反對 回復 2022-08-05
?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

我為DateTime API創建了一個名為dt的PHP擴展。你可以在這里找到它。使用它非常簡單:


$start = '2019-10-01';

$end = '2019-11-01'; 


$start = dt::create($start);


//exclude end with true as 3.parameter

$countWeekdaysOct2019 = $start->countDaysTo('1,2,3,4,5',$end, true); //23


$countSundaysOct2019 = $start->countDaysTo('0',$end, true); //4


$countSaturdaysOct2019 = $start->countDaysTo('6',$end, true); //4


查看完整回答
反對 回復 2022-08-05
?
婷婷同學_

TA貢獻1844條經驗 獲得超8個贊

試試這個(見我上面的評論),以避免從夏天到冬天的問題:


$first = date('U', mktime(12 /* 12 pm!! */, 0, 0, $s[1], $s[0], $s[2]));

//

// some code here that the author didn't show and we hardly can extrapolate

// ...

//

$wk_days = array(1, 2, 3, 4, 5);

  $days = 0;

  for ($i = 0; $i < $total_days; $i++) {

    $tmp = $first + ($i * 86400);

    echo  $i." x86400 add to ". $first . " ==> " . $tmp. " and the new date is "  .date('Y-m-d',$tmp) ."<br/>";


    $chk = date('w', $tmp);


    if (in_array($chk, $wk_days)) {

      $days++;

    }

  }


查看完整回答
反對 回復 2022-08-05
?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

也許你可以試試這個代碼:


  $initial = "2019-10-01";

  $last = "2019-10-31";

  $wk_days = array(1, 2, 3, 4, 5);

  $days = 0;

  $date = $initial;

  do{


    $chk = date("w",strtotime($date));

    if(in_array($chk,$wk_days))

      $days++;

    $date = date("Y-m-d",strtotime("$date +1 day"));


  }while($date!=date("Y-m-d",strtotime("$last +1 day")));

    echo $days;

?>


查看完整回答
反對 回復 2022-08-05
  • 4 回答
  • 0 關注
  • 113 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號