[英]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.