簡體   English   中英

從開始日期開始的PHP周和日

[英]PHP week and day from start date

我有一個用戶的訂閱日期。 例如2019-07-04。

根據星期(1,2,3,4)或一天(1-7),我需要確定相對於開始日期的星期或日期。

所以2019-07-04將是Week1,Day1 2019-07-05將是Week1,Day2等

該循環必須重復,因此如果我們到達第4周,第7天,則第二天必須再次是第1周,第1天

周可以是任意數量,而天數<= 7

有任何想法嗎? 請注意,碳纖維不是一種選擇

好吧,有了日期,可能會有很多乏味的變量。

但是,如果您只是想從某個點開始計算周數和天數,請嘗試以下方法:

$date1 = "2019-07-04";
$date2 = "2019-10-05";

$temp = dateDifference($date1, $date2);

$temp = $temp % 35;

echo "Week" . floor($temp/7) . " Day". $temp % 7;

function dateDifference($date_1 , $date_2 ) {

    $datetime1 = date_create($date_1);
    $datetime2 = date_create($date_2);

    $interval = date_diff($datetime1, $datetime2);

    return $interval->format('%R%a days');

}

請嘗試此代碼。 您將獲得星期數。

<?php 
        $date = '2019-07-04'; //please define your date here 

        $ts = strtotime($date);
        $start = (date('w', $ts) == 1) ? $ts : strtotime('last monday', $ts);
        $startDate = date('Y-m-d', $start);
        $endDate = date('Y-m-d', strtotime('next sunday', $start));

        $month = date('m', strtotime($startDate));
        $year = date('Y', strtotime($startDate));


        $first_date = date("Y-m-d", strtotime("first monday of $year-$month"));
        $last_date = date("Y-m-t", strtotime($first_date));
        $first_week = date("W", strtotime($first_date));
        $last_week = date("W", strtotime($last_date));
        $monthlyWeekCount = 1;

        if ($month == 12) {

            $ddate = "$year-12-31";
            $date = new DateTime($ddate);
            $Dweek = $date->format("W");
            if ($Dweek == 1) {
                $last_week = date('W', mktime(0, 0, 0, 12, 28, $year));
                $last_week = $last_week + 1;
            }
        }
        $monthlyWeekCount = 1;
        for ($i = $first_week; $i <= $last_week; $i++) {

            $dto = new DateTime();
            $dto->setISODate($year, $i);
            $monthData['start_date'] = $dto->format('Y-m-d');
            $dto->modify('+6 days');
            $monthData['end_date'] = $dto->format('Y-m-d');

            $MonthlyWeekNumber = '';

            if ($monthData['start_date'] == $startDate && $monthData['end_date'] == $endDate) {
                $MonthlyWeekNumber = $monthlyWeekCount;
                break;
            }
            $monthlyWeekCount++;
        }

        $details['startDate'] = $startDate;
        $details['endDate'] = $endDate;
        $details['week_number'] = $MonthlyWeekNumber;
        $details['month'] = $month;

    /***Output--***/
    echo "<pre>";
    print_r($details);
    die;

?>

試試吧。

<?php
    $date = DateTime::createFromFormat('Y-m-d', '2019-06-14' ); //please insert your date here

    $dateDiff = $date->diff( new DateTime() )->format('%a');
    if ( $dateDiff > 0 ) {
        $subscriptionCount = intval( intval( $dateDiff ) / ( 7 * 4 ) );
        $currentWeekCount = intval( $dateDiff / 7 ) % 4;
        $currentDayCount = $dateDiff % 7 + 1;
    } else {
        echo 'invalid day';
    }

    echo $subscriptionCount.' times renew'.PHP_EOL;
    echo 'last renew after '.$currentWeekCount.' weeks '.$currentDayCount.' days'.PHP_EOL;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM