On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
администратор




Пост N: 5092
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.07.15 11:10. Заголовок: DOW() и компания


Нет ли какой переключалки в Harbour что бы функции из разряда дней недели
Dow() , Cdow() , NtocDow() работали по европейскому стандарту в котором
первый день недели понедельник а не в американском где первый день недели
воскресение.
Понятно что можно свои переходники спаять.

PS
В пиндостане все ни как у людей


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 28 , стр: 1 2 All [только новые]


постоянный участник


Пост N: 1088
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 09.07.15 11:24. Заголовок: Дима, так в письменн..


Дима, так в письменном виде все ж правильно возвращается. Ну и плевать, что четверг - это 5-й день )) Или есть более глубокие причины?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5093
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.07.15 11:26. Заголовок: NtocDow(1) чего верн..


NtocDow(1) чего вернет ?
Прально воскресение а надо понедельник

Ну или
dwmas:={0,0,0,0,0,0,0} // дни недели
stimer->(dbeval({|| dwmas[rusdow(stimer->data_z)]+=1}))

пришлось делать RUSDOW ()

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1089
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 09.07.15 11:34. Заголовок: Ну, что поделать, ка..


Ну, что поделать, как-то так... ))
Я просто учитываю, что sunday is number 1 и фсё... )

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5094
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.07.15 11:35. Заголовок: Я думал что коли уст..


Я думал что коли установка формата даты , например SET DATE TO GERMAN
то возможно и есть установка стандарта дней недели что ли )))


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1090
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 09.07.15 11:37. Заголовок: Не, такого нет...


Не, такого нет.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5099
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.07.15 21:29. Заголовок: Собственно делал в &..


Собственно делал в "лоб".
 
func _dow(c)
local n:=dow(c)
return if(n==1,7,n-1)


А после возник спортивный интерес а нельзя ли сделать короче через % , но что то
не срастается и видимо я уже туплю )))
Есть идеи ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 142
Зарегистрирован: 21.04.13
ссылка на сообщение  Отправлено: 09.07.15 21:44. Заголовок: короче..


func _dow(c)
local n:=IIF(valtype(c)="D",dow(c-1) ,0)
return n

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3308
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 09.07.15 21:47. Заголовок: Совсем просто и без ..


Совсем просто и без костылей будет так:

func _dow(dt)
return ( dt % 7 ) + 1

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5100
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.07.15 21:50. Заголовок: petr707 Понял , пер..


petr707
Понял , перемудрил я ))
Вот так будет короче
func _dow(c)
return dow(c-1)

Проверка не нужна , функцию юзаю только я и туда 100 % попадет только дата.
По началу подумал что отталкиваться надо от результата что выдаст DOW() и после
этого с ним сделать что нужно.


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5101
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.07.15 21:54. Заголовок: Pasha Паш что то не..


Pasha
Паш что то не то ......))

Проверял так
 
for i=0 to 7
? dow(date()+i), _dow(date()+i)
next



Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3309
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 09.07.15 22:08. Заголовок: дык сегодня вроде че..


дык сегодня вроде четверг

(date()%7+1) как раз будет 4. Не ?


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5102
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.07.15 22:12. Заголовок: Pasha for i=0 ..


Pasha

 
for i=0 to 7
? dow(date()+i), _dow(date()+i)
next
wait

func _dow(dt)
return ( dt % 7 ) + 1


При выполнении Argument Error %
Base 1085

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3310
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 09.07.15 22:13. Заголовок: Еще короче, то есть ..


Еще короче, то есть эффективнее:

#pragma BEGINDUMP 

#include "hbapi.h"

HB_FUNC( _DOW )
{
hb_retnl( HB_ISDATE(1) ? (hb_pardl(1) % 7) + 1 : 0 );
}

#pragma ENDDUMP


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5103
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.07.15 22:15. Заголовок: Pasha пишет: Еще ко..


Pasha пишет:

 цитата:
Еще короче


чудно , ошибка та же

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5104
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.07.15 22:19. Заголовок: В операции % делимое..


В операции % делимое должно быть числом а у тебя дата

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 603
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 09.07.15 22:20. Заголовок: Dima пишет: что то ..


Dima пишет:

 цитата:
что то не то



Дима, велосипед давно изобретен
dDate := CTOD( "09/15/90" )

? DOW( dDate ) // 7
? CDOW( dDate ) // Saturday
? FT_DAYTOBOW( dDate ) // 6

// change beginning of week to Friday (yeah!)
FT_DATECNFG( , 6 )
? DOW( dDate ) // 7
? CDOW( dDate ) // Saturday
? FT_DAYTOBOW( dDate ) // 1

https://github.com/vszakats/harbour-core/blob/master/contrib/hbnf/doc/en/daytobow.txt

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5105
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.07.15 22:28. Заголовок: Игорь а тест чеканут..


Игорь а тест чекануть ;)
FT_DATECNFG( , 6 )
for i=0 to 7
? dow(date()+i), FT_DAYTOBOW(date()+i)
next

Результат
 
5 6
6 0
7 1
1 2
2 3
3 4
4 5
5 6


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3311
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 09.07.15 22:30. Заголовок: я прогнал для xHarbo..


я прогнал для xHarbour, там для типа данных D операция % допустима. В Harbour, оказывается, нет.
Но вариант на С работает, в С это до лампочки

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5106
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.07.15 22:35. Заголовок: Pasha пишет: Но вар..


Pasha пишет:

 цитата:
Но вариант на С работает, в С это до лампочки


не работает

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5107
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.07.15 22:38. Заголовок: Dima пишет: не рабо..


Dima пишет:

 цитата:
не работает


Сори , убил все OBJ , пересобрал , работает.
Глюки Hbmk2 видимо .........
Спасибо !

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5108
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.07.15 22:39. Заголовок: Pasha Если не сложн..


Pasha
Если не сложно и время есть , можешь релизнуть всех братцев DOW() , ты понял о чем я
в Cи варианте ?


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 604
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 09.07.15 22:39. Заголовок: Dima пишет: тест че..


Dima пишет:

 цитата:
тест чекануть ;)



что не так ?

? dow(date()+i), FT_DAYTOBOW(date()+i) + 1

этим FT_DATECNFG( , 6 ) ты установил в что неделя начинается в ПЯТНИЦУ тогда четверг это 7

вот твой тест с +1

5 7 четверг
6 1 пятница
7 2 суббота
1 3
2 4
3 5
4 6

Надо ставить не пятницу конечно

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5110
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.07.15 22:46. Заголовок: Haz Извини что спат..


Haz
Извини что спать не даю )))
Смотри.
 

for i=0 to 7
? dow(date()+i), _dow(date()+i),FT_DAYTOBOW(date()+i) + 1
next


wait


#pragma BEGINDUMP

#include "hbapi.h"

HB_FUNC( _DOW )
{
hb_retnl( HB_ISDATE(1) ? (hb_pardl(1) % 7) + 1 : 0 );
}

#pragma ENDDUMP




Результат
 
5 4 5
6 5 6
7 6 7
1 7 1
2 1 2
3 2 3
4 3 4
5 4 5


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5111
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.07.15 22:48. Заголовок: Да виноват надо было..


Да виноват надо было FT_DATECNFG( , 2 )
Буду знать.
Но вариант Паши мне больше нравится ! ;)

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 605
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 09.07.15 22:50. Заголовок: Dima пишет: Смотри...


Dima пишет:

 цитата:
Смотри.



так проверь
Func Main()
local i := 0
local dDate := DATE()
FT_DATECNFG( , 2 )
for i := 0 to 6
? dow(date()+i), FT_DAYTOBOW(date()+i)+1
next

RETURN NIL


у Паши несравнимо эффективнее в этом случае , но FT_ XXXXX() много еще чего могут , прими в копилку ))

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5112
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.07.15 22:57. Заголовок: Haz пишет: прими в ..


Haz пишет:

 цитата:
прими в копилку


Понял !

Dima пишет:

 цитата:
Если не сложно и время есть , можешь релизнуть всех братцев DOW() , ты понял о чем я
в Cи варианте ?


Павел это можно сделать ?
Хотя бы CDOW , Ntocdow

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3312
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.07.15 13:25. Заголовок: CDOW переделывать см..


CDOW переделывать смысла нет, т.к. там на вход подается дата, а на выходе - строка
Ntocdow - это если на вход дается номер дня недели:

#pragma BEGINDUMP

#include "hbapi.h"
#include "hbapilng.h"

HB_FUNC( _DOW )
{
hb_retnl( HB_ISDATE(1) ? (hb_pardl(1) % 7) + 1 : 0 );
}

HB_FUNC( NTOCDOW )
{
int iDow;
if( HB_ISNUM(1) )
iDow = hb_parni(1);
else
iDow = 0;
if( iDow >= 1 && iDow <= 7 )
hb_retc_const( hb_langDGetItem( HB_LANG_ITEM_BASE_DAY + ( iDow % 7 ) ) );
else
hb_retc("");
}

#pragma ENDDUMP

А больше там функций вроде бы и нет

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5113
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.07.15 13:58. Заголовок: Pasha Да с CDOW() я..


Pasha
Да с CDOW() я ошибся и ему все равно какой стандарт.
10 июля 2015 что в Африке пятница , что в Америке ......хоть что то общее ;)
Спасибо за NTOCDOW , работает

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 28 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 672
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет