Строковое сравнение дат на JavaScript
Пусть у нас есть две даты в следующем текстовом формате:
let date1 = ‘2020-12-01’; let date2 = ‘2019-12-01’;
В таком случае можно выполнить сравнение этих дат и узнать, какая из этих дат больше:
console.log(date1 > date2); // выведет true
Каким образом происходит сравнение этих дат? Дело в том, что наши даты представляют собой строки и JavaScript сравнивает их как строки. То есть он сначала сравнивает первые символы двух дат: если они одинаковы, то JavaScript сравнивает вторые символы, и так далее, пока не найдет отличия. Благодаря тому, что в нашем формате даты сначала расположен год, потом месяц, а потом день, и возможно такое сравнение.
Дело в том, что если цифра первого года оказывается больше цифры второго года, значит уже не имеет значения, что там с месяцами и днями — первый год точно больше. Если же годы совпадают, то больше будет та дата, у которой больше месяц. А если и месяцы совпадают, то больше будет та дата, у которой больше день. Ну, а если и дни одинаковы, то и даты равны.
Важно также, чтобы даты были в одном формате. В нашем случае разделителями частей дат являются дефисы. Это, конечно же, не обязательно. Например, можно поставить точки:
let date1 = ‘2020.12.01’; let date2 = ‘2019.12.01’;
Или вообще убрать разделители:
let date1 = ‘20201201’; let date2 = ‘20191201’;
Главное, чтобы сравнение было корректным, размещение должно быть следующим: сначала год, потом месяц, потом день.
Напишите код, который сравнит две приведенные ниже даты и выведет сообщение о том, какая из них больше:
как сравнивать даты?
Имеется текстовый файл, в нем список учебных дней когда есть математика, в формате «дд/мм/гг,дд/мм/гг,дд/мм/гг,» и т.д. и даты начала и окончания каждого триместра, в таком-же формате. Нужно посчитать сколько уроков математики было в каждом из 3-х триместров.
Как мне сравнивать даты? Как узнать меньше одна дата другой или больше? (Си)
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как правильно сравнивать даты?
$data_old — в таблице типа ‘date’ форматом "Y.m.d". $today = date("Y.m.d"); if($data_old =.
Как проще всего сравнивать даты?
день добрый! есть необходимость сравнения дат из бд. на данный момент формат такой -.

Как сделать так, чтобы даты формата 12/2/1232 не воспринимались как даты а оставались как текст?
Доброго всем времени суток, подскажите, как сделать так что-бы даты формата 12/2/1232 не.
Как сравнивать строки?
Что-то смотрю в туториалы, но ничего не выходит. Как написать сравнение строк.
4341 / 1473 / 680
Регистрация: 12.03.2009
Сообщений: 5,310
Connor, лучше создай отдельный класс, где полями будут день, месяц и год, а затем методом сравнивай две даты по значениям:
1 2 3
int d1 = date1.dd + date1.mm * 31 + date1.yy * 365; int d2 = date2.dd + date2.mm * 31 + date2.yy * 365; if (d1 > d2) .
Регистрация: 20.08.2010
Сообщений: 20
Я в принцыпе так и думал, но надеялся что есть способ по проще, что бы не сравнивать день, месяц и год по отдельности.
![]()
5041 / 2620 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
Сообщение от k1ry4 
лучше создай отдельный класс, где полями будут день, месяц и год, а затем методом сравнивай две даты по значениям:
лучше перегрузить операторы сравнения.
![]()
![]()
![]()
![]()
12243 / 7373 / 1734
Регистрация: 25.07.2009
Сообщений: 13,521
Сообщение от k1ry4 
лучше создай отдельный класс
Сообщение от fasked 
лучше перегрузить операторы сравнения.
Это. А ничего, что
Сообщение от Connor 
Connor, не знаю, как на счёт попроще, вот Вам замороченная числосчиталка, придумайте, как её под свои нужды приспособить.
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
#include #include #include #include #include int main(void){ time_t tToday, tNeeded; struct tm stToday = { 0 }, stNeeded = { 0 }; double dblDiff; int sign = 0; tToday = time(NULL); stToday = *(localtime(&tToday)); printf("Enter date in format dd/mm/yyyy: "); if ( scanf("%d/%d/%d", &stNeeded.tm_mday, &stNeeded.tm_mon, &stNeeded.tm_year) != 3 ){ printf("Wrong date format!\n"); exit(1); } stNeeded.tm_mon -= 1; stNeeded.tm_year -= 1900; stNeeded.tm_min = 1; if ( ( tNeeded = mktime(&stNeeded) ) == -1 ){ printf("Error while calculate time.\n"); exit(1); } if ( ( dblDiff = difftime(tToday, tNeeded) ) 0.0 ){ sign = 1; dblDiff = fabs(dblDiff); } dblDiff /= 60.0 * 60.0 * 24.0; printf("Today is %02d/%02d/%4d\n", stToday.tm_mday, stToday.tm_mon + 1, stToday.tm_year + 1900); printf("Entered date is %.0f days %s\n", ( sign ) ? ceil(dblDiff) : floor(dblDiff), ( sign ) ? "after" : "before"); exit(0); }
Сравнение дат.
Для участия в обсуждениях и оформления подписки на новые сообщения форума вам необходимо зарегистрироваться.
Страницы: 1
Cообщений на странице:
Сравнение дат.
Пользователь
Сообщений: 1519 Регистрация: 30.01.2015
21.04.2019 21:15:00
Пользователь
Сообщений: 140 Регистрация: 18.12.2017
22.04.2019 15:25:58
Я не нашёл там ответа на свой вопрос. Там описание работы со временем и датами. Вы ту ссылку дали?
Пользователь
Сообщений: 140 Регистрация: 18.12.2017
22.04.2019 15:46:22
Еще раз поясню попроще. Есть две даты, которые изображены цифрами, а не словами. Например: 20190422. Эти даты можно преобразовать в string или number и сравнивать оператором «==».
То есть string == string и number == number («20190422» == «20190422» и 20190422 == 20190422)
Работают оба варианта.
Какой из этих двух вариантов правильнее, корректнее, надежнее?
пс Вопрос, конечно, не сильно критичный, но я подумал, что мало ли кто разбирался и знает.
QUIK clients support
Сообщений: 3879 Регистрация: 23.01.2015
22.04.2019 16:04:28
Игорь М,
При сравнении даты и времени, самый правильный и надежный способ, перевести дату в число дней (для времени секунд) и далее уже сравнивать.
Пользователь
Сообщений: 140 Регистрация: 18.12.2017
22.04.2019 19:57:03
| Цитата |
|---|
| Sergey Gorokhov написал: Игорь М , При сравнении даты и времени, самый правильный и надежный способ, перевести дату в число дней (для времени секунд) и далее уже сравнивать. |
А что это меняет и как таки их корректно сравнивать? Можно от дат и времени абстрагироваться, это был просто пример из практики.
Как правильнее и надежнее в Lua сравнивать оператором «==» переменные, которые могут быть и string и number? Переводить обе (или одну из них) в string и затем сравнивать строки или переводить в number и сравнивать числа? Я склоняюсь на сравнение чисел, но для меня это не очевидно, поэтому и спрашивал.
Пользователь
Сообщений: 330 Регистрация: 27.08.2018
22.04.2019 21:45:02
| Цитата |
|---|
| Игорь М написал: string и затем сравнивать строки |
— любые конверсии из типа в тип стоят немало, замерьте ваш случай численно.
— строки в принципе неприятная штука, лучше обходиться массивом символов по возможности.
Пользователь
Сообщений: 140 Регистрация: 18.12.2017
23.04.2019 16:58:10
| Цитата |
|---|
| новичок написал: — любые конверсии из типа в тип стоят немало, замерьте ваш случай численно. — строки в принципе неприятная штука, лучше обходиться массивом символов по возможности. |
В моем случае лишние конверсии не являются критичными, да и когда нужно сравнить две переменные разных типов одну из них в любом случае придется переводить в тип второй. Поэтому я и озадачился выбором в какой тип предпочтительнее переводить для сравнения. В общем-то вопрос более теоретический, чем прикладной, так как потенциальных косяков в программе и окружении на порядок больше, чем эта мелочь.
Пользователь
Сообщений: 125 Регистрация: 29.04.2015
23.04.2019 17:34:51
| Цитата |
|---|
| Игорь М написал: вопрос более теоретический |
Строки сравниваются в лексикографическом порядке, т.е. посимвольно слева направо. Так как «0» < "1" < . < "9", то при использовании строкового формата даты "YYYYMMDD" сравнение будет корректным. Вывод: в данном случае использование как числового, так и символьного представления будет работать одинаково правильно. Такая теория интересовала?
Пользователь
Сообщений: 140 Регистрация: 18.12.2017
24.04.2019 17:26:55
| Цитата |
|---|
| SDL написал: Строки сравниваются в лексикографическом порядке, т.е. посимвольно слева направо. Так как «0» < "1" < . < "9", то при использовании строкового формата даты "YYYYMMDD" сравнение будет корректным. Вывод: в данном случае использование как числового, так и символьного представления будет работать одинаково правильно. Такая теория интересовала? |
В общем меня интересовал вопрос: для какого из двух сравнений string == string и number == number вероятность потенциальной ошибки результата сравнения выше и почему?
Я склоняюсь к сравнению числовых представлений, потому что такой вот скрипт:
Скрытый текст
message («val_1: » .. val_1)
message («val_2: » .. val_2)
if val_1 == val_2 then
message («Число == число: true»)
else
message («Число == число: false»)
end
if tostring (val_1) == tostring (val_2) then
message («В строку == в строку: true»)
else
message («В строку == в строку: false»)
end
message («rawequal (Число, число): » .. tostring (rawequal (val_1, val_2)))
message («rawequal (В строку, в строку): » .. tostring (rawequal (tostring (val_1), tostring (val_2))))
val_1 = «20190425.00000001»
val_2 = «20190425»
message («val_1: » .. val_1)
message («val_2: » .. val_2)
if tonumber (val_1) == tonumber (val_2) then
message («В число == в число: true»)
else
message («В число == в число: false»)
end
if val_1 == val_2 then
message («Строка == строка: true»)
else
message («Строка == строка: false»)
end
message («rawequal (В число, в число): » .. tostring (rawequal (tonumber (val_1), tonumber (val_2))))
message («rawequal (Строка, строка): » .. tostring (rawequal (val_1, val_2)))
val_1 = «20190425.00000001»
val_2 = 20190425
message («val_1: » .. val_1)
message («val_2: » .. val_2)
if tonumber (val_1) == val_2 then
message («В число == число: true»)
else
message («В число == число: false»)
end
if val_1 == tostring (val_2) then
message («Строка == в строку: true»)
else
message («Строка == в строку: false»)
end
message («rawequal (В число, число): » .. tostring (rawequal (tonumber (val_1), val_2)))
message («rawequal (Строка, в строку): » .. tostring (rawequal (val_1, tostring (val_2))))
val_1 = 20190425.00000001
val_2 = «20190425»
message («val_1: » .. val_1)
message («val_2: » .. val_2)
if val_1 == tonumber (val_2) then
message («Число == в число: true»)
else
message («Число == в число: false»)
end
if tostring (val_1) == val_2 then
message («В строку == строка: true»)
else
message («В строку == строка: false»)
end
Скрытый текст
Число == число: false
В строку == в строку: true
rawequal (Число, число): false
rawequal (В строку, в строку): true
В число == в число: false
Строка == строка: false
rawequal (В число, в число): false
rawequal ( Строка , строка ): false
В число == число: false
Строка == в строку: false
rawequal (В число, число): false
rawequal (Строка, в строку): false
Число == в число: false
В строку == строка: true
rawequal (Число, в число): false
rawequal (В строку, строка): true
Пользователь
Сообщений: 125 Регистрация: 29.04.2015
24.04.2019 21:31:54
Целые числа в формате Lua «number» (он же C «double»), равно как и результаты операций +/- с ними, согласно особенностям IEEE 754, представляются точно. Поэтому просто не надо допускать невязок округления, и с целыми числами можно работать спокойно. А если невязки неизбежны, делать round().
Пользователь
Сообщений: 140 Регистрация: 18.12.2017
25.04.2019 18:19:09
| Цитата |
|---|
| SDL написал: Целые числа в формате Lua «number» (он же C «double»), равно как и результаты операций +/- с ними, согласно особенностям IEEE 754, представляются точно. Поэтому просто не надо допускать невязок округления, и с целыми числами можно работать спокойно. А если невязки неизбежны, делать round(). |
Это понятно, я с вами согласен. Резюмируя: универсального выбора, в каком виде лучше сравнивать, судя по всему нет. Я думал, что строковое сравнение должно быть всегда надежнее, но, оказалось, что не всегда.
Если сравнивать в лоб без преобразований с округлениями, разделениями строк и т.п., то значения переменных вида: 20190425.00000001 == 20190425 надежнее сравнивать в числах, а значения переменных вида: 201904251234567.1 == 201904251234567 — в строках. При этом сравнение 20190425123456.01 == 20190425123456 лучше опять делать в числах, а 20190425123456.001 == 20190425123456 лучше, вообще, не сравнивать — неправильный результат в обоих случаях.
C как сравнить даты
>Как правильно сравнивать даты в формате YYYY-MM-DD hh-mm-ss в конструкции if ()
>{}.
Преобразовать в UNIX вемя и сравнивать количество секунд.
man mktime
>>Как правильно сравнивать даты в формате YYYY-MM-DD hh-mm-ss в конструкции if ()
>>{}.
>Преобразовать в UNIX вемя и сравнивать количество секунд.
>man mktime
А в каком виде у тебя эта дата? Если в строке, то я думаю strcmp() будет их сравнивать вполне корерктно.
>>>Как правильно сравнивать даты в формате YYYY-MM-DD hh-mm-ss в конструкции if ()
>>>{}.
>>Преобразовать в UNIX вемя и сравнивать количество секунд.
>>man mktime
>
>А в каком виде у тебя эта дата? Если в строке, то
>я думаю strcmp() будет их сравнивать вполне корерктно.В char.
>>>>Как правильно сравнивать даты в формате YYYY-MM-DD hh-mm-ss в конструкции if ()
>>>>{}.
>>>Преобразовать в UNIX вемя и сравнивать количество секунд.
>>>man mktime
>>
>>А в каком виде у тебя эта дата? Если в строке, то
>>я думаю strcmp() будет их сравнивать вполне корерктно.
>
>
>В char.Ты конечно же имеешь ввиду char* ? 😉
Гут. Просто сравнить 2 строки, думаю, будет быстрее, чем парсить их для конвертания в unixtimestamp. А, учитывая формат даты (именно YYYY-MM-DD hh-mm-ss), это будет вполне корректным сравнением дат.
>>>>Как правильно сравнивать даты в формате YYYY-MM-DD hh-mm-ss в конструкции if ()
>>>>{}.
>>>Преобразовать в UNIX вемя и сравнивать количество секунд.
>>>man mktime
>>
>>А в каком виде у тебя эта дата? Если в строке, то
>>я думаю strcmp() будет их сравнивать вполне корерктно.
>
>
>В char.
Что-то новенькое. Может быть char[] (char*)?!
>>>>>Как правильно сравнивать даты в формате YYYY-MM-DD hh-mm-ss в конструкции if ()
>>>>>{}.
>>>>Преобразовать в UNIX вемя и сравнивать количество секунд.
>>>>man mktime
>>>
>>>А в каком виде у тебя эта дата? Если в строке, то
>>>я думаю strcmp() будет их сравнивать вполне корерктно.
>>
>>
>>В char.
>
>Что-то новенькое. Может быть char[] (char*)?!Наскока я помню (чесно говоря, на С давно уже не писал), char[] есть ничто иное как указатель на char, т.е. char*. Или я не прав?!
>>Что-то новенькое. Может быть char[] (char*)?!
>
>Наскока я помню (чесно говоря, на С давно уже не писал), char[]
>есть ничто иное как указатель на char, т.е. char*. Или я
>не прав?!Домашнее задание:
#include
int main(int argc, char *argv[]) {
char s[80] = «Hello»;
strcat(s, «, World!»);
}#include
int main(int argc, char *argv[]) {
char *s = «Hello «;
strcat(s, «, World!»);
}Найти 10-ть отличий и понять, почему первое работает, а второе — нет.
>>>Что-то новенькое. Может быть char[] (char*)?!
>>
>>Наскока я помню (чесно говоря, на С давно уже не писал), char[]
>>есть ничто иное как указатель на char, т.е. char*. Или я
>>не прав?!
>
>Домашнее задание:
>
>#include
>int main(int argc, char *argv[]) {
> char s[80] = «Hello»;
>
> strcat(s, «, World!»);
>}
>
>#include
>int main(int argc, char *argv[]) {
> char *s ;
> strcat(s, «, World!»);
>}
>
>Найти 10-ть отличий и понять, почему первое работает, а второе — нет.
>Нашел место поумничать?!
char s[80] char* = new char(80);
За исключением того что память выделяется в разных местах, но это не имеет отношения к исходному вопросу.
>>>>Что-то новенькое. Может быть char[] (char*)?!
>>>
>>>Наскока я помню (чесно говоря, на С давно уже не писал), char[]
>>>есть ничто иное как указатель на char, т.е. char*. Или я
>>>не прав?!
>>
>>Домашнее задание:
>>
>>#include
>>int main(int argc, char *argv[]) {
>> char s[80] = «Hello»;
>>
>> strcat(s, «, World!»);
>>}
>>
>>#include
>>int main(int argc, char *argv[]) {
>> char *s ;
>> strcat(s, «, World!»);
>>}
>>
>>Найти 10-ть отличий и понять, почему первое работает, а второе — нет.
>>
>
>Нашел место поумничать?!Это Вы, Пан, умничаете. Посмотрите первую, строчку, которая до сих пор идет в квотировании. А теперь turnon(&brain);
>char s[80] char* = new char(80);
>>>Наскока я помню (чесно говоря, на С давно уже не писал)
Хреновые у Вас познания в Си. new таки пережитки плюсавого.
>За исключением того что память выделяется в разных местах, но это не
>имеет отношения к исходному вопросу.Опять таки пернули в лужу. В первом сключае char[] она размещается в стеке, а в другом в куче. А в целом, конечно, можно продолжать мести пургу. только в одиночку.
>>>>>Что-то новенькое. Может быть char[] (char*)?!
>>>>
>>>>Наскока я помню (чесно говоря, на С давно уже не писал), char[]
>>>>есть ничто иное как указатель на char, т.е. char*. Или я
>>>>не прав?!
>>>
>>>Домашнее задание:
>>>
>>>#include
>>>int main(int argc, char *argv[]) {
>>> char s[80] = «Hello»;
>>>
>>> strcat(s, «, World!»);
>>>}
>>>
>>>#include
>>>int main(int argc, char *argv[]) {
>>> char *s ;
>>> strcat(s, «, World!»);
>>>}
>>>
>>>Найти 10-ть отличий и понять, почему первое работает, а второе — нет.
>>>
>>
>>Нашел место поумничать?!
>
>Это Вы, Пан, умничаете. Посмотрите первую, строчку, которая до сих пор идет
>в квотировании. А теперь turnon(&brain);
>
>>char s[80] char* = new char(80);
>
>>>>Наскока я помню (чесно говоря, на С давно уже не писал)
>
>Хреновые у Вас познания в Си. new таки пережитки плюсавого.
Вот тут я соглашусь. В чистом Си не силен.
>>За исключением того что память выделяется в разных местах, но это не
>>имеет отношения к исходному вопросу.
>
>Опять таки пернули в лужу. В первом сключае char[] она размещается в
>стеке, а в другом в куче. А в целом, конечно, можно
>продолжать мести пургу. только в одиночку.
А разве стек и куча — не разные места?! Я про это и говорил.
>>>>>Что-то новенькое. Может быть char[] (char*)?!
>>>>
>>>>Наскока я помню (чесно говоря, на С давно уже не писал), char[]
>>>>есть ничто иное как указатель на char, т.е. char*. Или я
>>>>не прав?!
>>>
>>>Домашнее задание:
>>>
>>>#include
>>>int main(int argc, char *argv[]) {
>>> char s[80] = «Hello»;
>>>
>>> strcat(s, «, World!»);
>>>}
>>>
>>>#include
>>>int main(int argc, char *argv[]) {
>>> char *s ;
>>> strcat(s, «, World!»);
>>>}
>>>
>>>Найти 10-ть отличий и понять, почему первое работает, а второе — нет.
>>>
>>
>>Нашел место поумничать?!
>
>Это Вы, Пан, умничаете. Посмотрите первую, строчку, которая до сих пор идет
>в квотировании. А теперь turnon(&brain);
>
>>char s[80] char* = new char(80);
>
>>>>Наскока я помню (чесно говоря, на С давно уже не писал)
>
>Хреновые у Вас познания в Си. new таки пережитки плюсавого.
>
>>За исключением того что память выделяется в разных местах, но это не
>>имеет отношения к исходному вопросу.
>
>Опять таки пернули в лужу. В первом сключае char[] она размещается в
>стеке, а в другом в куче. А в целом, конечно, можно
>продолжать мести пургу. только в одиночку.
Гениально!
вы перевернули мир, а раньше считал, что конструкция
char *s = «Hello»; создает масив длиной в 6 битов а оказалось это просто розмещается в куче, буду знать, а то чтобы масив вообще розмещать в стеке, ГАГАГАГА, я представляю масив
«ПЕРВЫМ ПРИШЕЛ ПОСЛЕДНИМ ВЫШЕЛ», спасибо, буду знать
https://www.opennet.ru/openforum/vsluhforumID9/5218.html
Правда на С++
>char *s = «Hello»; создает масив длиной в 6 битов а оказалось
Школьный курс информатики: БИТ != БАЙТ.
>»ПЕРВЫМ ПРИШЕЛ ПОСЛЕДНИМ ВЫШЕЛ», спасибо, буду знать
Массив — это последовательность. Последовательнисти основательно изучаются на первом курсе университета/института. Всё в Ваших руках.
>>char *s = «Hello»; создает масив длиной в 6 битов а оказалось
>
>Школьный курс информатики: БИТ != БАЙТ.
>
>>»ПЕРВЫМ ПРИШЕЛ ПОСЛЕДНИМ ВЫШЕЛ», спасибо, буду знать
>
>Массив — это последовательность. Последовательнисти основательно изучаются на первом курсе университета/института. Всё
>в Ваших руках.не стоит чеплятся за опечатки насчет ,бита, но то что вы написано просто гон
>не стоит чеплятся за опечатки насчет ,бита,
++
>> «ПЕРВЫМ ПРИШЕЛ ПОСЛЕДНИМ ВЫШЕЛ», спасибо, буду знать
FILO — это тоже очепятка по Вашему?!
Последним пришёл первым вышел — LIFO
Первым пришёл первым вышел — FIFOА что за нововведение с FILO?
Батенька, да у Вас Очепятки получается на каждом шагу. Читаем самостоятельно, что люди понимают под LIFO и под массивом. Ключевой вопрос, возможно обращение произвольному элементу в LIFO/FIFO? А в массиве? Результат: идем в садик.
> но то что вы написано
>просто гонАргументируешь? Желательно кодом.
>>не стоит чеплятся за опечатки насчет ,бита,
>
>++
>
>>> «ПЕРВЫМ ПРИШЕЛ ПОСЛЕДНИМ ВЫШЕЛ», спасибо, буду знать
>
>FILO — это тоже очепятка по Вашему?!
>
>Последним пришёл первым вышел — LIFO
>Первым пришёл первым вышел — FIFO
>
>А что за нововведение с FILO?
>
>Батенька, да у Вас Очепятки получается на каждом шагу. Читаем самостоятельно, что
>люди понимают под LIFO и под массивом. Ключевой вопрос, возможно обращение
>произвольному элементу в LIFO/FIFO? А в массиве? Результат: идем в садик.
>
>
>> но то что вы написано
>>просто гон
>
>Аргументируешь? Желательно кодом.
Вы хотите сказать что первый елемент уйдет не последним?
Вы просто чепляетесь за слова,
я просто росмеялся когда уведил это «В первом сключае char[] она размещается в стеке, а в другом в куче». и все, Какое отношение все это имеет к стеку? Вот в чом суть.
>Ключевой вопрос, возможно обращение
>произвольному элементу в LIFO/FIFO? А в массиве? Результат: идем в садик.
я же то и имел ввиду, можно конечно же реализовать масив ввиде стека, но это смешно, хотя
по вашему char[] тоже и делает.
Что теперь не так?
Господа, прекратите, пожалуйста, флейм. Что вы пытаетесь друг другу доказать?
Чтобы развеять неясности, внесу свои пять копеек.Говоря о стеке, chip подразумевал сегмент памяти, в котором размещаются локальные переменные (например массив, объявленный в функции как char str[80]), а не способ хранения набора элементов, как подумал господин, пожелавший остаться безымянным. Кучей (heap) называют сегмент памяти, в котором размещаются динамически выделяемые области (например, функцией malloc(3) в C). Раз уж зашёл разговор о сегмантах памяти, то ещё бывает сегмент кода, в котором находятся инструкции программы и сегмент данных, в котором размещаются глобальные переменные, константы и пр. (то есть области, размер которых известен до старта программы). Всё это, разумеется, подробно описано во множестве мест, так что любой интересующийся (если вдруг такие тут окажутся) сможет легко это найти.
К разговору выше: что касается char[] и char*, то в использовании (если исключить выделение/освобождение памяти), особенно в контексте вопроса, они в общем-то похожи. Точнее, больше похожи char[] и char *const. Но всё это действительно не имеет отношения к вопросу. Да и спор-то возник только из-за желания поспорить. И из-за того, что GeKa ошибочно принял коментарий chip’а (5-й) на свой адрес, хотя он был адресован автору темы.
А по сути: действительно, если даты имеются в строковом представлении и формат их именно YYYY-MM-DD hh-mm-ss, то можно сравнить две строки, так что Geka предложил правильное и остроумное решение, хотя и зависящее от формата дат.
И не нужно ссориться, мы же здесь чтобы помочь друг другу, а не чтобы показать, кто круче.
| Архив | Удалить | Индекс форумов | Темы | Пред. тема | След. тема |
| Оцените тред (1=ужас, 5=супер)? [ Рекомендовать для помещения в FAQ] | |