Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Функция Month(Date) возвращает разные значения. / 25 сообщений из 49, страница 1 из 2
06.04.2014, 08:52
    #38606296
Функция Month(Date) возвращает разные значения.
Добрый вечер, объясните чайнику, почему в окне отладки

? month(#03/02/2016#) равно 3 - я ожидал 2-ку, а
? month(#01/02/2016#) равно 1, опять же должно вернуться 2-ка
...
Рейтинг: 0 / 0
06.04.2014, 09:09
    #38606304
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Month(Date) возвращает разные значения.
Александр Коротковопять же должноникто никому ничего не должен. <censored>-американцы сначала пишут месяц, потом число, потом год
...
Рейтинг: 0 / 0
06.04.2014, 10:31
    #38606332
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Month(Date) возвращает разные значения.
Код: plaintext
1.
2.
3.
?month("03.02.2016")
 2 
?month("01/02/2016")
 2 
Но это только на русской локали. С решетками будет работать на любой локали.
...
Рейтинг: 0 / 0
06.04.2014, 11:51
    #38606364
Функция Month(Date) возвращает разные значения.
Спасибо за ответы .... запутался я в этих датах. В одних случаях дата берется из текстового поля, в других - как результат извлечения из базы данных и везде нужно преобразовывать в нужный формат
...
Рейтинг: 0 / 0
06.04.2014, 11:56
    #38606369
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Month(Date) возвращает разные значения.
из текстового поля нужно преобразовывать с помощью CDate в дату
из БД вообще не надо трогать, она уже в виде даты
#03/02/2016# - это тоже уже дата - ее тоже преобразовывать не надо

самый безопасный формат даты: yyyy-mm-dd - в нем не возникает путаницы с месяцем
...
Рейтинг: 0 / 0
06.04.2014, 12:37
    #38606380
Функция Month(Date) возвращает разные значения.
Хорошо, спрошу еще, раз формат американский, то почему не возникает ошибки:

? month(#13/01/2014#) - возвращает 1, а ведь должно вернуть "несуществующий" 13 месяц?
...
Рейтинг: 0 / 0
06.04.2014, 14:23
    #38606443
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Month(Date) возвращает разные значения.
Если литерал допускает дуальное толкование - считается, что первым идёт месяц. Если однозначен - то как имеет смысл интерпретировать.
А вот ... как думаешь, что даст date(#13/14/2014#) ? А потом проверь...
...
Рейтинг: 0 / 0
06.04.2014, 14:42
    #38606455
Функция Month(Date) возвращает разные значения.
AkinaЕсли литерал допускает дуальное толкование - считается, что первым идёт месяц. Если однозначен - то как имеет смысл интерпретировать.
А вот ... как думаешь, что даст date(#13/14/2014#) ? А потом проверь...
Это в политике можно толковать, как вздумается ... а тут должно быть все строго ... раз первым идет месяц, значит должна быть ошибка на первое число в дате, если оно больше 12.
...
Рейтинг: 0 / 0
06.04.2014, 14:53
    #38606461
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Month(Date) возвращает разные значения.
Так или иначе, единственное применение такой записи - это константа - это используется нечасто и ты ее записываешь сам - всегда пиши месяц первым - неоднозначности не будет.
...
Рейтинг: 0 / 0
06.04.2014, 15:06
    #38606471
Функция Month(Date) возвращает разные значения.
Хорошо, получается, что в окне отладки я должен использовать дату как строку, тогда вопросов не возникает

? Month("03/02/2014")
2

Ладно, пойду повешусь :)
...
Рейтинг: 0 / 0
06.04.2014, 15:10
    #38606474
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Month(Date) возвращает разные значения.
Александр Коротков? Month("03/02/2014")Вот в ЭТОМ случае как раз и возникает вопрос - результат будет зависеть от того, какой у вас формат даты в виндах, в интернациональных настройках.

Как я уже говорил - вот так:
?month("2001-05-06")
неоднозначности не будет
...
Рейтинг: 0 / 0
06.04.2014, 15:20
    #38606487
Функция Month(Date) возвращает разные значения.
но в такой формат ("2001-05-06") нужно будет каждый раз переводить параметр, прежде чем передавать его в некую пользовательскую функцию?
...
Рейтинг: 0 / 0
06.04.2014, 16:27
    #38606516
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Month(Date) возвращает разные значения.
У меня есть ощущение что вы путаете типы данных - строку и дату (String и Date)
у Date НЕТ И НЕ МОЖЕТ НИКАКОГО ФОРМАТА - это просто число, если вы получаете откуда-то некий тип данных (например из базы из поля типа Date) и передаете его в функцию, который принимает параметр типа Date, вообще не требуется думать ни о каких преобразованиях - их нет.

Формат возникает только в тот момент, когда вы превращаете дату в строку (например при выводе на экран) или наоборот, когда пользователь вводит дату с клавиатуры - вот только тогда есть необходимость задумываться о том, где расположен месяц. В типе Date понятия "положение месяца" просто НЕТ - это число, обозначающее количество дней, прошедших с 1900-01-01 (кажется).
...
Рейтинг: 0 / 0
06.04.2014, 17:59
    #38606554
Функция Month(Date) возвращает разные значения.
Shocker.ProУ меня есть ощущение что вы путаете типы данных
Пожалуй да, в голове пока каша ... хотя начинаю понимать вашу мысль ....
...
Рейтинг: 0 / 0
06.04.2014, 18:03
    #38606559
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Month(Date) возвращает разные значения.
Если приведете примеры своего кода и что вы хотите куда передать - можно будет показать на конкретном примере
...
Рейтинг: 0 / 0
06.04.2014, 19:26
    #38606595
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Month(Date) возвращает разные значения.
Александр КоротковЭто в политике можно толковать, как вздумается ... а тут должно быть все строго ... раз первым идет месяц, значит должна быть ошибка на первое число в дате, если оно больше 12.
Не понял... ко мне какие претензии? не я реализацию функции писАл... кстати, всё и есть строго - результат детерминированный? да... чего ещё надо? а если кто-то умом не охватил - его проблемы.

Shocker.ProУ меня есть ощущение что вы путаете типы данных - строку и дату (String и Date)
Есть ещё третья ипостась - литерал даты. Нечто из разряда полу-тут-полу-там, типа нет, а значение есть... весёлый такой зверёк.
...
Рейтинг: 0 / 0
06.04.2014, 22:12
    #38606687
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Month(Date) возвращает разные значения.
AkinaЕсть ещё третья ипостась - литерал даты. Нечто из разряда полу-тут-полу-там, типа нет, а значение есть... весёлый такой зверёк.чёй-то типа нет. Все тот же тип - Date
...
Рейтинг: 0 / 0
07.04.2014, 03:12
    #38606784
i45
i45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Month(Date) возвращает разные значения.
Shocker.ProАлександр Коротковопять же должноникто никому ничего не должен. <censored>-американцы сначала пишут месяц, потом число, потом год

Не так давно так писали и на Руси, чтобы в этом убедиться, достаточно почитать письма <censored>-Гоголя.
...
Рейтинг: 0 / 0
07.04.2014, 08:47
    #38606850
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Month(Date) возвращает разные значения.
да, и мерили в пядях, саженях и верстах, пудах и фунтах
Однако стандартизация взяла верх во всех странах... кроме некоторых
...
Рейтинг: 0 / 0
07.04.2014, 09:20
    #38606875
i45
i45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Month(Date) возвращает разные значения.
Значит не во всех. Да и стандарт, оказывается, дело относительное. Там он один, а где-то там он другой. Так принято, и это хорошо, потому что это означает разнообразие и занятость. И первый день недели не везде понедельник, кстати, и Цельсий не везде рулит.
...
Рейтинг: 0 / 0
07.04.2014, 10:23
    #38606929
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Month(Date) возвращает разные значения.
i45И первый день недели не везде понедельник, кстати, и Цельсий не везде рулит.примерно в тех же странах, где мили, фунты и месяц пишется впереди ))
...
Рейтинг: 0 / 0
07.04.2014, 11:17
    #38606992
i45
i45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Month(Date) возвращает разные значения.
Мне так кажется, это далеко не последние страны. По-крайней мере это те страны, без которых этот форум просто бы не существовал. Так что, чей стандарт стандартнее, еще надо посмотреть.
:)
...
Рейтинг: 0 / 0
07.04.2014, 11:36
    #38607021
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Month(Date) возвращает разные значения.
Я считаю, что тот стандарт стандартнее, где единицы того же смысла переводятся друг в друга путем умножения на степень 10, а не какое-то произвольное число, и даты записываются в порядке увеличения или уменьшения детализации (интересно, а почему у них время не показывается как ММ:ЧЧ:СС - логичнее для них было бы)
...
Рейтинг: 0 / 0
07.04.2014, 11:41
    #38607028
Функция Month(Date) возвращает разные значения.
Спасибо всем, к Зеленограду претензий не имею :)
Вообще, мне нужно написать некую функцию, типа Double, которая принимает три параметра:
начальную дату DateStart;
конечную дату DateEnd;
номер месяца iMonth.
Параметр iMonth должен попадать в диапазон номеров месяцев начальной и конечной дат. Т.е. iMonth >= Month(DateStart) And iMonth <= Month(DateEnd). В противном случае возвращаем 0

Функция возвращает "какую часть" занимает указанный диапазон дат по отношению к длительности номера переданного месяца, например:
fnX("2014-01-12","2014-03-23",1)=0.64516
fnX("2014-01-12","2014-03-23",2)=1
fnX("2014-01-12","2014-03-23",3)=0.7666

Для чего это нужно? Есть ежемесячный плановый показатель "Сколько больных должно быть пролечено". План утверждается на год, число пролеченных каждый месяц немного меняется. Врач знает сколько он пролечил реально за некий период (между DateStart и DateEnd) он хочет знать - а сколько это в процентах от плана. Если бы диапазон дат начинался календарным началом и заканчивался календарным концом месяца - тут нет проблем. Я конечно изваял нечто, но страшно показывать ....
...
Рейтинг: 0 / 0
07.04.2014, 11:48
    #38607036
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Month(Date) возвращает разные значения.
собственно, не очень важно, что делает сама функция, важно, откуда вы берете данные и как вы их передаете в функцию
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Функция Month(Date) возвращает разные значения. / 25 сообщений из 49, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]