Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
15 / 14 / 3
Регистрация: 14.12.2017
Сообщений: 240

Строка: Сравнение дат

15.01.2018, 09:56. Показов 3213. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
PHP
1
2
3
if ("2018-01-10 16:09:48" >= "2018-01-10" && "2018-01-12 16:32:41" <= "2018-01-12") {
        echo "ok,";
}

первое условие отрабатывает нормально,второе отробатывает только "меньше",то есть этот код не пишет мне ОК,хотя должен

PHP
1
2
3
if ("2018-01-10 16:09:48" >= "2018-01-10" && "2018-01-12 16:32:41" <= "2018-01-13") {
        echo "ok,";
}
а этот пишет ОК, то есть почему-то не рабатывает ровно в "<="
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.01.2018, 09:56
Ответы с готовыми решениями:

сравнение дат
$h=(int)$rowss; $min=(int)$rowss; $mo=(int)$rowss; $day=(int)$rowss; $year=(int)$rowss; $totime=mktime($h,$min,0,$mo,$day,$year);...

Сравнение дат
Привет всем, получаю дату в таком формате И суть в том что мне надо сравнить текущую дату и полученную дату , если текущую дата...

Сравнение дат
Здравствуйте, просмотрел многие справочники и не могу справиться с такой задачей: есть таблица в mysql с датой. Вопрос: нужно сравнить дату...

23
27 / 26 / 11
Регистрация: 19.06.2014
Сообщений: 158
15.01.2018, 12:00
Цитата Сообщение от wwn41268 Посмотреть сообщение
второе отробатывает только "меньше",то есть этот код не пишет мне ОК,хотя должен
Не должен.

PHP
1
"2018-01-12 16:32:41" <= "2018-01-12"
Даже визуально видно, что эти строки не равны. Посчитайте, хотя бы, их длину -- она разная. Уже значит строки не равны.
0
Эксперт .NET
 Аватар для Rius
13026 / 7591 / 1662
Регистрация: 25.05.2015
Сообщений: 23,093
Записей в блоге: 14
15.01.2018, 12:06
wwn41268, переводите в дату/время и только потом сравнивайте. Сравнение строк не равно сравнению времени.
0
27 / 26 / 11
Регистрация: 19.06.2014
Сообщений: 158
15.01.2018, 12:14
Цитата Сообщение от Rius Посмотреть сообщение
Сравнение строк не равно сравнению времени
В данном случае -- равно. Посмотрите, как у него сформированы даты.
Так что в этом нет проблем.
1
 Аватар для Уф
890 / 725 / 447
Регистрация: 13.07.2015
Сообщений: 2,277
15.01.2018, 12:16
PHP
1
2
3
4
5
6
7
8
$a = DateTime::createFromFormat('Y-m-d H:i:s',"2018-01-10 16:09:48");
$b = DateTime::createFromFormat('Y-m-d',"2018-01-10");
$c = DateTime::createFromFormat('Y-m-d H:i:s',"2018-01-10 16:32:41");
$d = DateTime::createFromFormat('Y-m-d',"2018-01-12");
 
if ($a >= $b && $c <= $d) {
        echo "ok";
}
0
Эксперт .NET
 Аватар для Rius
13026 / 7591 / 1662
Регистрация: 25.05.2015
Сообщений: 23,093
Записей в блоге: 14
15.01.2018, 12:19
Цитата Сообщение от jasper-blondin Посмотреть сообщение
В данном случае -- равно. Посмотрите, как у него сформированы даты.
Так что в этом нет проблем.
Как раз не имеет никакого значения то, как у него сейчас сформированы строки. Просто потому, что сравнение дат должно выполняться как сравнение дат, в числовом виде.
Хотя бы в функцию strtotime() запихнуть, самое простое. Или иным способом создать объект даты.
0
27 / 26 / 11
Регистрация: 19.06.2014
Сообщений: 158
15.01.2018, 12:44
Цитата Сообщение от Rius Посмотреть сообщение
Как раз не имеет никакого значения то, как у него сейчас сформированы строки.
Имеет самое ключевое значение.
Формат даты у него подобран грамотно. Такой формат позволяет полноценно сравнивать даты как строки, без создания объектов или меток.

Цитата Сообщение от Rius Посмотреть сообщение
Просто потому, что сравнение дат должно выполняться как сравнение дат, в числовом виде.
Согласитесь, это прозвучало как некая идеология.
Даты могут полноценно сравниваться и в строковом виде, но при грамотно сконструированном формате записи.

Если же говорить о личных предпочтениях, то я бы тоже создал метки и сравнивал по ним. Просто потому, что привык так делать.
Но еще раз подчеркну, это не значит, что нельзя выполнять сравнение другими способами.
1
Эксперт .NET
 Аватар для Rius
13026 / 7591 / 1662
Регистрация: 25.05.2015
Сообщений: 23,093
Записей в блоге: 14
15.01.2018, 13:16
Цитата Сообщение от jasper-blondin Посмотреть сообщение
Согласитесь, это прозвучало как некая идеология.
Идеология предсказания и избегания ошибок.
Цитата Сообщение от jasper-blondin Посмотреть сообщение
Формат даты у него подобран грамотно.
Не у него подобран. Это ISO-8601, только ленивый не слышал. Удобно сравнивать, ага.
Пока в дело не вступают другие форматы того же. А то, что форматы могут быть разные, видно по первому же посту.
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
<?php
 
$a = "2018-01-10 16:19:49+0000";
$b = "2018-01-10 17:09:49+0100";
 
echo "a = $a\n";
echo "b = $b\n";
 
if ($a < $b) {
    echo "a < b";
} else if ($a > $b) {
    echo "a > b";
} else {
    echo "a == b";
}
 
echo "\n";
 
$c = strtotime ($a);
$d = strtotime ($b);
 
if ($c < $d) {
    echo "c < d";
} else if ($c > $d) {
    echo "c > d";
} else {
    echo "c == d";
}
Здесь время a на 10 минут больше времени b, просто они в разных часовых поясах.
Сравнение же строк расходится со сравнением времени кардинально:
a = 2018-01-10 16:19:49+0000
b = 2018-01-10 17:09:49+0100
a < b
c > d
0
27 / 26 / 11
Регистрация: 19.06.2014
Сообщений: 158
15.01.2018, 13:36
Цитата Сообщение от Rius Посмотреть сообщение
Не у него подобран. Это ISO-8601, только ленивый не слышал. Удобно сравнивать, ага.
Ну Вы же читали мое сообщение. Я писал именно о формате, который выбрал автор темы. Опирался я на первое сообщение темы. И проблем в сравнении лично я не заметил.

Вы же пишете о стандарте ISO-8601. И именно при использовании этого стандарта могут возникнуть проблемы.

Но главное: при использовании сравнения строк проблем в коде, описанном в данной теме, не возникнет.

Вы привели пример хорошего тона. И будет здорово, если автор темы изучит данный вопрос и будет использовать Ваш совет в будущем при работе с датами.
Я же отвечаю на вопрос в теме. И проблем при сравнении дат не возникнет. Код автора рабочий. Просто сам автор неверно его понимает. Оттого и вопросы возникают.

Я не вижу необходимости что-то обсуждать. Ибо мы только разводим оффтоп.
1
Эксперт .NET
 Аватар для Rius
13026 / 7591 / 1662
Регистрация: 25.05.2015
Сообщений: 23,093
Записей в блоге: 14
15.01.2018, 13:45
Цитата Сообщение от jasper-blondin Посмотреть сообщение
Ну Вы же читали мое сообщение. Я писал именно о формате, который выбрал автор темы.
Вижу, согласен.
Цитата Сообщение от jasper-blondin Посмотреть сообщение
Я же отвечаю на вопрос в теме.
А я смотрю немного дальше. ТС'ам здесь на форуме частенько нужно (на самом-то деле) одно, они спрашивают другое, а ожидают в ответ третье.
1
15 / 14 / 3
Регистрация: 14.12.2017
Сообщений: 240
15.01.2018, 16:34  [ТС]
Спасибо отписавшимся,проблему решил сам.
Цитата Сообщение от wwn41268 Посмотреть сообщение
2018-01-12
интерпритатор считает как 2018-01-12 00:00:00
по этому и не учитывало "равно"

Добавлено через 1 минуту
Цитата Сообщение от jasper-blondin Посмотреть сообщение
Имеет самое ключевое значение.
Формат даты у него подобран грамотно. Такой формат позволяет полноценно сравнивать даты как строки, без создания объектов или меток.
именно
0
Эксперт .NET
 Аватар для Rius
13026 / 7591 / 1662
Регистрация: 25.05.2015
Сообщений: 23,093
Записей в блоге: 14
15.01.2018, 17:31
Цитата Сообщение от wwn41268 Посмотреть сообщение
интерпритатор считает как 2018-01-12 00:00:00
по этому и не учитывало "равно"
Что интерпретатор считает?...
0
15 / 14 / 3
Регистрация: 14.12.2017
Сообщений: 240
15.01.2018, 17:42  [ТС]
Rius, я же написал в предыдущем сообщении
0
Эксперт .NET
 Аватар для Rius
13026 / 7591 / 1662
Регистрация: 25.05.2015
Сообщений: 23,093
Записей в блоге: 14
15.01.2018, 17:56
Да я не понял, где именно он считает как 2018-01-12 00:00:00.
0
15 / 14 / 3
Регистрация: 14.12.2017
Сообщений: 240
16.01.2018, 09:51  [ТС]
Цитата Сообщение от wwn41268 Посмотреть сообщение
if ("2018-01-10 16:09:48" >= "2018-01-10" && "2018-01-12 16:32:41" <= "2018-01-12") {
* * * * echo "ok,";
}
Rius, тут
если время не указано,он считает его за полноч,по этому когда я пытался сравнить его со временем которое больше полуночи,он не сравнивал(то что я и назвал "ровно не отрабатывает")
0
Эксперт .NET
 Аватар для Rius
13026 / 7591 / 1662
Регистрация: 25.05.2015
Сообщений: 23,093
Записей в блоге: 14
16.01.2018, 10:20
Цитата Сообщение от wwn41268 Посмотреть сообщение
если время не указано,он считает его за полноч
Никто ничего не считает, т.к. сравниваются строки.
Вот был бы перевод строки в дату, тогда да, считалось бы за полночь.
0
15 / 14 / 3
Регистрация: 14.12.2017
Сообщений: 240
16.01.2018, 14:51  [ТС]
Rius, бесполезно с тобой спорить,иди подучи язык
0
Эксперт .NET
 Аватар для Rius
13026 / 7591 / 1662
Регистрация: 25.05.2015
Сообщений: 23,093
Записей в блоге: 14
16.01.2018, 16:15
Цитата Сообщение от jasper-blondin Посмотреть сообщение
Формат даты у него подобран грамотно. Такой формат позволяет полноценно сравнивать даты как строки, без создания объектов или меток.
Ну теперь очевидно, что не подобран грамотно (ввиду отсутствия грамотности), а тупо где-то подсмотрен.
Зацените, как хорошо топик подпадает под описанное в Саге о X, Y и Z...
0
16.01.2018, 16:37  [ТС]

Не по теме:

Вот из-за таких упертых,которые не видят ни одного решения кроме своего проблемы в мире и существуют ))

0
Айлурофил
 Аватар для Massaraksh7
509 / 441 / 111
Регистрация: 27.05.2017
Сообщений: 2,649
Записей в блоге: 5
19.01.2018, 10:47
Цитата Сообщение от wwn41268 Посмотреть сообщение
интерпритатор считает как 2018-01-12 00:00:00
А откуда интерпретатор знает, что в строке подразумевается дата?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.01.2018, 10:47
Помогаю со студенческими работами здесь

Сравнение двух дат на PHP
В if стоит условие - сравниваются две даты, выраженные переменными пхп, но сравнение почему-то не проходит.... if ($dat1 &lt; $dat2) { ...

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

Сравнение двух дат в PHP.Нужна помощь
Помогите!Как сравнить две даты &lt;input type=text name=paystartdate value='&lt;?=Ukrdate($r-&gt;paystartdate)?&gt;' size=10&gt; &lt;input...

Сравнение дат поэлементно
Здравствуйте, есть необходимость узнать, принадлежит ли дата выбранному диапазону дат. Даты имеют формат date(&quot;d-m&quot;,...

Сравнение двух дат и вывод дат находящихся между ними
Здравствуйте! Тут такое дело, вводятся две определенные ДАТЫ в Edit1 и Edit2 в формате ДД.ММ.ГГГГ, нужно найти все ДАТЫ, которые...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru