Форум » [x]Harbour » DOW() и компания » Ответить

DOW() и компания

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

Ответов - 28, стр: 1 2 All

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

Dima: NtocDow(1) чего вернет ? Прально воскресение а надо понедельник Ну или dwmas:={0,0,0,0,0,0,0} // дни недели stimer->(dbeval({|| dwmas[rusdow(stimer->data_z)]+=1})) пришлось делать RUSDOW ()

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


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

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

Dima: Собственно делал в "лоб". [pre2] func _dow(c) local n:=dow(c) return if(n==1,7,n-1) [/pre2] А после возник спортивный интерес а нельзя ли сделать короче через % , но что то не срастается и видимо я уже туплю ))) Есть идеи ?

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

Pasha: Совсем просто и без костылей будет так: func _dow(dt) return ( dt % 7 ) + 1

Dima: petr707 Понял , перемудрил я )) Вот так будет короче func _dow(c) return dow(c-1) Проверка не нужна , функцию юзаю только я и туда 100 % попадет только дата. По началу подумал что отталкиваться надо от результата что выдаст DOW() и после этого с ним сделать что нужно.

Dima: Pasha Паш что то не то ......)) Проверял так [pre2] for i=0 to 7 ? dow(date()+i), _dow(date()+i) next [/pre2]

Pasha: дык сегодня вроде четверг (date()%7+1) как раз будет 4. Не ?

Dima: Pasha [pre2] for i=0 to 7 ? dow(date()+i), _dow(date()+i) next wait func _dow(dt) return ( dt % 7 ) + 1 [/pre2] При выполнении Argument Error % Base 1085

Pasha: Еще короче, то есть эффективнее: [pre2]#pragma BEGINDUMP #include "hbapi.h" HB_FUNC( _DOW ) { hb_retnl( HB_ISDATE(1) ? (hb_pardl(1) % 7) + 1 : 0 ); } #pragma ENDDUMP [/pre2]

Dima: Pasha пишет: Еще короче чудно , ошибка та же

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

Haz: 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

Dima: Игорь а тест чекануть ;) FT_DATECNFG( , 6 ) for i=0 to 7 ? dow(date()+i), FT_DAYTOBOW(date()+i) next Результат [pre2] 5 6 6 0 7 1 1 2 2 3 3 4 4 5 5 6 [/pre2]

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

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

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



полная версия страницы