Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: ValeraVVV on May 26, 2016, 10:01:31 PM
-
Очень нужно как-то определять в скрипте день недели. Но как его вычислить скриптом или взять данные из другого приложения не знаю..
Подскажите пожалуйста. Оченя нуна.
-
можно позаимствовать дату с какого-нибудь сервера с помощью HTTPGET. попробовал с первым что мне дал поисковик.
$get = HTTPGET ("http://time100.ru")
$str = STRPOS ($get, "сегодня:")
print(STRFILTER (STRCUT ($get, $str+12, 50), "</budiv>"))
halt
в логе 0:55:07 27 мая 2016 года, пятница
-
можно позаимствовать дату с какого-нибудь сервера с помощью HTTPGET. попробовал с первым что мне дал поисковик.
$get = HTTPGET ("http://time100.ru")
$str = STRPOS ($get, "сегодня:")
print(STRFILTER (STRCUT ($get, $str+12, 50), "</budiv>"))
halt
в логе 0:55:07 27 мая 2016 года, пятница
классное решение. но не в моем случаи (когда доступа к инету не будет).
-
вот тебе еще вариант, берем календарь в текстовом формате. я взял отсюда http://macmax.ru/calendar/ . создаем формат календаря на свой вкус. мне показалось, что будет проще, если каждая строка = день в году.
Январь 1 Пятница
Январь 2 Суббота
Январь 3 Воскресенье
Январь 4 Понедельник
Январь 5 Вторник
Январь 6 Среда
Январь 7 Четверг
Январь 8 Пятница
Январь 9 Суббота
....
...
ну а дальше, зная месяц и число, с легкостью определяем номер строки, а тем самым и день недели.
SWITCH($_date_m)
CASE(1)
$month = "Январь"
CASE(2)
$month = "Февраль"
CASE(3)
$month = "Март"
CASE(4)
$month = "Апрель"
CASE(5)
$month = "Май"
CASE(6)
$month = "Июнь"
CASE(7)
$month = "Июль"
CASE(8)
$month = "Август"
CASE(9)
$month = "Сентябрь"
CASE(10)
$month = "Октябрь"
CASE(11)
$month = "Ноябрь"
CASE(12)
$month = "Декабрь"
DEFAULT
END_SWITCH
FOR($a=0,$a<365)
IF(STRPOS (TFREAD ("календарь.txt",$a), $month)>0)
IF(STRPOS (TFREAD ("календарь.txt",$a), $_date_d)>0)
print(TFREAD ("календарь.txt",$a))
$a=365
END_IF
END_IF
END_CYC
halt
во вложении календарь на 2016г
-
как здорово что столько предложений. и все живые идея.
однако я попробовал поступить по-другому.
попробовал высчитать.
и о,эврика! оно поддается расчетам .
погуглив нашел несколько формул выбрал одну и в итоге родилось "нечто" :)
// Для нашего современного календаря:
///W = d + [ (13m - 1) / 5 ] + y + [ y / 4 ] + [ c / 4 ] - 2c
/// где d - число месяца;
/// m - номер месяца, начиная с марта (март=1, апрель=2, ..февраль=12);
/// y - номер года в столетии (например, для 1965 года y=65. Для января и февраля 1965 года, т. е. для m=11 или m=12 номер года надо брать предыдущий, т. е. y=64);
//// c - количество столетий (например, для 2000 года c=20. И здесь для января и февраля 2000 года надо брать предыдущее столетие с=19);
///квадратные скобки означают целую часть полученного числа (отбрасываем дробную) .
/// Результат W делите на 7 и модуль остатка от деления даст день недели (воскресенье=0, понедельник=1, ..суббота=6)
//// Пример: для 31 декабря 2008 года определяем:
/// d=31, m=10, y=8, c=20
/// По формуле находим:
//// W = 31 + [ ( 13 * 10 - 1 ) / 5 ] + 8 + [ 8 / 4 ] + [ 20 / 4 ] - 2 * 20 =
/// = 31 + 25 + 8 + 2 + 5 - 40 = 31
/// Теперь делим W на 7 и находим остаток от деления: 31 / 7 = 4 и 3 в остатке.
/// Тройка соответствует дню недели СРЕДА.
//// вставляем формулу для годов 2001-2099 (мне хватит) :
logclear
$d=$_date_d
$m=$_date_m
$y=strcut($_date_y,3,2)
$c=strcut($_date_y,1,2)
/// опред. месяц для формулы
$m=$m-2
if ($m=-1)
$m=11
$y=$y-1
end_if
if ($m=0)
$m=12
$y=$y-1
end_if
//// дальше просто по формуле кусками
$x1=int((13*$m-1)/5)
$x2=int($y/4)
$x3=$d+$x1+$y+$x2+int($c/4)-($c*2)
$x4=int($x3/7)
$x5=$x3-($x4*7)
if ($x5<0)
$x5=$x5+7
end_if
print ("Порядковый день недели:",$x5)
halt
то что и требовалось!
проверил- работает
сори за примитивный и кривой скрипт, но мне было не до красот
можно конечно и оформить , возможно кому и пригодиться (например, запуск куска скрипта по рабочим дням или т.п.)
-
Молодца. Чего мучаться, если можно посчитать.
оптимизэйшен
// опред. месяц для формулы
$m = $m - 2
IF($m < 1)
$m = $m + 12
$y = $y - 1
END_IF
$nd = $d + INT((13*$m - 1) / 5) + $y + INT($y/4) + int($c/4) - (2*$c)
$day_week = $nd - (INT($nd/7) * 7)
И не пойму, нафига это?
IF($day_week < 0)
$day_week = $day_week + 7
END_IF
-
в инструкции к формуле упущено, что конечное число может быть минусовым.
вот тогда пришлось додумать.
можно проверить на дате 1.04.2016
классный короткий скрипт у тебя получился. видно асса ;D
спс огромное. себе скрипт поменяю на твой.
....
попутно, пока вникал в смысл формулы интересная вещь получается....
чтобы рассчитать надо принять за основу юлианскую систему исчисления , где март начало года и начало недели воскресенье... во как. и не надо мучений с високосным годом..... а сейчас календари черти что.
....
-
Они просто решили проблему скинув 29 февраля в конец списка, чтобы он не влиял на вычисление всех других дней.
Удобно, чёрт побери.
-
попробовал высчитать.
и о,эврика! оно поддается расчетам .
погуглив нашел несколько формул выбрал одну и в итоге родилось "нечто" :)
здоровски. я както даже и неподумал что это можно просчитать. а во как оно есть. :)
-
Приветствую!
Задался вопросом получения дня недели, набросал свой вариант в две строки:
$nd = $_time_t - ($_time_h * 3600) - ($_time_m * 60) - $_time_s
$nd = INT(($nd - (INT($nd / 604800) * 604800)) / 86400)
SWITCH($nd)
CASE(0)
PRINT("Четверг")
CASE(1)
PRINT("Пятница")
CASE(2)
PRINT("Суббота")
CASE(3)
PRINT("Воскресенье")
CASE(4)
PRINT("Понедельник")
CASE(5)
PRINT("Вторник")
CASE(6)
PRINT("Среда")
END_SWITCH
HALT
-
Тогда уж и вывод сократить
STRSEPARATE("Четверг:Пятница:Суббота:Воскресенье:Понедельник:Вторник:Среда", ":", $ndt)
PRINT($ndt[$nd])