Страница 1 из 1
Последний день месяца Month_end_date
Добавлено: 05 фев 2018, 07:17
andrey volkov
/*
Function name = Month_end_date
parameter = date;
Evaluates last date of month for any date
*/
Date(Month(any_date)+1; 0; Year(any_date))
Re: Последний день месяца Month_end_date
Добавлено: 05 фев 2018, 16:39
Arcady
я обычно использую такую конструкцию:
Код: Выделить всё
Date(Month(any_date)+1; 1; Year(any_date))-1
потому что использовать нулевой день месяца как-то неинтуитивно
Re: Последний день месяца Month_end_date
Добавлено: 05 фев 2018, 17:53
andrey volkov
моя функция на два символа короче
Re: Последний день месяца Month_end_date
Добавлено: 05 фев 2018, 18:01
Arcady
andrey volkov писал(а): ↑05 фев 2018, 17:53
моя функция на два символа короче
не спорю. Но тут вопрос читабельности и очевидности кода. У малознакомого с FileMaker разработчика такой код вызовет изумление. 0-ой день месяца - это как, скажет он
. Тако можно?! Это фича языка, или баг, который можно использовать как трик? Это точно будет работать в следующих версиях?
Если гнаться за краткостью кода, то надо на C++ тогда писать
Re: Последний день месяца Month_end_date
Добавлено: 05 фев 2018, 18:11
andrey volkov
эээ, да ладно
когда я копирую себе чужие кастом функции, я вообще не вдаюсь в то, как они работают. Особенно рекурсии, я их вообще не вкуриваю. Работают - и хорошо
Хотя зря, наверное. нужно развивать в себе аналитические способности. Шучу. Не буду я вдаваться, я их заимствую "как есть"
Re: Последний день месяца Month_end_date
Добавлено: 05 фев 2018, 18:22
andrey volkov
У малознакомого с FileMaker разработчика такой код вызовет изумление. 0-ой день месяца - это как, скажет он
. Тако можно?!
после этого он устраивает череду экспериментов и обнаруживает, что параметром Date() является любое число, в том числе и отрицательное. Он понимает (принимает) логику файлмейкера и начинает ею пользоваться.
Re: Последний день месяца Month_end_date
Добавлено: 06 фев 2018, 05:58
andrey volkov
подумал: может я и не прав. Если новичок не видит очевидной логики построения даты, он может растерять желание экспериментировать и вообще вникать во все это
Re: Последний день месяца Month_end_date
Добавлено: 06 фев 2018, 21:50
Alexei Sytch
Оба варианта очень по FileMiker.
В варианте Аркадия подразумевается что 13 месяц это январь следующего.
В справке как раз о двух способах и написано : Можно использовать 0 и негативные числа как аргументы для функций с датами. А если месяц больше 12 или день больше чем количество дней в месяце, FM добавит дополнительное количество дней или месяцев к результату. Интересно, что десятичные числа обрезаются до целых без округления
Например Date( 6 ; 0 ; 2019 ) вернет 31.05.2019
Date( 13 ; 0 ; 2019 ) - вернет 31.12.2018
Date( 1,2 ; 5 ; 2019 ) - вернет 01.05.2019
На мой взгляд работа со временем и датами одна из сильнейших фишек Filemaker,
особенно поиск чего стоит
Пн *.01..03.2018 -- все понедельники первого квартала 2018 года - взять и отменить
Пн *.01.2018... *.03.2018 -- то же самое
И еще что звездочку вообще можно не указывать 05.2018 -- май 2018
в поле поиска 2018..2019 все даты с этими годами
или в диапазоне
Код: Выделить всё
12:30...17:30 -- время с ..по ..
1.1.2019..6.6.2020 -- дата с ... по ...
Пн..Вт
-- начало недели
Код: Выделить всё
{1...15}.7.2019 - первая половина июля
{10..16}.1..3.2020 -- первая половина месяцев первого квартала
12:{30..45} -- третья четверть часа
{7...9}:15 PM
-- с семи пятнадцати до девяти пятнадцати
Re: Последний день месяца Month_end_date
Добавлено: 09 фев 2018, 05:57
andrey volkov
Алексей,
не отважитесь на статью "Как работать с датами и временем в файлмейкере"?
Суть, примеры, разные ситуации...
Это будет очень полезно для всех нас.
Re: Последний день месяца Month_end_date
Добавлено: 10 фев 2018, 21:09
Alexei Sytch
Андрей, можно попробовать. Надо пообщаться в личку