mjaschen / astrotools
PHP的通用天文学库
1.0.0
2021-03-10 16:02 UTC
Requires
- php: >=7.3
- ext-bcmath: *
Requires (Dev)
- ergebnis/composer-normalize: ^2.13
- friendsofphp/php-cs-fixer: ^2.18
- php-parallel-lint/php-parallel-lint: ^1.2
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.5
- vimeo/psalm: ^4.6
README
Astrotools是一个用于天文学的通用PHP库。
要求
- PHP >= 7.3
- bcmath 扩展
较老的PHP版本
- 0.1.x分支支持PHP >= 7.0
- 0.0.x分支支持PHP 5.4 - 5.6。详细内容请参阅下一节。
安装
composer require mjaschen/astrotools
PHP 7.0, PHP 7.1, PHP 7.2
如果您需要使用与PHP 7.0、7.1或7.2兼容的Astrotools,只需要求版本0.1
composer require mjaschen/astrotools:^0.1.0
请注意,0.1.x分支不再维护,不会获得任何更新。
PHP 5
如果您需要使用与PHP 5.4、5.5或5.6兼容的Astrotools,只需要求版本0.0.2
composer require mjaschen/astrotools:0.0.2
请注意,0.0.x分支不再维护,不会获得任何更新。
特性
- 儒略日计算(正向/反向)
- 恒星时计算(GMST,本地恒星时)
- 复活节日期计算
- 时间助手
为什么不使用PHP的日历扩展?
一些已实现的功能(例如儒略日计算或复活节日期计算)已经由PHP的calendar扩展提供。
这些函数存在一些问题,例如easter_date()
只能计算从Unix时间戳(1970年1月1日至大约2037/2038年之间)的复活节日期。
使用示例
从日期/时间计算儒略日
use Astrotools\Time\JulianDay; $timestamp = new \DateTime('2015-02-25 12:01:36', new \DateTimeZone('Europe/Berlin')); $jd = JulianDay::fromDateTime($timestamp); echo $jd->getValue();
上面的代码产生以下输出
2459283.3831366
从儒略日计算日期/时间
use Astrotools\Time\JulianDay; $jd = new JulianDay(2451545.0); var_dump($jd->getDateTime());
上面的代码产生以下输出
class DateTime#10 (3) {
public $date =>
string(26) "2000-01-01 12:00:00.000000"
public $timezone_type =>
int(3)
public $timezone =>
string(3) "UTC"
}
计算给定日期/时间的恒星时
格林威治恒星时
use Astrotools\Time\SiderealTime; $dt = new \DateTime('2007-12-25 00:00:00', new \DateTimeZone('UTC')); $st = new SiderealTime($dt); echo $st->getSiderealTime();
上面的代码产生以下输出
6.2086583333
本地恒星时
德国柏林的本地恒星时(经度=13.5度东)
use Astrotools\Time\SiderealTime; $dt = new \DateTime('2007-12-25 20:00:00', new \DateTimeZone('UTC')); $st = new SiderealTime($dt); echo $st->getLocalSiderealTime(13.5);
上面的代码产生以下输出
3.1634161794
时间助手
将小时、分钟和秒转换为十进制时间
use Astrotools\Helper\Time; $time = Time::fromTime(6, 42, 23.1337); echo $time->getValue();
上面的代码产生以下输出
6.7064260278
将十进制时间转换为小时、分钟和秒
use Astrotools\Helper\Time; $time = new Time(6.7064260278); printf('%02d:%02d:%02.4f', $time->getHour(), $time->getMinute(), $time->getSecond());
上面的代码产生以下输出
06:42:23.1337
在时间和时角之间转换
use Astrotools\Helper\Time; $time = Time::fromTime(6, 42, 23.1337); echo $time->getHourAngle() . PHP_EOL; echo Time::fromHourAngle(275)->getValue();
上面的代码产生以下输出
100.596390417
18.333333333333
复活节日期计算
use Astrotools\Time\DateOfEaster; $doe = new DateOfEaster(2000); echo $doe->getDate()->format('Y-m-d');
上面的代码产生以下输出
2000-04-23
计算ΔT
存在多种方法可以获取给定(十进制)年份的ΔT值。可以在表中查找值,并为所需的日期进行插值,或者使用多项式表达式进行计算。
Astrotools目前提供使用多项式表达式计算ΔT的功能。对于从-500年到2150年的时间段,提供了合理的准确值。
<?php use Astrotools\Time\DeltaT\PolynomialExpression; $deltaT = new PolynomialExpression(); echo $deltaT->getDeltaT(2016.125);
上面的代码产生以下输出
69.568218578125
待办事项
- 在儒略日计算中支持微秒
- 实现通过表查找确定ΔT
参考资料
- 儒略日公式 - 美国海军天文台天文应用部门
- 儒略日期转换器 - 美国海军天文台天文应用部门
- 儒略日 - 维基百科
- ΔT
- 天文学算法,Jean Meuss,1998年,ISBN 978-0943396613
- ΔT(ΔT)的多项式表达式