[Сценарий] Фазы луны.

Не требует установки программ или изменения файлов

Модераторы: immortal, newz20

Аватара пользователя
Amarok
Сообщения: 1415
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 455 раз
Поблагодарили: 125 раз
Контактная информация:

[Сценарий] Фазы луны.

Сообщение Amarok » Ср мар 18, 2015 5:45 pm

Скрипт высчитывает фазу луны на сегодня.
СпойлерПоказать

Код: Выделить всё

include("./MoonPhase.php");
// create an instance of the class, and use the current time
$moon = new MoonPhase();
//$age = round( $moon->age(), 1 );
$age = round( $moon->age(), 0 );
$stage = $moon->phase() < 0.5 ? 'растущая' : 'убывающая';
$distance = round( $moon->distance(), 2 );
$nextnewtime = gmdate( 'G:i:s', $moon->next_new_moon() );
$nextnewdate = gmdate( 'd.m.Y', $moon->next_new_moon() );
$nextfulltime = gmdate( 'G:i:s', $moon->next_full_moon() );
$nextfulldate = gmdate( 'd.m.Y', $moon->next_full_moon() );
$phasename = $moon->phase_name();
sg('MoonAge',$age); //Возраст луны (лунный день)
sg('MoonStage',$stage); //Стадия луны
sg('MoonDistance',$distance); //Дистанция до луны
sg('MoonNextNewTime',$nextnewtime); //Время следующего полнолуния
sg('MoonNextNewDate',$nextnewdate); //Новолуние
sg('MoonNextFullTime',$nextfulltime); //Длительность лунного дня
sg('MoonNextFullDate',$nextfulldate); //Дата следующего полнолуния
sg('MoonPhaseName',$phasename); //Фаза луны
 
Данные пишет в ThisComputer. Для работы следует в htdocs положить файл из прикрепленного архива.
Вложения
MoonPhase.zip
(4.12 КБ) 499 скачиваний
За это сообщение автора Amarok поблагодарили (всего 2):
Strangeman (Пн окт 22, 2018 9:33 pm) • newz20 (Пн окт 29, 2018 12:26 pm)
Рейтинг: 2.35%
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
Аватара пользователя
adzam
Сообщения: 583
Зарегистрирован: Сб дек 08, 2012 10:28 pm
Откуда: Кишинев
Благодарил (а): 16 раз
Поблагодарили: 131 раз

Re: Фазы луны

Сообщение adzam » Пт апр 17, 2015 9:00 pm

Здесь нет видимой части фазы луны в % MoonPhase

Добавьте пож на вывод
Мои проекты здесь...https://connect.smartliving.ru/profile/41/blog213.htm
Если вам помогло какое-либо мое сообщение - не ленитесь пользоваться кнопкой СПАСИБО.
Аватара пользователя
adzam
Сообщения: 583
Зарегистрирован: Сб дек 08, 2012 10:28 pm
Откуда: Кишинев
Благодарил (а): 16 раз
Поблагодарили: 131 раз

Re: Фазы луны

Сообщение adzam » Пт апр 17, 2015 9:26 pm

Примерно так?

$illumination = round( $moon->illumination()*100, 2 );
sg('Moon2.MoonPhase',$illumination); //Фаза луны %
Мои проекты здесь...https://connect.smartliving.ru/profile/41/blog213.htm
Если вам помогло какое-либо мое сообщение - не ленитесь пользоваться кнопкой СПАСИБО.
Аватара пользователя
xor
Сообщения: 1739
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 211 раз
Поблагодарили: 521 раз

Re: Фазы луны

Сообщение xor » Пн июл 11, 2016 12:12 am

Привел названия фаз к русским стандартным + добавил выбор картинки, соотв. фазе(можно заменить на свои) в MoonPhase.php:

Код: Выделить всё

    function phase_name() {
        //$names = array( 'New Moon', 'Waxing Crescent', 'First Quarter', 'Waxing Gibbous', 'Full Moon', 'Waning Gibbous', 'Third Quarter', 'Waning Crescent', 'New Moon' );
       $names = array( 'Новолуние', 'Молодая Луна', 'Первая четверть', 'Прибывающая Луна', 'Полнолуние', 'Убывающая Луна', 'Последняя четверть', 'Старая Луна', 'Новолуние');
        // There are eight phases, evenly split. A "New Moon" occupies the 1/16th phases either side of phase = 0, and the rest follow from that.
        return $names[ floor( ( $this->phase + 0.0625 ) * 8 ) ];
    }
    function phase_img() {
        //$names = array( 'New Moon', 'Waxing Crescent', 'First Quarter', 'Waxing Gibbous', 'Full Moon', 'Waning Gibbous', 'Third Quarter', 'Waning Crescent', 'New Moon' );
       $img = array( 'icon-moonnew.png', 'icon-moonwaxingcrescent.png', 'icon-moonfirstquarter.png', 'icon-moonwaxinggibbous.png', 'icon-moonfull.png', 'icon-moonwaninggibbous.png', 'icon-moonthirdquarter.png', 'icon-moonwaningcrescent.png', 'icon-moonnew.png');
        // There are eight phases, evenly split. A "New Moon" occupies the 1/16th phases either side of phase = 0, and the rest follow from that.
        return $img[ floor( ( $this->phase + 0.0625 ) * 8 ) ];
    }
*** Сообщение запрещено. Сообщение похоже на спам. ***
За это сообщение автора xor поблагодарил:
Amarok (Чт июл 21, 2016 5:49 pm)
Рейтинг: 1.18%
Logrus
Сообщения: 1759
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 296 раз
Поблагодарили: 364 раза

Re: Фазы луны

Сообщение Logrus » Пт авг 04, 2017 6:29 pm

А можно полностью расписать, то в коннекте встречаются огрызки: класс -объект и свойства из скрипта выше, видимо адаптировали дальше, а полного решения нет.
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
newz20
Сообщения: 115
Зарегистрирован: Пт апр 06, 2018 9:40 am
Благодарил (а): 82 раза
Поблагодарили: 47 раз

Re: Фазы луны

Сообщение newz20 » Пн авг 13, 2018 2:02 pm

Настроил, вроде работает. Но на сегодня следующее полнолуние 26 августа, а скрипт выводит 25 сентября. Хотя до тех пор пока следующее новолуние было в августе показывал все правильно. Сегодня заметил что новолуние переехало на 9.09 и сразу полнолуние на сентябрь перешло. Может кто подскажет как исправить?
Аватара пользователя
xor
Сообщения: 1739
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 211 раз
Поблагодарили: 521 раз

Re: Фазы луны

Сообщение xor » Пн авг 13, 2018 11:28 pm

Там фигня с неймингом функций.
см https://github.com/solarissmoke/php-moo ... /issues/14
solarissmoke commented on 1 Feb 2017
full_moon() returns the correct result for me. You must be using next_full_moon(). The difference between the two is that full_moon() will give you the time of the full moon in the current lunar cycle, and next_full_moon() will give you the full moon in the next lunar cycle (not the next full moon... bad function naming, I know).

Same goes for next_first_quarter() etc. I will update the documentation to make this more clear.

добавьте что-то типа ///////////////////////////////////

Код: Выделить всё

require_once('lib/MoonPhase.php');
// create an instance of the class, and use the current time
$moon = new MoonPhase();
//$age = round( $moon->age(), 1 );
$age = round( $moon->age(), 0 );
$stage = $moon->phase() < 0.5 ? 'растущая' : 'убывающая';
$distance = round( $moon->distance(), 2 );
$nextnewtime = gmdate( 'G:i:s', $moon->next_new_moon() );
$nextnewdate = gmdate( 'd.m.Y', $moon->next_new_moon() );
$nextfulltime = gmdate( 'G:i:s', $moon->next_full_moon() );
$nextfulldate = gmdate( 'd.m.Y', $moon->next_full_moon() );
$newmoon = gmdate('d.m.Y G:i:s', $moon->new_moon() );  ///////////////////////////////////
$fullmoon = gmdate('d.m.Y G:i:s', $moon->full_moon() ); /////////////////////////////////

$phasename = $moon->phase_name();
$phaseimg = $moon->phase_img();
$illumination = round( $moon->illumination()*100, 2 );
sg('weather_my.MoonPhase',$illumination); //Фаза луны %
sg('weather_my.MoonAge',$age); //Возраст луны (лунный день)
sg('weather_my.MoonStage',$stage); //Стадия луны
sg('weather_my.MoonDistance',$distance); //Дистанция до луны
sg('weather_my.MoonNextNewTime',$nextnewtime); //Время следующего полнолуния
sg('weather_my.MoonNextNewDate',$nextnewdate); //Новолуние
sg('weather_my.MoonNextFullTime',$nextfulltime); //Длительность лунного дня
sg('weather_my.MoonNextFullDate',$nextfulldate); //Дата следующего полнолуния
sg('weather_my.MoonPhaseName',$phasename); //Фаза луны
sg('weather_my.MoonPhaseImg',$phaseimg); //Фаза луны image file
sg('weather_my.MoonNew',$newmoon); //Новолуние ///////////////////////////////////
sg('weather_my.MoonFull',$fullmoon); //Время следующего полнолуния ///////////////////////////////////
и получится
2018-08-13_23-21-04.png
2018-08-13_23-21-04.png (21.84 КБ) 4869 просмотров
зы. и коменты там напутаны некоторые на русском
За это сообщение автора xor поблагодарил:
newz20 (Вт авг 14, 2018 8:32 am)
Рейтинг: 1.18%
Аватара пользователя
xor
Сообщения: 1739
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 211 раз
Поблагодарили: 521 раз

Re: Фазы луны

Сообщение xor » Вт авг 14, 2018 12:10 am

Как я понял
$moon->new_moon()
$moon->full_moon() для текущего лунного цикла,
$moon->next_new_moon()
$moon->next_full_moon() для следующего.
Тогда для следующего, например, новолуния:
Если $moon->new_moon()>time(), то $moon->new_moon(), иначе $moon->next_new_moon()
Так вроде?
За это сообщение автора xor поблагодарил:
newz20 (Вт авг 14, 2018 8:32 am)
Рейтинг: 1.18%
newz20
Сообщения: 115
Зарегистрирован: Пт апр 06, 2018 9:40 am
Благодарил (а): 82 раза
Поблагодарили: 47 раз

Re: Фазы луны

Сообщение newz20 » Вт авг 14, 2018 8:48 am

СпойлерПоказать
xor писал(а):
Пн авг 13, 2018 11:28 pm
Там фигня с неймингом функций.
см https://github.com/solarissmoke/php-moo ... /issues/14
solarissmoke commented on 1 Feb 2017
full_moon() returns the correct result for me. You must be using next_full_moon(). The difference between the two is that full_moon() will give you the time of the full moon in the current lunar cycle, and next_full_moon() will give you the full moon in the next lunar cycle (not the next full moon... bad function naming, I know).

Same goes for next_first_quarter() etc. I will update the documentation to make this more clear.

добавьте что-то типа ///////////////////////////////////

Код: Выделить всё

require_once('lib/MoonPhase.php');
// create an instance of the class, and use the current time
$moon = new MoonPhase();
//$age = round( $moon->age(), 1 );
$age = round( $moon->age(), 0 );
$stage = $moon->phase() < 0.5 ? 'растущая' : 'убывающая';
$distance = round( $moon->distance(), 2 );
$nextnewtime = gmdate( 'G:i:s', $moon->next_new_moon() );
$nextnewdate = gmdate( 'd.m.Y', $moon->next_new_moon() );
$nextfulltime = gmdate( 'G:i:s', $moon->next_full_moon() );
$nextfulldate = gmdate( 'd.m.Y', $moon->next_full_moon() );
$newmoon = gmdate('d.m.Y G:i:s', $moon->new_moon() );  ///////////////////////////////////
$fullmoon = gmdate('d.m.Y G:i:s', $moon->full_moon() ); /////////////////////////////////

$phasename = $moon->phase_name();
$phaseimg = $moon->phase_img();
$illumination = round( $moon->illumination()*100, 2 );
sg('weather_my.MoonPhase',$illumination); //Фаза луны %
sg('weather_my.MoonAge',$age); //Возраст луны (лунный день)
sg('weather_my.MoonStage',$stage); //Стадия луны
sg('weather_my.MoonDistance',$distance); //Дистанция до луны
sg('weather_my.MoonNextNewTime',$nextnewtime); //Время следующего полнолуния
sg('weather_my.MoonNextNewDate',$nextnewdate); //Новолуние
sg('weather_my.MoonNextFullTime',$nextfulltime); //Длительность лунного дня
sg('weather_my.MoonNextFullDate',$nextfulldate); //Дата следующего полнолуния
sg('weather_my.MoonPhaseName',$phasename); //Фаза луны
sg('weather_my.MoonPhaseImg',$phaseimg); //Фаза луны image file
sg('weather_my.MoonNew',$newmoon); //Новолуние ///////////////////////////////////
sg('weather_my.MoonFull',$fullmoon); //Время следующего полнолуния ///////////////////////////////////
и получится
2018-08-13_23-21-04.png

зы. и коменты там напутаны некоторые на русском
Спасибо, коменты на русском я сразу поправил. даты теперь показывает правильно и все, теперь написать надо метод который будет определять текущую дату и выводить правильно следующие новолуния и полнолуния. Не понял как получается png. И картинки же придется самому добавить в папку где лежит MoonPhase.php Я просто еще очень слаб в php и поэтому все уточняю.
За это сообщение автора newz20 поблагодарил:
Nail (Сб апр 11, 2020 11:18 am)
Рейтинг: 1.18%
newz20
Сообщения: 115
Зарегистрирован: Пт апр 06, 2018 9:40 am
Благодарил (а): 82 раза
Поблагодарили: 47 раз

Re: Фазы луны

Сообщение newz20 » Вт авг 14, 2018 8:58 am

А вообще по логике вещей надо вроде всегда выводить новолуние в следующем цикле (если наступило новолуние то автоматом следующий цикл становится новым новолунием), по такой же логике всегда надо выводить полнолуние для текущего цикла. И не надо писать никаких обработчиков и расчетов. Проверю как работает на следующих циклах.
За это сообщение автора newz20 поблагодарил:
xor (Вт авг 14, 2018 9:10 am)
Рейтинг: 1.18%
Ответить