mjaschen/astrotools

PHP的通用天文学库

1.0.0 2021-03-10 16:02 UTC

This package is auto-updated.

Last update: 2024-08-29 04:14:25 UTC


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

参考资料