Страница 1 из 6

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

Добавлено: Ср мар 18, 2015 5:45 pm
Amarok
Скрипт высчитывает фазу луны на сегодня.
СпойлерПоказать

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

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 положить файл из прикрепленного архива.

Re: Фазы луны

Добавлено: Пт апр 17, 2015 9:00 pm
adzam
Здесь нет видимой части фазы луны в % MoonPhase

Добавьте пож на вывод

Re: Фазы луны

Добавлено: Пт апр 17, 2015 9:26 pm
adzam
Примерно так?

$illumination = round( $moon->illumination()*100, 2 );
sg('Moon2.MoonPhase',$illumination); //Фаза луны %

Re: Фазы луны

Добавлено: Пн июл 11, 2016 12:12 am
xor
Привел названия фаз к русским стандартным + добавил выбор картинки, соотв. фазе(можно заменить на свои) в 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 ) ];
    }
*** Сообщение запрещено. Сообщение похоже на спам. ***

Re: Фазы луны

Добавлено: Пт авг 04, 2017 6:29 pm
Logrus
А можно полностью расписать, то в коннекте встречаются огрызки: класс -объект и свойства из скрипта выше, видимо адаптировали дальше, а полного решения нет.

Re: Фазы луны

Добавлено: Пн авг 13, 2018 2:02 pm
newz20
Настроил, вроде работает. Но на сегодня следующее полнолуние 26 августа, а скрипт выводит 25 сентября. Хотя до тех пор пока следующее новолуние было в августе показывал все правильно. Сегодня заметил что новолуние переехало на 9.09 и сразу полнолуние на сентябрь перешло. Может кто подскажет как исправить?

Re: Фазы луны

Добавлено: Пн авг 13, 2018 11:28 pm
xor
Там фигня с неймингом функций.
см 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 КБ) 7712 просмотров
зы. и коменты там напутаны некоторые на русском

Re: Фазы луны

Добавлено: Вт авг 14, 2018 12:10 am
xor
Как я понял
$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()
Так вроде?

Re: Фазы луны

Добавлено: Вт авг 14, 2018 8:48 am
newz20
СпойлерПоказать
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 и поэтому все уточняю.

Re: Фазы луны

Добавлено: Вт авг 14, 2018 8:58 am
newz20
А вообще по логике вещей надо вроде всегда выводить новолуние в следующем цикле (если наступило новолуние то автоматом следующий цикл становится новым новолунием), по такой же логике всегда надо выводить полнолуние для текущего цикла. И не надо писать никаких обработчиков и расчетов. Проверю как работает на следующих циклах.