Как улучшить мой текущий код, чтобы получить правильный результат

У меня есть несколько событий. событие отображается в приложении каждую неделю, зависит от вставленного дня.

event one > Friday
event two > sat
event three > sun

так что событие один шоу в заявке каждую пятницу с 2 до 2 часов

Я запутался, как управлять и с 2 до 2 часов ночи. Я уже создаю логику, но она не может дать мне правильный расчет

    $input = time();
$day = date('D', $input );

switch ($day) {
case 'Sun':
$finalday='0';
break;
case 'Mon':
$finalday='1';
break;
case 'Tue':
$finalday='2';
break;
case 'Wed':
$finalday='3';
break;
case 'Thu':
$finalday='4';
break;
case 'Fri':
$finalday='5';
break;
case 'Sat':
$finalday='6';
break;
}$now = time();
$event_time = strtotime("02:00 am");

if( ($now - $event_time) < 0) // 5 minutes * 60 seconds, replace with 300 if you'd like
{
//before day
if($finalday=='0')
{

$query_day='6';
}
else
{
$query_day=$finalday-1;
}}
else
{
//current day
$query_day=$finalday;
}

как я могу показать каждое событие ровно с 2 до 2 часов в зависимости от вставленного дня

Предположим, что сейчас 12:00, поэтому день пятница, но событие 1 будет показываться с 2:00 до 1.59, затем событие 2 будет показываться с 2:00 до 1.59 (суббота).

КАК таким образом будут показаны следующие слабые автоматически события

2

Решение

Попробуйте что-то вроде этого, просто чтобы ваш код выглядел немного более элегантным и не таким неуклюжим

$dayOfWeek = date('w'); //0 for Sunday through 6 for Saturday
$hourOfDay = date('H'); //0-23
$eventOne = null;
$eventTwo = null;
$eventThree = null;

//logic structure to set events
if($hourOfDay >= 0 && $hourOfDay < 2){
$dayOfWeek -= 1; //set to previous day if earlier than 2AM
$dayOfWeek = $dayOfWeek == 0 ? 6 : $dayOfWeek; //quick check to set to Sunday if day was on Monday
$eventOne = $dayOfWeek;
$eventTwo = $dayOfWeek+1;
$eventThree = $dayOfWeek+2;

//single line if statements to correct weekly overflow
if($eventTwo == 7) $eventTwo = 0;
if($eventThree == 7) $eventThree = 0;
if($eventThree == 8) $eventThree = 1;
}else{

$eventOne = $dayOfWeek;
$eventTwo = $dayOfWeek+1;
$eventThree = $dayOfWeek+2;

//single line if statements to correct weekly overflow
if($eventTwo == 7) $eventTwo = 0;
if($eventThree == 7) $eventThree = 0;
if($eventThree == 8) $eventThree = 1;
}function getDayOfEvent($event){
switch($event){
case 0: return "Sunday"; break;
case 1: return "Monday"; break;
case 2: return "Tuesday"; break;
case 3: return "Wednesay"; break;
case 4: return "Thursday"; break;
case 5: return "Friday"; break;
case 6: return "Saturday"; break;
}
}

print "Event One: ". getDayOfEvent($eventOne)."\nEvent Two: ".getDayOfEvent($eventTwo)."\nEvent Three: ".getDayOfEvent($eventThree);

Дайте мне знать, если что-то подобное работает для вас. Извините, но мне было трудно переводить ваш английский, я старался изо всех сил 🙂 Я надеюсь, что это поможет вам, если нет, пожалуйста, дайте мне знать, и я помогу вам исправить это, чтобы это было.

Вот вставка на CodePad, где вы можете немного поиграться с кодом, если хотите http://codepad.org/SLcTeGEt

0

Другие решения

Попробуйте эту программу … возможно, это то, что вы хотите. (Ваш вопрос очень запутанный.)

/* Day Of Week 0 = Sun ... 6 = Sat
* ---------------------------------
* Day      Hour     Result    Case
* ---------------------------------
*  5     00 - 02   No event    C
*  5     02 - 24   Event 1     B
*  6     00 - 02   Event 1     A
*  6     02 - 24   Event 2     B
*  0     00 - 02   Event 2     A
*  0     02 - 24   Event 3     B
*  1     00 - 02   Event 3     A
*  1     02 - 24   No Event    C
* Other  Other     No Event    C
* ---------------------------------
*/

function getEvent( $timestamp, $eventTime ) {
$d = (int) date( 'w', $timestamp ); // Day
$h = (int) date( 'G', $timestamp ); // Hour
$event = $h < $eventTime && ( $d > 5 || $d < 2 )  // Case A
? ( $d + 2 ) % 7                              // Case A Result
: ( $h >= $eventTime && ( $d > 4 || $d == 0 ) // Case B
? ( $d + 3 ) % 7                          // Case B Result
: null );                                 // Case C Result
printf ( "\n%s %02d:00 :: %s",                    // ... and show
date( 'D', strtotime( "Sunday +{$d} days" ) ),
$h, $event ? "Event $event" : 'No event' );
}

$eventTime = 2;
echo '<pre>';
/* Testing the getEvent function */
for ( $timestamp = mktime( 23, 0, 0, 4, 30, 2015 ); // Thu at 23:00
$timestamp <= mktime( 22, 0, 0, 5, 7, 2015 ); // Thu at 22:00
$timestamp += 3600 * 2 ) {                    // Each 2 hours
getEvent( $timestamp, $eventTime );
}

?>
0

По вопросам рекламы [email protected]