Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.137.183.14] |
|
Сообщ.
#1
,
|
|
|
Люди, может у кого завалялся алгоритм для вечесления дня недели, зная число, месяц и год? Желательно и по новому и по старому стилям.
|
Сообщ.
#2
,
|
|
|
Сообщ.
#3
,
|
|
|
А почему не пользоваться стандартным видовозным окошком, которая позволяет выводить абсолютно весь календарь!
|
Сообщ.
#4
,
|
|
|
Цитата Rechkin, 30.07.02, 06:48:51 А почему не пользоваться стандартным видовозным окошком, которая позволяет выводить абсолютно весь календарь! Стандартное окошко Виндоуз показывает только с 1980 года |
Сообщ.
#5
,
|
|
|
Люди, а самим впадлу?
30 июля 2002 года вторник. Нужно например 17 февраля 1934 года. Отнимаем 68*365 (годы) + 16 (высокосные) + 30+2*31+2*30+11 (дни). Получаем число. Ищем остаток деления на 7. Етот остаток отнимаем от вторника (например вторник - 3 = суббота). |
Сообщ.
#6
,
|
|
|
На Пасквиле:
<br>function DayOfWeek(D,M,Y: Word): Byte;<br> var N: Longint;<br>begin<br> if M>2 then Inc(M) else begin Inc(M,13); Dec(Y); end;<br> N:=trunc(365.25*Y)+trunc(30.6*M)+D-621050;<br> Result:=N-trunc(N/7)*7+1;<br>end;<br> |
Сообщ.
#7
,
|
|
|
В Дельфи есть такая ф-ия встроенаная.
|
Сообщ.
#8
,
|
|
|
Цитата Song, 31.07.02, 10:27:38 В Дельфи есть такая ф-ия встроенаная. Только не все дельфи юзают , а те, кто юзает - могут круто обломаться вычисляя день недели даты меньшей, чем 30 декабря 1899 года. См. в хелпе описалово типа TDateTime Хотя это из 5-й дельфи, может позже чего исправили, я не знаю. Кстати, кому надо - приведенная мною выше функция, тока на PHP4: <br>// Аргумент функции - дата в формате ДД.ММ.ГГГГ<br>function DayOfWeek($D) {<br> $D = explode(".",$D);<br> if (!(checkdate($D[1],$D[0],$D[2]))) return -1;<br> if ($D[1]>2) $D[1]++; else {<br> $D[1] += 13;<br> $D[2] --;<br> }<br> $N = floor(365.25*$D[2]) + floor(30.6*$D[1]) + $D[0] - 621050;<br> return ($N-floor($N/7)*7+1);<br>}<br> Для ленивых |
Сообщ.
#9
,
|
|
|
Спасибо всем ответившим :D
|
Сообщ.
#10
,
|
|
|
Цитата JoeUser, 30.07.02, 14:04:50 На Пасквиле: <br>function DayOfWeek(D,M,Y: Word): Byte;<br> var N: Longint;<br>begin<br> if M>2 then Inc(M) else begin Inc(M,13); Dec(Y); end;<br> N:=trunc(365.25*Y)+trunc(30.6*M)+D-621050;<br> Result:=N-trunc(N/7)*7+1;<br>end;<br> Маааленькая такая ошибочка(алгоритмическая) в сырцах. 365.25 - средняя продолжителность года в столетнем цикле. Y необходимо разбить на 2 части: 1-количество столетий и 2 - порядковый номер года в столетии. Cредняя продолжителность столетия 36524.25 дней.(григорианский календарь) есть приближение к тропическому году(365.2421988). Имеем <br>.........<br>century := Y div 100; year := Y mod 100;<br>N := trunc(36524.25*century) + trunc(365.25*year) + ...<br>далее по тексту с небольшим исправлением const<br> |