Страница 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 все даты с этими годами

Код: Выделить всё

3.*.2019
2.*
2019 *:30 PM
или в диапазоне

Код: Выделить всё

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
Андрей, можно попробовать. Надо пообщаться в личку