Cloud Mining
Cloud Mining

Reputation: 83

How to count date from a day only without have any specific date in a week

I want to detect how to detect if the day is in the specific settings that I save.

I already save the settings

$checkday = "Sunday";
$period = "48"; // this in hours

So I need to check if today in this week is Sunday + 48 hours after (means Tuesday) then run a function.

I already make these code

$starttimer = date('Y-m-d 00:00:00', strtotime($checkday));
$endtimer = date('Y-m-d H:i:s', strtotime('+' . $period . ' hour', strtotime(date('Y-m-d 00:00:00'))));
if(time() >= strtotime($starttimer) && time() <= strtotime($endtimer)){
 // this should run a function
}

This code is working if today is Sunday, but the problem is when today is Monday it will detect next Week Monday. I need it to check from this week Sunday + 48 hours after then run function.

The conclusion is I want to run the function on every week start from Sunday + 48 hours after.

Thanks for reading my problem, hope someone can help me.

Upvotes: -1

Views: 59

Answers (4)

Deepak Tyagi
Deepak Tyagi

Reputation: 1

You can use below code for fulfill your requirement...

<?php
$checkday = "Sunday";
$period = "48"; // this in hours
echo date('l', strtotime($checkday. ' + '.$period.' hours')); 
?>

Upvotes: 0

jspit
jspit

Reputation: 7683

It is not necessary to work with timestamps. Datetime objects can be directly compared. This makes the code easier to read.

$checkday = "Sunday";
$period = "2 Days";

$dtStart = date_create('Tomorrow')->modify('last '.$checkday);
$dtEnd = (clone $dtStart)->modify($period);
/* Use 'Now' instead of 'Today' in the following line
 * if the time periods can also be fractions of days.
 */
$dtToDay = date_create('today');
if($dtToDay >= $dtStart AND $dtToDay < $dtEnd){
  echo 'run function';
}
else {
  echo 'do nothing';
}

$dtStart is always the last $checkday weekday before tomorrow. A time in hours can also be entered for $period, for example "48 hours".

Demo: https://3v4l.org/5d2Xt

Upvotes: 0

Jacob Mulquin
Jacob Mulquin

Reputation: 3608

You can use the flexibility of strtotime to find the time of the last occurance of $checkDay. You also need to check to see that today is the check day and run in that condition as well.

<?php

$checkDay = 'Sunday';
$period = 48;

$isCheckDay = date('w', strtotime($checkDay)) === date('w');

$start = strtotime('last ' . $checkDay);
$end = strtotime(date('Y-m-d', $start) . ' +' . $period . ' hours');

$now = time();

if ($isCheckDay || ($now >= $start && $now <= $end)) {
    echo 'run function';
}

Upvotes: 0

Mai Truong
Mai Truong

Reputation: 496

I think you need get day of this week.

because if checkday = "Monday" then $starttimer will return Monday of next week.

<?php

$checkday = 'Monday';
$period = 48;
$day_this_week = "$checkday this week";
$starttimer = date('Y-m-d 00:00:00', strtotime($day_this_week));
$endtimer = date('Y-m-d H:i:s', strtotime('+' . $period . ' hour', strtotime(date('Y-m-d 00:00:00'))));
var_dump($starttimer);//string(19) "2022-09-12 00:00:00"

Upvotes: 1

Related Questions