Skip to content

basic usage

github-actions[bot] edited this page May 29, 2026 · 2 revisions

Basic Usage Examples

Basic crescent visibility check

import { visibility } from 'moon-sighting';

const result = visibility({
  date: new Date(2023, 2, 22),  // March 22, 2023 (month is 0-indexed)
  lat: 21.39,
  lng: 39.86,
  elevation: 277,
});

console.log(result.visible);    // true or false
console.log(result.q?.toFixed(3));  // Yallop q-value, e.g. '0.216'

Use Odeh criterion

import { visibility } from 'moon-sighting';

const result = visibility({
  date: new Date(2023, 2, 22),
  lat: 40.0,
  lng: -75.0,
  elevation: 100,
  criterion: 'odeh',
});

console.log(result.visible);    // true or false
console.log(result.category);   // Odeh category string

Check visibility from multiple cities

import { visibility } from 'moon-sighting';

const newMoonDate = new Date(2023, 2, 22);

const cities = [
  { name: 'Mecca',    lat: 21.39, lng: 39.86, elevation: 277 },
  { name: 'London',   lat: 51.51, lng: -0.13, elevation: 11  },
  { name: 'New York', lat: 40.71, lng: -74.00, elevation: 10 },
  { name: 'Karachi',  lat: 24.86, lng: 67.01, elevation: 13  },
];

for (const city of cities) {
  const r = visibility({ ...city, date: newMoonDate });
  console.log(`${city.name}: ${r.visible ? 'visible' : 'not visible'} (q=${r.q?.toFixed(3)})`);
}

Scan multiple nights for first visibility

import { visibility } from 'moon-sighting';

function findFirstVisible(observer: { lat: number; lng: number; elevation: number }, startDate: Date, maxDays = 5) {
  for (let i = 0; i < maxDays; i++) {
    const date = new Date(startDate);
    date.setDate(startDate.getDate() + i);
    const r = visibility({ ...observer, date });
    if (r.visible) {
      return { date, result: r };
    }
  }
  return null;
}

const observer = { lat: 21.39, lng: 39.86, elevation: 277 };
const startDate = new Date(2023, 2, 21);  // March 21, 2023

const firstVisible = findFirstVisible(observer, startDate);
if (firstVisible) {
  console.log('First visible:', firstVisible.date.toDateString());
  console.log('q-value:', firstVisible.result.q?.toFixed(3));
}

CJS usage

const { visibility } = require('moon-sighting');

const result = visibility({
  date: new Date(2023, 2, 22),
  lat: 21.39,
  lng: 39.86,
  elevation: 277,
});

console.log(result.visible);

Clone this wiki locally