0 / 0 / 0
Регистрация: 09.03.2025
Сообщений: 25

Вывод из xmltv программы по дням недели

26.04.2025, 16:44. Показов 1414. Ответов 14
Метки php (Все метки)

Студворк — интернет-сервис помощи студентам
Мне нужно, чтобы php скрипт выводил из xmltv программу по дням недели, как здесь https://online-tv.live/zhivaya-planeta.html

PHP код

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
$xml=simplexml_load_file("http://www.teleguide.info/download/new3/xmltv.xml");
foreach($xml->xpath( 'programme[@channel="1968"]' ) as $item){
echo "<table class='tv_program'><tr><td class='tv_time'>".date("H:i:m:d", strtotime(substr($item["start"], 0,  -6)))."<br></td>";
echo "<td class='tv_content'>".$item->title."<br></td></tr></table>";
}
?>
 
JS код (меняет день недели в 12 ночи)
 
 jQuery(document).ready(function() {
 var d = new Date();
 var day = d.getDate();
 var wday = d.getDay();
 var month=d.getMonth() + 1;
 var year=d.getFullYear();
 if(wday==0){wday=7};
 var i;
 for (i = 1; i < 8; i++) {
  if (wday==i){
  jQuery('.w'+i).prepend(day+'.'+month+'.'+year+'<br>').attr('id', year+'-'+month+'-'+day)
  }
  else{
  jQuery('.w'+i).attr('id',year+'-'+month+'-'+(day-(wday)+i))
  }
}
 jQuery('.week_day > span').click(function(){
 var this_date = jQuery(this).attr('id');
    jQuery('.activeD').removeClass('activeD');
      jQuery(this).addClass('activeD');
    });
    jQuery('.w'+wday).trigger('click');
 });
html код

HTML5
1
2
3
4
5
6
7
8
9
10
<div id="block_TV_content">
<div class="date_cal">
<div class="week_day">
<span id="" class="wday w1">Понедельник</span>
<span id="" class="wday w2">Вторник</span>
<span id="" class="wday w3">Среда</span>
<span id="" class="wday w4">Четверг</span>
<span id="" class="wday w5">Пятница</span>
<span id="" class="wday w6">Суббота</span>
<span id="" class="wday w7">Воскресенье</span></div></div>
Помогите, пожалуйста.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.04.2025, 16:44
Ответы с готовыми решениями:

Нужно, чтобы php скрипт выводил из xmltv программу по дням недели, как tv.mail.ru. Пока он выводит целиком за неделю
Здравствуйте. Есть html код &lt;div id=&quot;block_TV_content&quot;&gt; &lt;div class=&quot;date_cal&quot;&gt; &lt;div...

Из xmltv из программы одного канала вывести строку, что сейчас идет и 6 строк следующих
Здравствуйте. Помогите, пожалуйста. Есть код, который выводит строку, что идет сейчас &lt;?php...

Сравнение двух дат по дням недели
В два текстовых поля ввести две даты рождения в формате: число, месяц, год. Вывести года, в...

14
 Аватар для Noname2331
57 / 57 / 10
Регистрация: 22.12.2024
Сообщений: 410
26.04.2025, 17:13
Если что, код генерировал Дипсик (я толком не тестил), можете туда кидать эту портянку, если нужны будут доработки и исправления
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?php
$xml = simplexml_load_file("http://www.teleguide.info/download/new3/xmltv.xml");
 
$byWeeks = [];
 
foreach($xml->xpath( 'programme[@channel="1968"]' ) as $item) {
    $startDateTime = DateTime::createFromFormat('YmdHis O', $item['start']);
 
    $dayOfWeek = (int)$startDateTime->format('N');
 
    $startTime = $startDateTime->format('H:i');
    $stopTime = DateTime::createFromFormat('YmdHis O', $item['stop'])->format('H:i');
    $timeRange = "$startTime-$stopTime";
 
    $byWeeks[$dayOfWeek][$timeRange] = "" . $item->title;
}
?>
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>TV Program</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/vue@3.2.31/dist/vue.global.min.js"></script>
</head>
<body>
<div id="app" class="container mt-4">
    <ul class="nav nav-tabs">
        <li class="nav-item" v-for="(day, index) in days" :key="index">
            <a class="nav-link" :class="{active: activeDay === index}"
               @click="activeDay = index" style="cursor: pointer;">
                {{ dayNames[day] }}
            </a>
        </li>
    </ul>
    <div class="tab-content p-3 border border-top-0 rounded-bottom">
        <div v-for="(day, index) in days" :key="index" v-show="activeDay === index">
            <div class="mb-2" v-for="(title, time) in programs[day]" :key="time">
                <strong>{{ time }}:</strong> {{ title }}
            </div>
        </div>
    </div>
</div>
 
<script>
    const { createApp, ref, onMounted } = Vue;
 
    createApp({
        setup() {
            const programs = <?= json_encode($byWeeks, JSON_PRETTY_PRINT) ?>;
            const dayNames = {
                1: "Понедельник", 2: "Вторник", 3: "Среда",
                4: "Четверг", 5: "Пятница", 6: "Суббота", 7: "Воскресенье"
            };
            const days = Object.keys(programs).sort();
            const activeDay = ref(0);
 
            const getCurrentDay = () => {
                const day = new Date().getDay();
                return day === 0 ? 7 : day;
            };
 
            onMounted(() => {
                // Set current day tab
                const currentDay = getCurrentDay().toString();
                activeDay.value = days.indexOf(currentDay);
 
                // Refresh at midnight
                const now = new Date();
                const midnight = new Date();
                midnight.setHours(24, 0, 0, 0);
                setTimeout(() => location.reload(), midnight - now);
            });
 
            return { programs, dayNames, days, activeDay };
        }
    }).mount('#app');
</script>
</body>
</html>

 Комментарий модератора 
Использование ИИ для ответов на форуме запрещено. Форум - только для общения людей.
0
0 / 0 / 0
Регистрация: 09.03.2025
Сообщений: 25
26.04.2025, 17:27  [ТС]
Ошибка в пятой строке Parse error: syntax error, unexpected '[' in Z:\home\localhost\www\1\1.php on line 5

Noname2331, Да, верия 5
0
 Аватар для Noname2331
57 / 57 / 10
Регистрация: 22.12.2024
Сообщений: 410
26.04.2025, 18:30
Вот так должно заработать.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$xml = simplexml_load_file("http://www.teleguide.info/download/new3/xmltv.xml");
 
$byWeeks = array();
 
function strToTs($s){
    return mktime(
            substr($s,8,2),
            substr($s,10,2),
            substr($s,12,2),
            substr($s,4,2),
            substr($s,6,2),
            substr($s,0,4)
    );
}
 
foreach($xml->xpath( 'programme[@channel="1968"]' ) as $item) {
    $startTimestamp = strToTs($item["start"]);
    $startTime = date("H:i", $startTimestamp);
    $dayOfWeek = date('N', $startTimestamp);
    $byWeeks[$dayOfWeek][$startTime] = "" . $item->title;
}
?>
Добавлено через 6 минут
И еще надо заменить в js

JavaScript
1
const programs = <?= json_encode($byWeeks, JSON_PRETTY_PRINT) ?>;
на

JavaScript
1
const programs = <?php echo json_encode($byWeeks); ?>;
0
0 / 0 / 0
Регистрация: 09.03.2025
Сообщений: 25
26.04.2025, 19:12  [ТС]
Noname2331, Вот что появилось

Warning: simplexml_load_file(http://www.teleguide.info/download/new3/xmltv.xml) [function.simplexml-load-file]: failed to open stream: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP? in Z:\home\localhost\www\1\1.php on line 2

Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "http://www.teleguide.info/download/new3/xmltv.xml" in Z:\home\localhost\www\1\1.php on line 2

Fatal error: Call to a member function xpath() on a non-object in Z:\home\localhost\www\1\1.php on line 10
0
 Аватар для Noname2331
57 / 57 / 10
Регистрация: 22.12.2024
Сообщений: 410
26.04.2025, 19:26
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<?php
$context = stream_context_create(array(
    'http' => array(
        'ignore_errors' => true
    )
));
 
$content = file_get_contents('https://www.teleguide.info/download/new3/xmltv.xml', false, $context);
 
$xml = simplexml_load_string($content);
 
$byWeeks = array();
 
function strToTs($s){
    return mktime(
            substr($s,8,2),
            substr($s,10,2),
            substr($s,12,2),
            substr($s,4,2),
            substr($s,6,2),
            substr($s,0,4)
    );
}
 
foreach($xml->xpath( 'programme[@channel="1968"]' ) as $item) {
 
    $startTimestamp = strToTs($item["start"]);
 
    $startTime = date("H:i", $startTimestamp);
 
    $dayOfWeek = date('N', $startTimestamp);
 
    $byWeeks[$dayOfWeek][$startTime] = "" . $item->title;
}
?>
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>TV Program</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/vue@3.2.31/dist/vue.global.min.js"></script>
</head>
<body>
<div id="app" class="container mt-4">
    <ul class="nav nav-tabs">
        <li class="nav-item" v-for="(day, index) in days" :key="index">
            <a class="nav-link" :class="{active: activeDay === index}"
               @click="activeDay = index" style="cursor: pointer;">
                {{ dayNames[day] }}
            </a>
        </li>
    </ul>
    <div class="tab-content p-3 border border-top-0 rounded-bottom">
        <div v-for="(day, index) in days" :key="index" v-show="activeDay === index">
            <div class="mb-2" v-for="(title, time) in programs[day]" :key="time">
                <strong>{{ time }}:</strong> {{ title }}
            </div>
        </div>
    </div>
</div>
 
<script>
    const { createApp, ref, onMounted } = Vue;
 
    createApp({
        setup() {
            const programs = <?php echo json_encode($byWeeks) ?>;
            const dayNames = {
                1: "Понедельник", 2: "Вторник", 3: "Среда",
                4: "Четверг", 5: "Пятница", 6: "Суббота", 7: "Воскресенье"
            };
            const days = Object.keys(programs).sort();
            const activeDay = ref(0);
 
            const getCurrentDay = () => {
                const day = new Date().getDay();
                return day === 0 ? 7 : day;
            };
 
            onMounted(() => {
                // Set current day tab
                const currentDay = getCurrentDay().toString();
                activeDay.value = days.indexOf(currentDay);
 
                // Refresh at midnight
                const now = new Date();
                const midnight = new Date();
                midnight.setHours(24, 0, 0, 0);
                setTimeout(() => location.reload(), midnight - now);
            });
 
            return { programs, dayNames, days, activeDay };
        }
    }).mount('#app');
</script>
</body>
</html>
0
0 / 0 / 0
Регистрация: 09.03.2025
Сообщений: 25
26.04.2025, 21:27  [ТС]
Noname2331, В этом варианте ошибки
Заработал предыдущий, через вариант http://www.teleguide.info/down... ltv.xml.gz
$xml = simplexml_load_file("xmltv.xml");

Ошибка или недочет - понедельник в конце вывел до 04 утра, остальные дни - до 12 ночи. Сделайте, чтобы понедельник выводился до 12 (если возможно)

И нужно, чтобы прошедшие передачи отображались пассивным цветом, строка что идет сейчас - жирным. Как здесь https://tv.mail.ru/minsk/channel/1968/
0
 Аватар для Noname2331
57 / 57 / 10
Регистрация: 22.12.2024
Сообщений: 410
26.04.2025, 22:13
Почему-то в источнике данных передается часть понедельника следующей недели (до 5 утра) и часть понедельника текущей недели (после 5 утра). В примере ниже видно это, стили для текущей передачи и прошедших добавлены.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php
$xml = simplexml_load_file("xmltv.xml");
 
$byWeeks = array();
 
function strToTs($s){
    return mktime(
        substr($s,8,2),
        substr($s,10,2),
        substr($s,12,2),
        substr($s,4,2),
        substr($s,6,2),
        substr($s,0,4)
    );
}
 
foreach($xml->xpath( 'programme[@channel="1968"]' ) as $item) {
 
    $startTimestamp = strToTs($item["start"]);
    $endTimestamp = strToTs($item["stop"]);
 
    $startTime = date("H:i", $startTimestamp);
 
    $dayOfWeek = date('N', $startTimestamp);
 
    $byWeeks[$dayOfWeek][$startTime] = ['start_time' => date('d.m.Y H:i:s', $startTimestamp), 'start_timestamp' =>  $startTimestamp, 'end_timestamp' =>  $endTimestamp, 'title' => '' . $item->title];
    ksort($byWeeks[$dayOfWeek]);
}
?>
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>TV Program</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/vue@3.2.31/dist/vue.global.min.js"></script>
    <style>
        .past-pr {
            opacity: 0.5;
            color: grey;
        }
        .current-pr {
            color: black;
            opacity: 1;
            font-weight: bolder;
        }
    </style>
</head>
<body>
<div id="app" class="container mt-4">
    <ul class="nav nav-tabs">
        <li class="nav-item" v-for="(day, index) in days" :key="index">
            <a class="nav-link" :class="{active: activeDay === index}"
               @click="activeDay = index" style="cursor: pointer;">
                {{ dayNames[day] }}
            </a>
        </li>
    </ul>
    <div class="tab-content p-3 border border-top-0 rounded-bottom">
        <div v-for="(day, index) in days" :key="index" v-show="activeDay === index">
            <div
                :class="{
                    'mb-2': true,
                    'past-pr': data.start_timestamp <= parseInt(Date.now() / 1000, 10),
                    'current-pr': (data.start_timestamp <= parseInt(Date.now() / 1000, 10) && data.end_timestamp >= parseInt(Date.now() / 1000, 10))
                }"
                v-for="(data, time) in programs[day]" :key="time"
            >
                <strong>{{ time }}:</strong> {{ data.title }} ( Начало: {{ data.start_time }} )
            </div>
        </div>
    </div>
</div>
 
<script>
    const { createApp, ref, onMounted } = Vue;
 
    createApp({
        setup() {
            const programs = <?php echo json_encode($byWeeks) ?>;
            const dayNames = {
                1: "Понедельник", 2: "Вторник", 3: "Среда",
                4: "Четверг", 5: "Пятница", 6: "Суббота", 7: "Воскресенье"
            };
            const days = Object.keys(programs).sort();
            const activeDay = ref(0);
 
            const getCurrentDay = () => {
                const day = new Date().getDay();
                return day === 0 ? 7 : day;
            };
 
            onMounted(() => {
                // Set current day tab
                const currentDay = getCurrentDay().toString();
                activeDay.value = days.indexOf(currentDay);
 
                // Refresh at midnight
                const now = new Date();
                const midnight = new Date();
                midnight.setHours(24, 0, 0, 0);
                setTimeout(() => location.reload(), midnight - now);
            });
 
            return { programs, dayNames, days, activeDay };
        }
    }).mount('#app');
</script>
</body>
</html>
0
0 / 0 / 0
Регистрация: 09.03.2025
Сообщений: 25
27.04.2025, 08:45  [ТС]
Noname2331, К сожалению, вылезло вот что Parse error: syntax error, unexpected '[' in Z:\home\localhost\www\1\1.php on line 26
0
 Аватар для Noname2331
57 / 57 / 10
Регистрация: 22.12.2024
Сообщений: 410
27.04.2025, 09:01
Забыл про версию PHP

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<?php
$xml = simplexml_load_file("xmltv.xml");
 
$byWeeks = array();
 
function strToTs($s){
    return mktime(
        substr($s,8,2),
        substr($s,10,2),
        substr($s,12,2),
        substr($s,4,2),
        substr($s,6,2),
        substr($s,0,4)
    );
}
 
foreach($xml->xpath( 'programme[@channel="1968"]' ) as $item) {
 
    $startTimestamp = strToTs($item["start"]);
    $endTimestamp = strToTs($item["stop"]);
 
    $startTime = date("H:i", $startTimestamp);
 
    $dayOfWeek = date('N', $startTimestamp);
 
    if (!isset($byWeeks[$dayOfWeek][$startTime])) {
        $byWeeks[$dayOfWeek][$startTime] = array(
            'start_time' => date('d.m.Y H:i:s', $startTimestamp),
            'start_timestamp' =>  $startTimestamp,
            'end_timestamp' =>  $endTimestamp,
            'title' => '' . $item->title
        );
    }
 
    ksort($byWeeks[$dayOfWeek]);
}
?>
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>TV Program</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/vue@3.2.31/dist/vue.global.min.js"></script>
    <style>
        .past-pr {
            opacity: 0.5;
            color: grey;
        }
        .current-pr {
            color: black;
            opacity: 1;
            font-weight: bolder;
        }
    </style>
</head>
<body>
<div id="app" class="container mt-4">
    <ul class="nav nav-tabs">
        <li class="nav-item" v-for="(day, index) in days" :key="index">
            <a class="nav-link" :class="{active: activeDay === index}"
               @click="activeDay = index" style="cursor: pointer;">
                {{ dayNames[day] }}
            </a>
        </li>
    </ul>
    <div class="tab-content p-3 border border-top-0 rounded-bottom">
        <div v-for="(day, index) in days" :key="index" v-show="activeDay === index">
            <div
                :class="{
                    'mb-2': true,
                    'past-pr': data.start_timestamp <= parseInt(Date.now() / 1000, 10),
                    'current-pr': (data.start_timestamp <= parseInt(Date.now() / 1000, 10) && data.end_timestamp >= parseInt(Date.now() / 1000, 10))
                }"
                v-for="(data, time) in programs[day]" :key="time"
            >
                <strong>{{ time }}:</strong> {{ data.title }} ( Начало: {{ data.start_time }} )
            </div>
        </div>
    </div>
</div>
 
<script>
    const { createApp, ref, onMounted } = Vue;
 
    createApp({
        setup() {
            const programs = <?php echo json_encode($byWeeks) ?>;
            const dayNames = {
                1: "Понедельник", 2: "Вторник", 3: "Среда",
                4: "Четверг", 5: "Пятница", 6: "Суббота", 7: "Воскресенье"
            };
            const days = Object.keys(programs).sort();
            const activeDay = ref(0);
 
            const getCurrentDay = () => {
                const day = new Date().getDay();
                return day === 0 ? 7 : day;
            };
 
            onMounted(() => {
                // Set current day tab
                const currentDay = getCurrentDay().toString();
                activeDay.value = days.indexOf(currentDay);
 
                // Refresh at midnight
                const now = new Date();
                const midnight = new Date();
                midnight.setHours(24, 0, 0, 0);
                setTimeout(() => location.reload(), midnight - now);
            });
 
            return { programs, dayNames, days, activeDay };
        }
    }).mount('#app');
</script>
</body>
</html>
0
0 / 0 / 0
Регистрация: 09.03.2025
Сообщений: 25
27.04.2025, 09:51  [ТС]
Noname2331, И мне нужен вывод с 5 утра до 5 утра, начиная с понедельника и по воскресенье. Сразу не сказал об этом, извините. Исправьте, пожалуйста
0
 Аватар для Noname2331
57 / 57 / 10
Регистрация: 22.12.2024
Сообщений: 410
27.04.2025, 10:29
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?php
$xml = simplexml_load_file("xmltv.xml");
 
$byWeeks = array();
 
function strToTs($s){
    return mktime(
        substr($s,8,2),
        substr($s,10,2),
        substr($s,12,2),
        substr($s,4,2),
        substr($s,6,2),
        substr($s,0,4)
    );
}
 
foreach($xml->xpath( 'programme[@channel="1968"]' ) as $item) {
 
    $startTimestamp = strToTs($item["start"]);
    $endTimestamp = strToTs($item["stop"]);
 
    $startTime = date("H:i", $startTimestamp);
 
    $dayOfWeek = date('N', $startTimestamp);
 
    $pData = array(
        'start_time' => date('d.m.Y H:i:s', $startTimestamp),
        'start_timestamp' =>  $startTimestamp,
        'end_timestamp' =>  $endTimestamp,
        'title' => '' . $item->title
    );
 
    if (date('H', $startTimestamp) >= 5) {
        $byWeeks[$dayOfWeek][$startTime] = $pData;
        ksort($byWeeks[$dayOfWeek]);
    } else if ($dayOfWeek > 1) {
        $byWeeks[$dayOfWeek-1][$startTime] = $pData;
        //ksort($byWeeks[$dayOfWeek-1]);
    } else {
        $byWeeks[7][$startTime] = $pData;
    }
}
?>
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>TV Program</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/vue@3.2.31/dist/vue.global.min.js"></script>
    <style>
        .past-pr {
            opacity: 0.5;
            color: grey;
        }
        .current-pr {
            color: black;
            opacity: 1;
            font-weight: bolder;
        }
    </style>
</head>
<body>
<div id="app" class="container mt-4">
    <ul class="nav nav-tabs">
        <li class="nav-item" v-for="(day, index) in days" :key="index">
            <a class="nav-link" :class="{active: activeDay === index}"
               @click="activeDay = index" style="cursor: pointer;">
                {{ dayNames[day] }}
            </a>
        </li>
    </ul>
    <div class="tab-content p-3 border border-top-0 rounded-bottom">
        <div v-for="(day, index) in days" :key="index" v-show="activeDay === index">
            <div
                :class="{
                    'mb-2': true,
                    'past-pr': data.start_timestamp <= parseInt(Date.now() / 1000, 10),
                    'current-pr': (data.start_timestamp <= parseInt(Date.now() / 1000, 10) && data.end_timestamp >= parseInt(Date.now() / 1000, 10))
                }"
                v-for="(data, time) in programs[day]" :key="time"
            >
                <strong>{{ time }}:</strong> {{ data.title }} ( Начало: {{ data.start_time }} )
            </div>
        </div>
    </div>
</div>
 
<script>
    const { createApp, ref, onMounted } = Vue;
 
    createApp({
        setup() {
            const programs = <?php echo json_encode($byWeeks) ?>;
            const dayNames = {
                1: "Понедельник", 2: "Вторник", 3: "Среда",
                4: "Четверг", 5: "Пятница", 6: "Суббота", 7: "Воскресенье"
            };
            const days = Object.keys(programs).sort();
            const activeDay = ref(0);
 
            const getCurrentDay = () => {
                const day = new Date().getDay();
                return day === 0 ? 7 : day;
            };
 
            onMounted(() => {
                // Set current day tab
                const currentDay = getCurrentDay().toString();
                activeDay.value = days.indexOf(currentDay);
 
                // Refresh at midnight
                const now = new Date();
                const midnight = new Date();
                midnight.setHours(24, 0, 0, 0);
                setTimeout(() => location.reload(), midnight - now);
            });
 
            return { programs, dayNames, days, activeDay };
        }
    }).mount('#app');
</script>
</body>
</html>
0
0 / 0 / 0
Регистрация: 09.03.2025
Сообщений: 25
27.04.2025, 11:10  [ТС]
Noname2331, (12+) в конце каждой строки вырежьте регуляркой
( Начало: 28.04.2025 02:35:00 ) в конце каждой строки этой ошибки быть не должно
0
 Аватар для Noname2331
57 / 57 / 10
Регистрация: 22.12.2024
Сообщений: 410
27.04.2025, 11:24
Лучший ответ Сообщение было отмечено oleg27.ed как решение

Решение

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?php
$xml = simplexml_load_file("xmltv.xml");
 
$byWeeks = array();
 
function strToTs($s){
    return mktime(
        substr($s,8,2),
        substr($s,10,2),
        substr($s,12,2),
        substr($s,4,2),
        substr($s,6,2),
        substr($s,0,4)
    );
}
 
foreach($xml->xpath( 'programme[@channel="1968"]' ) as $item) {
 
    $startTimestamp = strToTs($item["start"]);
    $endTimestamp = strToTs($item["stop"]);
 
    $startTime = date("H:i", $startTimestamp);
 
    $dayOfWeek = date('N', $startTimestamp);
 
    $pData = array(
        'start_time' => date('d.m.Y H:i:s', $startTimestamp),
        'start_timestamp' =>  $startTimestamp,
        'end_timestamp' =>  $endTimestamp,
        'title' => preg_replace('/\s*\(\d+\+\)\s*$/i', '', $item->title)
    );
 
    if (date('H', $startTimestamp) >= 5) {
        $byWeeks[$dayOfWeek][$startTime] = $pData;
        ksort($byWeeks[$dayOfWeek]);
    } else if ($dayOfWeek > 1) {
        $byWeeks[$dayOfWeek-1][$startTime] = $pData;
    } else {
        $byWeeks[7][$startTime] = $pData;
    }
}
?>
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>TV Program</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/vue@3.2.31/dist/vue.global.min.js"></script>
    <style>
        .past-pr {
            opacity: 0.5;
            color: grey;
        }
        .current-pr {
            color: black;
            opacity: 1;
            font-weight: bolder;
        }
    </style>
</head>
<body>
<div id="app" class="container mt-4">
    <ul class="nav nav-tabs">
        <li class="nav-item" v-for="(day, index) in days" :key="index">
            <a class="nav-link" :class="{active: activeDay === index}"
               @click="activeDay = index" style="cursor: pointer;">
                {{ dayNames[day] }}
            </a>
        </li>
    </ul>
    <div class="tab-content p-3 border border-top-0 rounded-bottom">
        <div v-for="(day, index) in days" :key="index" v-show="activeDay === index">
            <div
                :class="{
                    'mb-2': true,
                    'past-pr': data.start_timestamp <= parseInt(Date.now() / 1000, 10),
                    'current-pr': (data.start_timestamp <= parseInt(Date.now() / 1000, 10) && data.end_timestamp >= parseInt(Date.now() / 1000, 10))
                }"
                v-for="(data, time) in programs[day]" :key="time"
                :title="data.start_time"
            >
                <strong>{{ time }}:</strong> {{ data.title }}
            </div>
        </div>
    </div>
</div>
 
<script>
    const { createApp, ref, onMounted } = Vue;
 
    createApp({
        setup() {
            const programs = <?php echo json_encode($byWeeks) ?>;
            const dayNames = {
                1: "Понедельник", 2: "Вторник", 3: "Среда",
                4: "Четверг", 5: "Пятница", 6: "Суббота", 7: "Воскресенье"
            };
            const days = Object.keys(programs).sort();
            const activeDay = ref(0);
 
            const getCurrentDay = () => {
                const day = new Date().getDay();
                return day === 0 ? 7 : day;
            };
 
            onMounted(() => {
                // Set current day tab
                const currentDay = getCurrentDay().toString();
                activeDay.value = days.indexOf(currentDay);
 
                // Refresh at midnight
                const now = new Date();
                const midnight = new Date();
                midnight.setHours(24, 0, 0, 0);
                setTimeout(() => location.reload(), midnight - now);
            });
 
            return { programs, dayNames, days, activeDay };
        }
    }).mount('#app');
</script>
</body>
</html>
1
0 / 0 / 0
Регистрация: 09.03.2025
Сообщений: 25
27.04.2025, 12:13  [ТС]
Noname2331, Боьшое спасибо не один раз.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.04.2025, 12:13
Помогаю со студенческими работами здесь

Вывести записи по дням недели
подскажите, есть таблица date | price | name как вывести заказы на текущую неделю. т.е. ...

Друзья сложность с календарём php точнее сопоставления цифр дням недели
Ситуация такая есть дни недели Понедельник ей сопоставлена цифра 2, вторник цифра 4, среда цифра 8,...

вывод названия дня недели
при выборки из базы есть выбор даты DATE_FORMAT(talon_doctor.date_talon, ' %d %M %w') as...

Вывод дня недели
echo date(&quot;l&quot;); Ничего не выводит)) В чём ошибка?) Мне нужно вывести текущий день недели)

Вывод названия дня недели по его номеру
Напишите программу, которая запрашивает у пользователя номер дня недели, затем выводит название дня...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru