Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
Была задача: написать функцию которая бы вычитала из нужной даты 1 месяц. Ну вроде всё просто и можно использовать DateAdd("m", -1, myDate). Но есть грабли, связаные с тем, что она функция запускается на разных машинах и формат превставления меняется. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Копнул в сторону функции Format , которая вроде для того и предназначена Должно вернуть авторLValue: 01.06.2009 RValue: 01.05.2009 и на одной машине так и возвращает. На другой же возвращает авторLValue: 1/6/2009 RValue: 12/6/2008 Что конечно не правильно и вычитание не выполнятся как нужно. (если изменить маску на "dd/mm/yyyy", и применить функцию Format к результату то в этом случае жизнь налаживается, но это уже перестаёт работать на других машинах). Что я делаю не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 11:25 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
Не очень ясно, зачем вы преобразовывате дату в строку ДО того, как делаете операции над ней? Дайте DateAdd работать с типом ДАТА. А потом форматируйте как нравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 12:04 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
типа так? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 12:10 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
Castro men Что я делаю не так?Вы неправильно запихиваете стринг, возвращаемый функцией Format в переменную qDate As Date - т.е. 2 раза конвертируете Now() -> string -> опять в Date. При этом в 1ый параметр функции формат Вы подставляете значение (как-бы) даты с использованием неких определенных разделителей, которые не определены как разделители на ином компе. Ваш пример следует переписать хотя бы так - исключив преобразование в стринг и возвращая заведомо дату функцией DateSerial: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. если следовать далее прогрессии, то надо каждый раз добавлять по 3 месяца - и в Case 1 должно быть DateSerial(2009, 12, 1) - а там вдруг добавляется четыре? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 12:12 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
а еще ошибка тут: #1/9/2009# - это 9 января 2009 независимо от компа, так что если вы имели ввиду 1-е сентября, то надо писать так: #9/1/2009# ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 12:13 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
Думаю, что собака зарыта здесь Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 12:17 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
sergeyvgДумаю, что собака зарыта здесь Код: plaintext Код: plaintext у автора qDate определена как Date. Функция Format возвращает строку. Так что этот кусок кода в принципе ошибочен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 12:20 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
qDate As Date я запихнул в самом конце, там был стринг, но всё равно не работало правильно. Вариант qwrqwr подошёл, DateSerial - как раз то что надо. Спасибо Смысл функции в том, чтобы вернуть даты начала и окончания за только что прошедший квартал. Тоесть если сейчас 3й квартал, то нужно вернуть даты за 2й. Возможно я тут колесо изобретаю и есть что-то уже готовое, к тому же мой вариант загнётся к конце года. Может есть какое-то более элегантное и универсальное решение по вычислению границ годовых кварталов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 13:09 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
Castro men Возможно я тут колесо изобретаю и есть что-то уже готовое, к тому же мой вариант загнётся к конце года. Да, в общем-то все просто. Начало квартала: Код: plaintext 1. вместо вашего кейса. Можете потом обрабатывать эту дату как угодно (DateAdd и т.п.), только Format не используйте. непонятно две вещи 1) почему у вас для 1-го квартала возвращается дата на год позже указанной даты? 2) почему функция DatePart("q".... считает, что сейчас уже третий квартал.... это я щас поразбираюсь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 13:26 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
Ой. второй пункт отпадает, это я не те тестовые данные дал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 13:28 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
Ваш первый пункт - это моя попытка разрулить с годами. Если я запущу код 01,01,2010, то Date вернёт 2010 год и конечно же ничего работать не будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 13:44 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
Блин, тороплюсь :( виноват, посыпаю пеплом Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 13:46 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
Castro menВаш первый пункт - это моя попытка разрулить с годами. Если я запущу код 01,01,2010, то Date вернёт 2010 год и конечно же ничего работать не будет А что не будет работать? Почему во втором квартале вас это устраивает, а в первом - нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 13:47 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
Castro men Смысл функции в том, чтобы вернуть даты начала и окончания за только что прошедший квартал. Тоесть если сейчас 3й квартал, то нужно вернуть даты за 2й. Возможно я тут колесо изобретаю и есть что-то уже готовое, к тому же мой вариант загнётся к конце года. Может есть какое-то более элегантное и универсальное решение по вычислению границ годовых кварталов? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 14:13 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
я тут ступил, но никто не жалуется :( так надо: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 15:06 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
qwrqwr, Похоже, по возвращает странное, есть передать например Date. Сейчас это 1/1/2009 3/31/2009, хотя по идее должно вернуть 4/1/2009 6/30/2009 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 15:09 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
ДА-да, именно так. Я чуточку недопилил эту функцию. Спасибо огромное! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 15:11 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
Хотелось бы у Вас более подробно спросить об этом алгоритме, очень любопытен для меня. Код: plaintext 1. 2. 3. Итак. Код: plaintext Код: plaintext Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 15:26 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
авторХотелось бы у Вас более подробно спросить об этом алгоритме, очень любопытен для меня. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 15:50 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
А не проше будет просто сделать проверку перед запуском приложения If Len(Date) > 8 Then MsgBox "Не правильная настройка формата даты !", vbOKOnly + vbCritical Exit Sub End If Потом в настроиках поменять на краткий формат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 18:54 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
Подскажите в Excel UserForm добавил календарик и по нажатию выбранной дате в поле TextBox пояляется выбранная дата в формате "05/18/2010" т.е. 18 мая 2010 я указал для TextBox формат tbDate_O.Text = Format(tbDate_O.Text, "dd.mm.yyyy") что бы дата выводилась в формате "dd.mm.yyyy", но выводятся не все даты правильно если выбрать 17 мая 2010 выведет 17.05.2010, а если выбрать 3 мая 2010 выведет 05.03.2010 в чем может быть ошибка ? надо чтобы после выбора даты в календарике отоброжалась дата в формате "dd.mm.yyyy" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2010, 06:58 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
valdemar_ruвыбранной дате в поле TextBox пояляется выбранная дата в формате "05/18/2010" У вас вот в этом месте ошибка. Вы дважы пытаете преобразовать дату, зачем? Вам нужно брать дату из календарика (а не из текстбокса) и форматировать так, как вам нравится. Либо, на крайняк для первого текстбокса сделать формат YYYY-MM-DD, тогда уж точно не ошибется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2010, 10:08 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, Спасибо. Я не правильно обращался поэтому календарик возвращал не правильное значение типа 05/05/2010 Private Sub Calendar1_Click() UserForm.tbDate_O = Calendar1.Value UserForm1.Hide End Sub Должно быть так Private Sub Calendar1_Click() UserForm.tbDate_O.Text = Calendar1.Value UserForm1.Hide End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2010, 11:08 |
|
||
|
Манипуляции с датами.
|
|||
|---|---|---|---|
|
#18+
valdemar_ru Должно быть так UserForm.tbDate_O.Text = Calendar1.Value Не должно!!!!!!!!!! НИКОГДА не используйте неявные преобразования типов, не придется искать такие дурацкие ошибки (а если бы вы не заметили?) P.S. и всегда Используйте Option Explicit ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2010, 11:12 |
|
||
|
|

start [/forum/topic.php?fid=60&fpage=128&tid=2159777]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 14ms |
| total: | 159ms |

| 0 / 0 |
