मैं सप्ताह के दिन और उस दिन के भीतर एक समय सीमा के आधार पर एक सशर्त समाधान खोजने की कोशिश कर रहा हूं। मैं सप्ताह के दिन के लिए कोड का शिकार करने में कामयाब रहा हूं, लेकिन मुझे नहीं पता कि दिन के भीतर एक समय सीमा कैसे शामिल की जाए?

उदाहरण के लिए:

IF today is Monday AND between 2pm and 4pm THEN do THIS

यह वही है जो मेरे पास है...

<?php   
date_default_timezone_set('Australia/Perth'); // PHP supported timezone
$script_tz = date_default_timezone_get();
// get current day:
$currentday = date('l'); ?>
<?php if ($currentday == Monday){ ?>
Monday
<?php } elseif ($currentday == Tuesday){ ?>
Tuesday
<?php } elseif ($currentday == Wednesday){ ?>
Wednesday
<?php } elseif ($currentday == Thursday){ ?>
Thursday
<?php } elseif ($currentday == Friday){ ?>
Friday
<?php } elseif ($currentday == Saturday){ ?>
Saturday
<?php } elseif ($currentday == Sunday){ ?>
Sunday
<?php } else { ?>
<?php } ?>

मुझे यकीन नहीं है कि क्या यह समय सीमा के लिए मदद कर सकता है? सप्ताह और समय का दिन जांचें

0
Pete 19 नवम्बर 2019, 14:39

5 जवाब

सबसे बढ़िया उत्तर

मूल रूप से यह:

<?php

if (date('l') === 'Monday' && date('G') >= 2 && date('G') < 4) {
    // do something
}

आप दिन के नामों के आसपास उद्धरण खो रहे थे।

मैंने जो शर्त लिखी है, वह सोमवार को दोपहर 2 बजे से शाम 4 बजे के बीच सत्य का मूल्यांकन करेगी (जबकि शाम 4 बजे ही नहीं होगी, उदाहरण के लिए अंतिम अनुमत मान 3:59 अपराह्न है)।

2
Rikudou_Sennin 19 नवम्बर 2019, 14:55

आप कोड को कारगर बनाने के लिए विभिन्न दिनांक/समय घटकों का उपयोग कर सकते हैं:

function between($value, $start, $end)
{
    return $value > $start && $value <= $end;
}

$hours = date("G");

switch( date("N"))
{
    case 1:  //monday
        if (between($hours,12 + 2,12 + 4 )) //using 24h format to avoid checking am/pm
        {
            // IF today is Monday AND between 2pm and 4pm THEN do THIS
        }
    break;

    case 2: //tuesday
    break;


    //....

}
0
Eriks Klotins 19 नवम्बर 2019, 14:55

एक सरणी में पैक की गई सभी शर्तें रखरखाव के लिए आसान हैं।

एक सरलीकृत उदाहरण:

$ranges = [
  ['Monday',12,14, function(){echo "do something";}],
  ['Tuesday',12,14, function(){echo "do something on Tue";}],
  //: more
];

$curWeekDay = date('l');
$hours = date("G");
foreach($ranges as $range){
  if($curWeekDay == $range[0] AND $hours >= $range[1] AND $hours < $range[2]){
    $range[3]();
  }
} 

मंगलवार 13:25 को आउटपुट:

do something on Tue 
0
jspit 19 नवम्बर 2019, 15:21

यह कोड यहां जांचता है कि डेटटाइम प्रारंभ और समाप्ति समय के बीच है।

<?php

$date = new DateTime('2019-11-18 12:49');

$start = new DateTime('2019-11-18 09:00');
$end = new DateTime('2019-11-18 17:00');

if ($date > $start && $date < $end) {
    echo 'In the zone!';
}

ध्यान दें।

$date->format('l'); सोमवार या किसी भी दिन वापस आ जाएगा।

$date->format('H:i'); 13:15 या जो भी समय हो, वापस आ जाएगा।

एक नाटक लो! https://3v4l.org/XK5KR

0
delboy1978uk 19 नवम्बर 2019, 15:15

आप बेहतर उपयोगकर्ता date('N') क्योंकि यह भाषा पर निर्भर नहीं है और date('H') 24 घंटों के प्रारूप का लाभ उठाने के लिए बेहतर है जो समय की तुलना के लिए बेहतर है।

function date_in_frame($test_date, $day, $start, $end){
    $d = new Datetime($test_date);
    return $d->format("N") == $day && $d->format("H") >= $start && $d->format("H") < $end;
}
//test if "now" is Monday between 2pm (14:00) and 4pm (15:59)
var_dump(date_in_frame("now", 0, 14, 16));
0
smwhr 19 नवम्बर 2019, 15:09