Последний день месяца Month_end_date

Законченные решения. Заполняется по результатам дискуссий в «Практике».
Ответить
andrey volkov
Сообщения: 338
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

Последний день месяца Month_end_date

Сообщение andrey volkov » 05 фев 2018, 07:17

/*
Function name = Month_end_date
parameter = date;

Evaluates last date of month for any date



*/


Date(Month(any_date)+1; 0; Year(any_date))

Аватара пользователя
Arcady
Администратор
Сообщения: 201
Зарегистрирован: 10 сен 2017, 20:45
Контактная информация:

Re: Последний день месяца Month_end_date

Сообщение Arcady » 05 фев 2018, 16:39

я обычно использую такую конструкцию:

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

Date(Month(any_date)+1; 1; Year(any_date))-1
потому что использовать нулевой день месяца как-то неинтуитивно :)
Аркадий Перла.
ТриА. Разработка решений для FileMaker
http://tria.pw

andrey volkov
Сообщения: 338
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

Re: Последний день месяца Month_end_date

Сообщение andrey volkov » 05 фев 2018, 17:53

моя функция на два символа короче :)

Аватара пользователя
Arcady
Администратор
Сообщения: 201
Зарегистрирован: 10 сен 2017, 20:45
Контактная информация:

Re: Последний день месяца Month_end_date

Сообщение Arcady » 05 фев 2018, 18:01

andrey volkov писал(а):
05 фев 2018, 17:53
моя функция на два символа короче :)
не спорю. Но тут вопрос читабельности и очевидности кода. У малознакомого с FileMaker разработчика такой код вызовет изумление. 0-ой день месяца - это как, скажет он :). Тако можно?! Это фича языка, или баг, который можно использовать как трик? Это точно будет работать в следующих версиях?
Если гнаться за краткостью кода, то надо на C++ тогда писать :)
Аркадий Перла.
ТриА. Разработка решений для FileMaker
http://tria.pw

andrey volkov
Сообщения: 338
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

Re: Последний день месяца Month_end_date

Сообщение andrey volkov » 05 фев 2018, 18:11

эээ, да ладно
когда я копирую себе чужие кастом функции, я вообще не вдаюсь в то, как они работают. Особенно рекурсии, я их вообще не вкуриваю. Работают - и хорошо
Хотя зря, наверное. нужно развивать в себе аналитические способности. Шучу. Не буду я вдаваться, я их заимствую "как есть"

andrey volkov
Сообщения: 338
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

Re: Последний день месяца Month_end_date

Сообщение andrey volkov » 05 фев 2018, 18:22

У малознакомого с FileMaker разработчика такой код вызовет изумление. 0-ой день месяца - это как, скажет он :). Тако можно?!
после этого он устраивает череду экспериментов и обнаруживает, что параметром Date() является любое число, в том числе и отрицательное. Он понимает (принимает) логику файлмейкера и начинает ею пользоваться.

andrey volkov
Сообщения: 338
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

Re: Последний день месяца Month_end_date

Сообщение andrey volkov » 06 фев 2018, 05:58

подумал: может я и не прав. Если новичок не видит очевидной логики построения даты, он может растерять желание экспериментировать и вообще вникать во все это

Alexei Sytch
Сообщения: 106
Зарегистрирован: 21 сен 2017, 18:48
Откуда: Минск

Re: Последний день месяца Month_end_date

Сообщение Alexei Sytch » 06 фев 2018, 21:50

Оба варианта очень по 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
-- с семи пятнадцати до девяти пятнадцати

andrey volkov
Сообщения: 338
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

Re: Последний день месяца Month_end_date

Сообщение andrey volkov » 09 фев 2018, 05:57

Алексей,
не отважитесь на статью "Как работать с датами и временем в файлмейкере"?
Суть, примеры, разные ситуации...
Это будет очень полезно для всех нас.

Alexei Sytch
Сообщения: 106
Зарегистрирован: 21 сен 2017, 18:48
Откуда: Минск

Re: Последний день месяца Month_end_date

Сообщение Alexei Sytch » 10 фев 2018, 21:09

Андрей, можно попробовать. Надо пообщаться в личку

Ответить