@hebcal/core 6.8.2 → 6.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +262 -4
- package/dist/bundle.js +1400 -942
- package/dist/bundle.js.map +1 -1
- package/dist/bundle.min.js +18 -17
- package/dist/bundle.min.js.map +1 -1
- package/dist/esm/CalOptions.d.ts +11 -1
- package/dist/esm/DailyLearning.d.ts +4 -4
- package/dist/esm/DailyLearning.js +5 -5
- package/dist/esm/DailyLearning.js.map +1 -1
- package/dist/esm/HebrewDateEvent.js +1 -1
- package/dist/esm/HolidayEvent.d.ts +7 -2
- package/dist/esm/HolidayEvent.js +8 -3
- package/dist/esm/HolidayEvent.js.map +1 -1
- package/dist/esm/MevarchimChodeshEvent.d.ts +2 -1
- package/dist/esm/MevarchimChodeshEvent.js +3 -2
- package/dist/esm/MevarchimChodeshEvent.js.map +1 -1
- package/dist/esm/ParshaEvent.d.ts +13 -0
- package/dist/esm/ParshaEvent.js +14 -1
- package/dist/esm/ParshaEvent.js.map +1 -1
- package/dist/esm/TimedEvent.d.ts +12 -4
- package/dist/esm/TimedEvent.js +13 -5
- package/dist/esm/TimedEvent.js.map +1 -1
- package/dist/esm/YomKippurKatanEvent.d.ts +2 -1
- package/dist/esm/YomKippurKatanEvent.js +3 -2
- package/dist/esm/YomKippurKatanEvent.js.map +1 -1
- package/dist/esm/ashkenazi.po.js +1 -1
- package/dist/esm/calendar.d.ts +17 -7
- package/dist/esm/calendar.js +23 -10
- package/dist/esm/calendar.js.map +1 -1
- package/dist/esm/candles.d.ts +19 -1
- package/dist/esm/candles.js +20 -2
- package/dist/esm/candles.js.map +1 -1
- package/dist/esm/cities.json.js +1 -1
- package/dist/esm/event.d.ts +2 -4
- package/dist/esm/event.js +3 -5
- package/dist/esm/event.js.map +1 -1
- package/dist/esm/getStartAndEnd.js +1 -1
- package/dist/esm/hallel.js +1 -1
- package/dist/esm/he-x-NoNikud.po.js +1 -1
- package/dist/esm/he.po.js +1 -1
- package/dist/esm/hebcal.d.ts +31 -96
- package/dist/esm/hebcal.js +34 -107
- package/dist/esm/hebcal.js.map +1 -1
- package/dist/esm/holidays.d.ts +8 -1
- package/dist/esm/holidays.js +2 -2
- package/dist/esm/holidays.js.map +1 -1
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.js +3 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/isAssurBemlacha.js +6 -3
- package/dist/esm/isAssurBemlacha.js.map +1 -1
- package/dist/esm/isAveilut.js +1 -1
- package/dist/esm/isFastDay.d.ts +1 -1
- package/dist/esm/isFastDay.js +2 -2
- package/dist/esm/isFastDay.js.map +1 -1
- package/dist/esm/locale.js +1 -1
- package/dist/esm/location.d.ts +37 -9
- package/dist/esm/location.js +38 -10
- package/dist/esm/location.js.map +1 -1
- package/dist/esm/modern.js +1 -1
- package/dist/esm/molad.d.ts +26 -20
- package/dist/esm/molad.js +27 -21
- package/dist/esm/molad.js.map +1 -1
- package/dist/esm/moladBase.d.ts +11 -0
- package/dist/esm/moladBase.js +12 -1
- package/dist/esm/moladBase.js.map +1 -1
- package/dist/esm/moladDate.d.ts +10 -6
- package/dist/esm/moladDate.js +25 -18
- package/dist/esm/moladDate.js.map +1 -1
- package/dist/esm/omer.d.ts +19 -3
- package/dist/esm/omer.js +20 -4
- package/dist/esm/omer.js.map +1 -1
- package/dist/esm/parshaName.js +1 -1
- package/dist/esm/parshaYear.d.ts +2 -2
- package/dist/esm/parshaYear.js +3 -3
- package/dist/esm/parshaYear.js.map +1 -1
- package/dist/esm/pkgVersion.d.ts +1 -1
- package/dist/esm/pkgVersion.js +2 -2
- package/dist/esm/pkgVersion.js.map +1 -1
- package/dist/esm/reformatTimeStr.d.ts +14 -2
- package/dist/esm/reformatTimeStr.js +15 -3
- package/dist/esm/reformatTimeStr.js.map +1 -1
- package/dist/esm/sedra.d.ts +44 -18
- package/dist/esm/sedra.js +39 -17
- package/dist/esm/sedra.js.map +1 -1
- package/dist/esm/sefira.json.js +1 -1
- package/dist/esm/staticHolidays.d.ts +0 -2
- package/dist/esm/staticHolidays.js +1 -3
- package/dist/esm/staticHolidays.js.map +1 -1
- package/dist/esm/string.js +1 -1
- package/dist/esm/tachanun.js +1 -1
- package/dist/esm/zmanim.d.ts +177 -142
- package/dist/esm/zmanim.js +183 -148
- package/dist/esm/zmanim.js.map +1 -1
- package/package.json +8 -9
package/dist/esm/location.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @hebcal/core v6.
|
|
1
|
+
/*! @hebcal/core v6.9.0, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
|
|
2
2
|
import { GeoLocation } from '@hebcal/noaa';
|
|
3
3
|
import citiesJson from './cities.json.js';
|
|
4
4
|
import QuickLRU from 'quick-lru';
|
|
@@ -75,7 +75,7 @@ function initClassicCities() {
|
|
|
75
75
|
*
|
|
76
76
|
* Extends {@link GeoLocation} from `@hebcal/noaa` with Jewish-calendar
|
|
77
77
|
* specific data: an Israel/Diaspora flag, ISO country code, and an optional
|
|
78
|
-
* geographic identifier. Also provides {@link Location.lookup} for
|
|
78
|
+
* geographic identifier. Also provides {@link Location.lookup} for the 65
|
|
79
79
|
* built-in "classic" Hebcal cities.
|
|
80
80
|
*
|
|
81
81
|
* @example
|
|
@@ -98,11 +98,27 @@ class Location extends GeoLocation {
|
|
|
98
98
|
il;
|
|
99
99
|
cc;
|
|
100
100
|
geoid;
|
|
101
|
+
/**
|
|
102
|
+
* First-level administrative division (e.g. a US state or a French
|
|
103
|
+
* region) as an abbreviation, such as `"CA"`. Not set by this package;
|
|
104
|
+
* populated by callers that hydrate a `Location` from a geo database.
|
|
105
|
+
*/
|
|
101
106
|
admin1;
|
|
107
|
+
/**
|
|
108
|
+
* Full name of the first-level administrative division, such as
|
|
109
|
+
* `"California"`. Not set by this package.
|
|
110
|
+
*/
|
|
102
111
|
stateName;
|
|
112
|
+
/**
|
|
113
|
+
* Which kind of lookup produced this location: `'zip'` for a US Zip Code
|
|
114
|
+
* or `'geoname'` for a GeoNames city. Not set by this package.
|
|
115
|
+
*/
|
|
103
116
|
geo;
|
|
117
|
+
/** US Zip Code, such as `"02912"`. Not set by this package. */
|
|
104
118
|
zip;
|
|
119
|
+
/** Approximate population of the city. Not set by this package. */
|
|
105
120
|
population;
|
|
121
|
+
/** City name in plain ASCII, for sorting or URL generation. Not set by this package. */
|
|
106
122
|
asciiname;
|
|
107
123
|
/**
|
|
108
124
|
* Initialize a Location instance
|
|
@@ -149,8 +165,14 @@ class Location extends GeoLocation {
|
|
|
149
165
|
/**
|
|
150
166
|
* Returns the full descriptive location name passed to the constructor,
|
|
151
167
|
* or `null` if no name was provided.
|
|
168
|
+
*
|
|
169
|
+
* Note that the built-in classic cities are named by city alone, so
|
|
170
|
+
* `getName()` and {@link getShortName} return the same string for them.
|
|
152
171
|
* @example
|
|
153
|
-
*
|
|
172
|
+
* const loc = new Location(41.85003, -87.65005, false,
|
|
173
|
+
* 'America/Chicago', 'Chicago, Illinois, USA', 'US');
|
|
174
|
+
* loc.getName(); // 'Chicago, Illinois, USA'
|
|
175
|
+
* Location.lookup('San Francisco')?.getName(); // 'San Francisco'
|
|
154
176
|
*/
|
|
155
177
|
getName() {
|
|
156
178
|
return this.getLocationName();
|
|
@@ -159,11 +181,15 @@ class Location extends GeoLocation {
|
|
|
159
181
|
* Returns the location name truncated at the first comma. Useful for
|
|
160
182
|
* compact display where only the city name is desired.
|
|
161
183
|
*
|
|
162
|
-
* Special-cased so that US locations of the form `"Washington, DC"` or
|
|
184
|
+
* Special-cased so that US locations of the form `"Washington, DC ..."` or
|
|
163
185
|
* `"Washington, D.C., ..."` keep the `DC` / `D.C.` suffix attached.
|
|
164
186
|
* @example
|
|
165
|
-
* Location.
|
|
166
|
-
*
|
|
187
|
+
* const chi = new Location(41.85003, -87.65005, false,
|
|
188
|
+
* 'America/Chicago', 'Chicago, Illinois, USA', 'US');
|
|
189
|
+
* chi.getShortName(); // 'Chicago'
|
|
190
|
+
* const dc = new Location(38.89511, -77.03637, false,
|
|
191
|
+
* 'America/New_York', 'Washington, D.C., USA', 'US');
|
|
192
|
+
* dc.getShortName(); // 'Washington, D.C.'
|
|
167
193
|
*/
|
|
168
194
|
getShortName() {
|
|
169
195
|
const name = this.getLocationName();
|
|
@@ -217,7 +243,7 @@ class Location extends GeoLocation {
|
|
|
217
243
|
return this.geoid;
|
|
218
244
|
}
|
|
219
245
|
/**
|
|
220
|
-
* Creates a location object from one of
|
|
246
|
+
* Creates a location object from one of 65 "classic" Hebcal city names.
|
|
221
247
|
* The following city names are supported:
|
|
222
248
|
* 'Ashdod', 'Atlanta', 'Austin', 'Baghdad', 'Beer Sheva',
|
|
223
249
|
* 'Berlin', 'Baltimore', 'Bogota', 'Boston', 'Budapest',
|
|
@@ -322,13 +348,15 @@ class Location extends GeoLocation {
|
|
|
322
348
|
* location with the same (lower-cased) name is already registered, and
|
|
323
349
|
* `true` if successfully added.
|
|
324
350
|
*
|
|
325
|
-
* Use this to extend the built-in set of
|
|
351
|
+
* Use this to extend the built-in set of 65 classic Hebcal cities with
|
|
326
352
|
* your own custom locations.
|
|
327
353
|
* @example
|
|
328
354
|
* const tlv = new Location(32.0853, 34.7818, true,
|
|
329
|
-
* 'Asia/
|
|
355
|
+
* 'Asia/Jerusalem', 'My Office, Tel Aviv', 'IL');
|
|
330
356
|
* Location.addLocation('My Office', tlv); // true
|
|
331
|
-
* Location.lookup('my office')?.getTzid(); // 'Asia/
|
|
357
|
+
* Location.lookup('my office')?.getTzid(); // 'Asia/Jerusalem'
|
|
358
|
+
* @param cityName name to register the location under (case insensitive)
|
|
359
|
+
* @param location the `Location` instance to register
|
|
332
360
|
*/
|
|
333
361
|
static addLocation(cityName, location) {
|
|
334
362
|
const name = cityName.toLowerCase();
|
package/dist/esm/location.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"location.js","sources":["../../../src/location.ts"],"sourcesContent":["/*\n Hebcal - A Jewish Calendar Generator\n Copyright (c) 1994-2020 Danny Sadinoff\n Portions copyright Eyal Schachter and Michael J. Radwin\n\n https://github.com/hebcal/hebcal-es6\n\n This program is free software; you can redistribute it and/or\n modify it under the terms of the GNU General Public License\n as published by the Free Software Foundation; either version 2\n of the License, or (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport {GeoLocation} from '@hebcal/noaa';\nimport citiesJson from './cities.json';\nimport QuickLRU from 'quick-lru';\n\nconst classicCities = new Map<string, Location>();\n\n// Zip-Codes.com TimeZone IDs\nconst ZIPCODES_TZ_MAP: Record<string, string> = {\n '0': 'UTC',\n '4': 'America/Puerto_Rico', // Atlantic (GMT -04:00)\n '5': 'America/New_York', // Eastern (GMT -05:00)\n '6': 'America/Chicago', // Central (GMT -06:00)\n '7': 'America/Denver', // Mountain (GMT -07:00)\n '8': 'America/Los_Angeles', // Pacific (GMT -08:00)\n '9': 'America/Anchorage', // Alaska (GMT -09:00)\n '10': 'Pacific/Honolulu', // Hawaii-Aleutian Islands (GMT -10:00)\n '11': 'Pacific/Pago_Pago', // American Samoa (GMT -11:00)\n '13': 'Pacific/Funafuti', // Marshall Islands (GMT +12:00)\n '14': 'Pacific/Guam', // Guam (GMT +10:00)\n '15': 'Pacific/Palau', // Palau (GMT +9:00)\n '16': 'Pacific/Chuuk', // Micronesia (GMT +11:00)\n} as const;\n\n/** @private */\nconst timeFormatCache = new QuickLRU<string, Intl.DateTimeFormat>({\n maxSize: 120,\n});\n\n/**\n * Gets a 24-hour time formatter (e.g. 07:41 or 20:03) from cache\n * or makes a new one if needed\n * @private\n */\nfunction getFormatter(tzid: string): Intl.DateTimeFormat {\n const fmt = timeFormatCache.get(tzid);\n if (fmt) return fmt;\n const f = new Intl.DateTimeFormat('en-US', {\n timeZone: tzid,\n hour: 'numeric',\n minute: 'numeric',\n hour12: false,\n });\n timeFormatCache.set(tzid, f);\n return f;\n}\n\nfunction initClassicCities() {\n for (const entry of citiesJson) {\n const [cityName, cc, lat, lng, tzid, elev] = entry.split('|');\n const location = new Location(\n +lat,\n +lng,\n cc === 'IL',\n tzid,\n cityName,\n cc,\n undefined,\n +elev\n );\n Location.addLocation(cityName, location);\n }\n}\n\n/**\n * Class representing a geographic location for use with candle-lighting,\n * havdalah, and zmanim calculations.\n *\n * Extends {@link GeoLocation} from `@hebcal/noaa` with Jewish-calendar\n * specific data: an Israel/Diaspora flag, ISO country code, and an optional\n * geographic identifier. Also provides {@link Location.lookup} for ~60\n * built-in \"classic\" Hebcal cities.\n *\n * @example\n * import {Location} from '@hebcal/core';\n *\n * // Create a location for a custom address\n * const loc = new Location(\n * 41.85003, // latitude\n * -87.65005, // longitude\n * false, // not in Israel\n * 'America/Chicago',\n * 'Chicago, Illinois, USA',\n * 'US'\n * );\n *\n * // Or look up a built-in classic city\n * const tlv = Location.lookup('Tel Aviv');\n */\nexport class Location extends GeoLocation {\n private readonly il: boolean;\n private readonly cc?: string;\n private readonly geoid?: string | number;\n admin1?: string;\n stateName?: string;\n geo?: 'zip' | 'geoname';\n zip?: string;\n population?: number;\n asciiname?: string;\n\n /**\n * Initialize a Location instance\n * @param latitude - Latitude as a decimal, valid range -90 thru +90 (e.g. 41.85003)\n * @param longitude - Longitude as a decimal, valid range -180 thru +180 (e.g. -87.65005)\n * @param il - in Israel (true) or Diaspora (false)\n * @param tzid - Olson timezone ID, e.g. \"America/Chicago\"\n * @param [cityName] - optional descriptive city name\n * @param [countryCode] - ISO 3166 alpha-2 country code (e.g. \"FR\")\n * @param [geoid] - optional string or numeric geographic ID\n * @param [elevation] - in meters (default `0`)\n */\n constructor(\n latitude: number,\n longitude: number,\n il: boolean,\n tzid: string,\n cityName?: string,\n countryCode?: string,\n geoid?: string | number,\n elevation?: number\n ) {\n const lat = typeof latitude === 'number' ? latitude : parseFloat(latitude);\n if (isNaN(lat) || lat < -90 || lat > 90) {\n throw new RangeError(`Latitude ${latitude} out of range [-90,90]`);\n }\n const long = typeof longitude === 'number' ? longitude : parseFloat(longitude);\n if (isNaN(long) || long < -180 || long > 180) {\n throw new RangeError(`Longitude ${longitude} out of range [-180,180]`);\n }\n if (!tzid) {\n throw new RangeError('Invalid timezone');\n }\n const elev = typeof elevation === 'number' && elevation > 0 ? elevation : 0;\n if (cityName && typeof cityName !== 'string') {\n cityName = String(cityName);\n }\n super(cityName || null, lat, long, elev, tzid);\n this.il = Boolean(il);\n this.cc = countryCode;\n if (countryCode === 'IL') {\n this.il = true;\n }\n this.geoid = geoid;\n }\n\n /**\n * Returns `true` if this location is in Israel (uses the Israeli holiday\n * and Torah-reading schedule), `false` for the Diaspora.\n */\n getIsrael(): boolean {\n return this.il;\n }\n\n /**\n * Returns the full descriptive location name passed to the constructor,\n * or `null` if no name was provided.\n * @example\n * Location.lookup('San Francisco')?.getName(); // 'San Francisco, California, USA'\n */\n getName(): string | null {\n return this.getLocationName();\n }\n\n /**\n * Returns the location name truncated at the first comma. Useful for\n * compact display where only the city name is desired.\n *\n * Special-cased so that US locations of the form `\"Washington, DC\"` or\n * `\"Washington, D.C., ...\"` keep the `DC` / `D.C.` suffix attached.\n * @example\n * Location.lookup('San Francisco')?.getShortName(); // 'San Francisco'\n * Location.lookup('Washington DC')?.getShortName(); // 'Washington, DC'\n */\n getShortName(): string | null {\n const name = this.getLocationName();\n if (!name) return name;\n const comma = name.indexOf(', ');\n if (comma === -1) return name;\n if (this.cc === 'US' && name[comma + 2] === 'D') {\n if (name[comma + 3] === 'C') {\n return name.substring(0, comma + 4);\n }\n if (name[comma + 3] === '.' && name[comma + 4] === 'C') {\n return name.substring(0, comma + 6);\n }\n }\n return name.substring(0, comma);\n }\n\n /**\n * Returns the ISO 3166 alpha-2 country code (e.g. `\"US\"`, `\"IL\"`, `\"FR\"`)\n * passed to the constructor, or `undefined` if none was provided.\n */\n getCountryCode(): string | undefined {\n return this.cc;\n }\n\n /**\n * Returns the Olson timezone identifier (e.g. `\"America/Chicago\"`).\n * Alias for `getTimeZone()` from the parent `GeoLocation` class.\n */\n getTzid(): string {\n return this.getTimeZone();\n }\n\n /**\n * Returns a cached 24-hour `Intl.DateTimeFormat` (e.g. `07:41` or `20:03`)\n * configured for this location's timezone. Formatters are memoized by\n * timezone so repeated calls do not allocate.\n * @example\n * const loc = Location.lookup('Tel Aviv')!;\n * const fmt = loc.getTimeFormatter();\n * fmt.format(new Date()); // e.g. '18:42'\n */\n getTimeFormatter(): Intl.DateTimeFormat {\n return getFormatter(this.getTimeZone());\n }\n\n /**\n * Returns the optional geographic identifier passed to the constructor\n * (typically a GeoNames numeric ID or a US Zip Code string), or\n * `undefined` if none was provided.\n */\n getGeoId(): string | number | undefined {\n return this.geoid;\n }\n\n /**\n * Creates a location object from one of 60 \"classic\" Hebcal city names.\n * The following city names are supported:\n * 'Ashdod', 'Atlanta', 'Austin', 'Baghdad', 'Beer Sheva',\n * 'Berlin', 'Baltimore', 'Bogota', 'Boston', 'Budapest',\n * 'Buenos Aires', 'Buffalo', 'Chicago', 'Cincinnati', 'Cleveland',\n * 'Dallas', 'Denver', 'Detroit', 'Eilat', 'Gibraltar', 'Haifa',\n * 'Hawaii', 'Helsinki', 'Houston', 'Jerusalem', 'Johannesburg',\n * 'Kiev', 'La Paz', 'Livingston', 'Las Vegas', 'London', 'Los Angeles',\n * 'Marseilles', 'Miami', 'Minneapolis', 'Melbourne', 'Mexico City',\n * 'Montreal', 'Moscow', 'New York', 'Omaha', 'Ottawa', 'Panama City',\n * 'Paris', 'Pawtucket', 'Petach Tikvah', 'Philadelphia', 'Phoenix',\n * 'Pittsburgh', 'Providence', 'Portland', 'Saint Louis', 'Saint Petersburg',\n * 'San Diego', 'San Francisco', 'Sao Paulo', 'Seattle', 'Sydney',\n * 'Tel Aviv', 'Tiberias', 'Toronto', 'Vancouver', 'White Plains',\n * 'Washington DC', 'Worcester'\n *\n * Lookups are case-insensitive. Returns `undefined` if the name is not\n * recognized. The list can be extended with {@link Location.addLocation}.\n * @example\n * const loc = Location.lookup('San Francisco');\n * console.log(loc?.getTzid()); // 'America/Los_Angeles'\n * @param name case-insensitive classic city name\n */\n static lookup(name: string): Location | undefined {\n if (classicCities.size === 0) {\n initClassicCities();\n }\n return classicCities.get(name.toLowerCase());\n }\n\n /**\n * Returns a JSON-serialized representation of this Location.\n * Useful for debugging and structured logging.\n */\n toString(): string {\n return JSON.stringify(this);\n }\n\n /**\n * Converts a legacy Hebcal-style timezone (a numeric GMT offset plus a\n * coarse DST region) to a standard IANA/Olson timezone ID.\n *\n * This exists to migrate data from older Hebcal versions that stored\n * timezones as GMT offset + DST scheme rather than as a full tzid.\n * @example\n * Location.legacyTzToTzid(2, 'israel'); // 'Asia/Jerusalem'\n * Location.legacyTzToTzid(0, 'eu'); // 'Europe/London'\n * Location.legacyTzToTzid(0, 'none'); // 'UTC'\n * Location.legacyTzToTzid(-5, 'none'); // 'Etc/GMT-5'\n * @param tz integer, GMT offset in hours\n * @param dst 'none', 'eu', 'usa', or 'israel'\n */\n static legacyTzToTzid(tz: number, dst: string): string | undefined {\n tz = +tz;\n if (dst === 'none') {\n if (tz === 0) {\n return 'UTC';\n }\n const plus = tz > 0 ? '+' : '';\n return `Etc/GMT${plus}${tz}`;\n }\n if (tz === 2 && dst === 'israel') {\n return 'Asia/Jerusalem';\n }\n if (dst === 'eu') {\n switch (tz) {\n case -2:\n return 'Atlantic/Cape_Verde';\n case -1:\n return 'Atlantic/Azores';\n case 0:\n return 'Europe/London';\n case 1:\n return 'Europe/Paris';\n case 2:\n return 'Europe/Athens';\n default:\n break;\n }\n }\n if (dst === 'usa') {\n return ZIPCODES_TZ_MAP[String(tz * -1)];\n }\n return undefined;\n }\n\n /**\n * Converts timezone info from Zip-Codes.com to a standard Olson tzid.\n * @example\n * Location.getUsaTzid('AZ', 7, 'Y') // 'America/Denver'\n * @param state two-letter all-caps US state abbreviation like 'CA'\n * @param tz positive number, 5=America/New_York, 8=America/Los_Angeles\n * @param dst single char 'Y' or 'N'\n */\n static getUsaTzid(state: string, tz: number, dst: string): string {\n tz = +tz;\n if (tz === 10 && state === 'AK') {\n return 'America/Adak';\n }\n if (tz === 7 && state === 'AZ') {\n return dst === 'Y' ? 'America/Denver' : 'America/Phoenix';\n }\n return ZIPCODES_TZ_MAP[tz];\n }\n\n /**\n * Registers a new named location with the built-in `Location.lookup()`\n * registry. Names are stored case-insensitively. Returns `false` if a\n * location with the same (lower-cased) name is already registered, and\n * `true` if successfully added.\n *\n * Use this to extend the built-in set of ~60 classic Hebcal cities with\n * your own custom locations.\n * @example\n * const tlv = new Location(32.0853, 34.7818, true,\n * 'Asia/Tel_Aviv', 'My Office, Tel Aviv', 'IL');\n * Location.addLocation('My Office', tlv); // true\n * Location.lookup('my office')?.getTzid(); // 'Asia/Tel_Aviv'\n */\n static addLocation(cityName: string, location: Location): boolean {\n const name = cityName.toLowerCase();\n if (classicCities.has(name)) {\n return false;\n }\n classicCities.set(name, location);\n return true;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"location.js","sources":["../../../src/location.ts"],"sourcesContent":["/*\n Hebcal - A Jewish Calendar Generator\n Copyright (c) 1994-2020 Danny Sadinoff\n Portions copyright Eyal Schachter and Michael J. Radwin\n\n https://github.com/hebcal/hebcal-es6\n\n This program is free software; you can redistribute it and/or\n modify it under the terms of the GNU General Public License\n as published by the Free Software Foundation; either version 2\n of the License, or (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport {GeoLocation} from '@hebcal/noaa';\nimport citiesJson from './cities.json';\nimport QuickLRU from 'quick-lru';\n\nconst classicCities = new Map<string, Location>();\n\n// Zip-Codes.com TimeZone IDs\nconst ZIPCODES_TZ_MAP: Record<string, string> = {\n '0': 'UTC',\n '4': 'America/Puerto_Rico', // Atlantic (GMT -04:00)\n '5': 'America/New_York', // Eastern (GMT -05:00)\n '6': 'America/Chicago', // Central (GMT -06:00)\n '7': 'America/Denver', // Mountain (GMT -07:00)\n '8': 'America/Los_Angeles', // Pacific (GMT -08:00)\n '9': 'America/Anchorage', // Alaska (GMT -09:00)\n '10': 'Pacific/Honolulu', // Hawaii-Aleutian Islands (GMT -10:00)\n '11': 'Pacific/Pago_Pago', // American Samoa (GMT -11:00)\n '13': 'Pacific/Funafuti', // Marshall Islands (GMT +12:00)\n '14': 'Pacific/Guam', // Guam (GMT +10:00)\n '15': 'Pacific/Palau', // Palau (GMT +9:00)\n '16': 'Pacific/Chuuk', // Micronesia (GMT +11:00)\n} as const;\n\n/** @private */\nconst timeFormatCache = new QuickLRU<string, Intl.DateTimeFormat>({\n maxSize: 120,\n});\n\n/**\n * Gets a 24-hour time formatter (e.g. 07:41 or 20:03) from cache\n * or makes a new one if needed\n * @private\n */\nfunction getFormatter(tzid: string): Intl.DateTimeFormat {\n const fmt = timeFormatCache.get(tzid);\n if (fmt) return fmt;\n const f = new Intl.DateTimeFormat('en-US', {\n timeZone: tzid,\n hour: 'numeric',\n minute: 'numeric',\n hour12: false,\n });\n timeFormatCache.set(tzid, f);\n return f;\n}\n\nfunction initClassicCities() {\n for (const entry of citiesJson) {\n const [cityName, cc, lat, lng, tzid, elev] = entry.split('|');\n const location = new Location(\n +lat,\n +lng,\n cc === 'IL',\n tzid,\n cityName,\n cc,\n undefined,\n +elev\n );\n Location.addLocation(cityName, location);\n }\n}\n\n/**\n * Class representing a geographic location for use with candle-lighting,\n * havdalah, and zmanim calculations.\n *\n * Extends {@link GeoLocation} from `@hebcal/noaa` with Jewish-calendar\n * specific data: an Israel/Diaspora flag, ISO country code, and an optional\n * geographic identifier. Also provides {@link Location.lookup} for the 65\n * built-in \"classic\" Hebcal cities.\n *\n * @example\n * import {Location} from '@hebcal/core';\n *\n * // Create a location for a custom address\n * const loc = new Location(\n * 41.85003, // latitude\n * -87.65005, // longitude\n * false, // not in Israel\n * 'America/Chicago',\n * 'Chicago, Illinois, USA',\n * 'US'\n * );\n *\n * // Or look up a built-in classic city\n * const tlv = Location.lookup('Tel Aviv');\n */\nexport class Location extends GeoLocation {\n private readonly il: boolean;\n private readonly cc?: string;\n private readonly geoid?: string | number;\n /**\n * First-level administrative division (e.g. a US state or a French\n * region) as an abbreviation, such as `\"CA\"`. Not set by this package;\n * populated by callers that hydrate a `Location` from a geo database.\n */\n admin1?: string;\n /**\n * Full name of the first-level administrative division, such as\n * `\"California\"`. Not set by this package.\n */\n stateName?: string;\n /**\n * Which kind of lookup produced this location: `'zip'` for a US Zip Code\n * or `'geoname'` for a GeoNames city. Not set by this package.\n */\n geo?: 'zip' | 'geoname';\n /** US Zip Code, such as `\"02912\"`. Not set by this package. */\n zip?: string;\n /** Approximate population of the city. Not set by this package. */\n population?: number;\n /** City name in plain ASCII, for sorting or URL generation. Not set by this package. */\n asciiname?: string;\n\n /**\n * Initialize a Location instance\n * @param latitude - Latitude as a decimal, valid range -90 thru +90 (e.g. 41.85003)\n * @param longitude - Longitude as a decimal, valid range -180 thru +180 (e.g. -87.65005)\n * @param il - in Israel (true) or Diaspora (false)\n * @param tzid - Olson timezone ID, e.g. \"America/Chicago\"\n * @param [cityName] - optional descriptive city name\n * @param [countryCode] - ISO 3166 alpha-2 country code (e.g. \"FR\")\n * @param [geoid] - optional string or numeric geographic ID\n * @param [elevation] - in meters (default `0`)\n */\n constructor(\n latitude: number,\n longitude: number,\n il: boolean,\n tzid: string,\n cityName?: string,\n countryCode?: string,\n geoid?: string | number,\n elevation?: number\n ) {\n const lat = typeof latitude === 'number' ? latitude : parseFloat(latitude);\n if (isNaN(lat) || lat < -90 || lat > 90) {\n throw new RangeError(`Latitude ${latitude} out of range [-90,90]`);\n }\n const long = typeof longitude === 'number' ? longitude : parseFloat(longitude);\n if (isNaN(long) || long < -180 || long > 180) {\n throw new RangeError(`Longitude ${longitude} out of range [-180,180]`);\n }\n if (!tzid) {\n throw new RangeError('Invalid timezone');\n }\n const elev = typeof elevation === 'number' && elevation > 0 ? elevation : 0;\n if (cityName && typeof cityName !== 'string') {\n cityName = String(cityName);\n }\n super(cityName || null, lat, long, elev, tzid);\n this.il = Boolean(il);\n this.cc = countryCode;\n if (countryCode === 'IL') {\n this.il = true;\n }\n this.geoid = geoid;\n }\n\n /**\n * Returns `true` if this location is in Israel (uses the Israeli holiday\n * and Torah-reading schedule), `false` for the Diaspora.\n */\n getIsrael(): boolean {\n return this.il;\n }\n\n /**\n * Returns the full descriptive location name passed to the constructor,\n * or `null` if no name was provided.\n *\n * Note that the built-in classic cities are named by city alone, so\n * `getName()` and {@link getShortName} return the same string for them.\n * @example\n * const loc = new Location(41.85003, -87.65005, false,\n * 'America/Chicago', 'Chicago, Illinois, USA', 'US');\n * loc.getName(); // 'Chicago, Illinois, USA'\n * Location.lookup('San Francisco')?.getName(); // 'San Francisco'\n */\n getName(): string | null {\n return this.getLocationName();\n }\n\n /**\n * Returns the location name truncated at the first comma. Useful for\n * compact display where only the city name is desired.\n *\n * Special-cased so that US locations of the form `\"Washington, DC ...\"` or\n * `\"Washington, D.C., ...\"` keep the `DC` / `D.C.` suffix attached.\n * @example\n * const chi = new Location(41.85003, -87.65005, false,\n * 'America/Chicago', 'Chicago, Illinois, USA', 'US');\n * chi.getShortName(); // 'Chicago'\n * const dc = new Location(38.89511, -77.03637, false,\n * 'America/New_York', 'Washington, D.C., USA', 'US');\n * dc.getShortName(); // 'Washington, D.C.'\n */\n getShortName(): string | null {\n const name = this.getLocationName();\n if (!name) return name;\n const comma = name.indexOf(', ');\n if (comma === -1) return name;\n if (this.cc === 'US' && name[comma + 2] === 'D') {\n if (name[comma + 3] === 'C') {\n return name.substring(0, comma + 4);\n }\n if (name[comma + 3] === '.' && name[comma + 4] === 'C') {\n return name.substring(0, comma + 6);\n }\n }\n return name.substring(0, comma);\n }\n\n /**\n * Returns the ISO 3166 alpha-2 country code (e.g. `\"US\"`, `\"IL\"`, `\"FR\"`)\n * passed to the constructor, or `undefined` if none was provided.\n */\n getCountryCode(): string | undefined {\n return this.cc;\n }\n\n /**\n * Returns the Olson timezone identifier (e.g. `\"America/Chicago\"`).\n * Alias for `getTimeZone()` from the parent `GeoLocation` class.\n */\n getTzid(): string {\n return this.getTimeZone();\n }\n\n /**\n * Returns a cached 24-hour `Intl.DateTimeFormat` (e.g. `07:41` or `20:03`)\n * configured for this location's timezone. Formatters are memoized by\n * timezone so repeated calls do not allocate.\n * @example\n * const loc = Location.lookup('Tel Aviv')!;\n * const fmt = loc.getTimeFormatter();\n * fmt.format(new Date()); // e.g. '18:42'\n */\n getTimeFormatter(): Intl.DateTimeFormat {\n return getFormatter(this.getTimeZone());\n }\n\n /**\n * Returns the optional geographic identifier passed to the constructor\n * (typically a GeoNames numeric ID or a US Zip Code string), or\n * `undefined` if none was provided.\n */\n getGeoId(): string | number | undefined {\n return this.geoid;\n }\n\n /**\n * Creates a location object from one of 65 \"classic\" Hebcal city names.\n * The following city names are supported:\n * 'Ashdod', 'Atlanta', 'Austin', 'Baghdad', 'Beer Sheva',\n * 'Berlin', 'Baltimore', 'Bogota', 'Boston', 'Budapest',\n * 'Buenos Aires', 'Buffalo', 'Chicago', 'Cincinnati', 'Cleveland',\n * 'Dallas', 'Denver', 'Detroit', 'Eilat', 'Gibraltar', 'Haifa',\n * 'Hawaii', 'Helsinki', 'Houston', 'Jerusalem', 'Johannesburg',\n * 'Kiev', 'La Paz', 'Livingston', 'Las Vegas', 'London', 'Los Angeles',\n * 'Marseilles', 'Miami', 'Minneapolis', 'Melbourne', 'Mexico City',\n * 'Montreal', 'Moscow', 'New York', 'Omaha', 'Ottawa', 'Panama City',\n * 'Paris', 'Pawtucket', 'Petach Tikvah', 'Philadelphia', 'Phoenix',\n * 'Pittsburgh', 'Providence', 'Portland', 'Saint Louis', 'Saint Petersburg',\n * 'San Diego', 'San Francisco', 'Sao Paulo', 'Seattle', 'Sydney',\n * 'Tel Aviv', 'Tiberias', 'Toronto', 'Vancouver', 'White Plains',\n * 'Washington DC', 'Worcester'\n *\n * Lookups are case-insensitive. Returns `undefined` if the name is not\n * recognized. The list can be extended with {@link Location.addLocation}.\n * @example\n * const loc = Location.lookup('San Francisco');\n * console.log(loc?.getTzid()); // 'America/Los_Angeles'\n * @param name case-insensitive classic city name\n */\n static lookup(name: string): Location | undefined {\n if (classicCities.size === 0) {\n initClassicCities();\n }\n return classicCities.get(name.toLowerCase());\n }\n\n /**\n * Returns a JSON-serialized representation of this Location.\n * Useful for debugging and structured logging.\n */\n toString(): string {\n return JSON.stringify(this);\n }\n\n /**\n * Converts a legacy Hebcal-style timezone (a numeric GMT offset plus a\n * coarse DST region) to a standard IANA/Olson timezone ID.\n *\n * This exists to migrate data from older Hebcal versions that stored\n * timezones as GMT offset + DST scheme rather than as a full tzid.\n * @example\n * Location.legacyTzToTzid(2, 'israel'); // 'Asia/Jerusalem'\n * Location.legacyTzToTzid(0, 'eu'); // 'Europe/London'\n * Location.legacyTzToTzid(0, 'none'); // 'UTC'\n * Location.legacyTzToTzid(-5, 'none'); // 'Etc/GMT-5'\n * @param tz integer, GMT offset in hours\n * @param dst 'none', 'eu', 'usa', or 'israel'\n */\n static legacyTzToTzid(tz: number, dst: string): string | undefined {\n tz = +tz;\n if (dst === 'none') {\n if (tz === 0) {\n return 'UTC';\n }\n const plus = tz > 0 ? '+' : '';\n return `Etc/GMT${plus}${tz}`;\n }\n if (tz === 2 && dst === 'israel') {\n return 'Asia/Jerusalem';\n }\n if (dst === 'eu') {\n switch (tz) {\n case -2:\n return 'Atlantic/Cape_Verde';\n case -1:\n return 'Atlantic/Azores';\n case 0:\n return 'Europe/London';\n case 1:\n return 'Europe/Paris';\n case 2:\n return 'Europe/Athens';\n default:\n break;\n }\n }\n if (dst === 'usa') {\n return ZIPCODES_TZ_MAP[String(tz * -1)];\n }\n return undefined;\n }\n\n /**\n * Converts timezone info from Zip-Codes.com to a standard Olson tzid.\n * @example\n * Location.getUsaTzid('AZ', 7, 'Y') // 'America/Denver'\n * @param state two-letter all-caps US state abbreviation like 'CA'\n * @param tz positive number, 5=America/New_York, 8=America/Los_Angeles\n * @param dst single char 'Y' or 'N'\n */\n static getUsaTzid(state: string, tz: number, dst: string): string {\n tz = +tz;\n if (tz === 10 && state === 'AK') {\n return 'America/Adak';\n }\n if (tz === 7 && state === 'AZ') {\n return dst === 'Y' ? 'America/Denver' : 'America/Phoenix';\n }\n return ZIPCODES_TZ_MAP[tz];\n }\n\n /**\n * Registers a new named location with the built-in `Location.lookup()`\n * registry. Names are stored case-insensitively. Returns `false` if a\n * location with the same (lower-cased) name is already registered, and\n * `true` if successfully added.\n *\n * Use this to extend the built-in set of 65 classic Hebcal cities with\n * your own custom locations.\n * @example\n * const tlv = new Location(32.0853, 34.7818, true,\n * 'Asia/Jerusalem', 'My Office, Tel Aviv', 'IL');\n * Location.addLocation('My Office', tlv); // true\n * Location.lookup('my office')?.getTzid(); // 'Asia/Jerusalem'\n * @param cityName name to register the location under (case insensitive)\n * @param location the `Location` instance to register\n */\n static addLocation(cityName: string, location: Location): boolean {\n const name = cityName.toLowerCase();\n if (classicCities.has(name)) {\n return false;\n }\n classicCities.set(name, location);\n return true;\n }\n}\n"],"names":[],"mappings":"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"}
|
package/dist/esm/modern.js
CHANGED
package/dist/esm/molad.d.ts
CHANGED
|
@@ -16,8 +16,8 @@ import './locale';
|
|
|
16
16
|
* import {Molad, months} from '@hebcal/core';
|
|
17
17
|
* const m = new Molad(5784, months.NISAN);
|
|
18
18
|
* console.log(m.getMonthName()); // 'Nisan'
|
|
19
|
-
* console.log(m.getHour(), m.getMinutes(), m.getChalakim()); //
|
|
20
|
-
* console.log(m.render('en')); // 'Molad Nisan:
|
|
19
|
+
* console.log(m.getHour(), m.getMinutes(), m.getChalakim()); // 22 57 7
|
|
20
|
+
* console.log(m.render('en')); // 'Molad Nisan: Monday, 10:57pm and 7 chalakim'
|
|
21
21
|
*/
|
|
22
22
|
export declare class Molad {
|
|
23
23
|
private readonly m;
|
|
@@ -69,17 +69,21 @@ export declare class Molad {
|
|
|
69
69
|
*/
|
|
70
70
|
getChalakim(): number;
|
|
71
71
|
/**
|
|
72
|
-
* Returns the
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
72
|
+
* Returns the moment of the molad as a `Temporal.ZonedDateTime` in the `UTC` zone.
|
|
73
|
+
*
|
|
74
|
+
* The molad is computed in Jerusalem *standard* time and then converted, so the
|
|
75
|
+
* returned instant is correct year-round; only the zone of the returned object
|
|
76
|
+
* is `UTC`. This method subtracts 20.94 minutes (20 minutes and 56.496 seconds)
|
|
77
|
+
* from the computed time — Har Habayis, at longitude 35.2354°, is 5.2354° away
|
|
78
|
+
* from the multiple-of-15 timezone longitude — to get to standard time. Daylight
|
|
79
|
+
* savings time is intentionally not applied; adjust when formatting for display.
|
|
76
80
|
*
|
|
77
81
|
* The returned value is cached after the first call.
|
|
78
82
|
* @example
|
|
79
83
|
* import {Molad, months} from '@hebcal/core';
|
|
80
84
|
* const m = new Molad(5784, months.NISAN);
|
|
81
85
|
* const zdt = m.getInstant();
|
|
82
|
-
* console.log(zdt.toString()); //
|
|
86
|
+
* console.log(zdt.toString()); // '2024-04-08T20:36:26.837+00:00[UTC]'
|
|
83
87
|
* @return the `Temporal.ZonedDateTime` representing the moment of the molad
|
|
84
88
|
*/
|
|
85
89
|
getInstant(): Temporal.ZonedDateTime;
|
|
@@ -92,9 +96,9 @@ export declare class Molad {
|
|
|
92
96
|
*/
|
|
93
97
|
getTchilasZmanKidushLevana3Days(): Temporal.ZonedDateTime;
|
|
94
98
|
/**
|
|
95
|
-
* Returns the earliest time of Kiddush Levana calculated as 7 days after the molad as mentioned by the
|
|
96
|
-
*
|
|
97
|
-
*
|
|
99
|
+
* Returns the earliest time of Kiddush Levana calculated as 7 days after the molad as mentioned by the
|
|
100
|
+
* [Mechaber](https://en.wikipedia.org/wiki/Yosef_Karo). See the
|
|
101
|
+
* [Bach's](https://en.wikipedia.org/wiki/Yoel_Sirkis) opinion on this time. This method returns the time
|
|
98
102
|
* even if it is during the day when _Kiddush Levana_ can't be said. Callers of this method should consider
|
|
99
103
|
* displaying the next _tzais_ if the zman is between _alos_ and _tzais_.
|
|
100
104
|
*
|
|
@@ -102,8 +106,8 @@ export declare class Molad {
|
|
|
102
106
|
*/
|
|
103
107
|
getTchilasZmanKidushLevana7Days(): Temporal.ZonedDateTime;
|
|
104
108
|
/**
|
|
105
|
-
* Returns the latest time of Kiddush Levana according to the
|
|
106
|
-
*
|
|
109
|
+
* Returns the latest time of Kiddush Levana according to the
|
|
110
|
+
* [Maharil's](https://en.wikipedia.org/wiki/Yaakov_ben_Moshe_Levi_Moelin) opinion that it is calculated as
|
|
107
111
|
* halfway between molad and molad. This adds half the 29 days, 12 hours and 793 chalakim time between molad and
|
|
108
112
|
* molad (14 days, 18 hours, 22 minutes and 666 milliseconds) to the month's molad. This method returns the time
|
|
109
113
|
* even if it is during the day when _Kiddush Levana_ can't be said. Callers of this method should consider
|
|
@@ -115,12 +119,12 @@ export declare class Molad {
|
|
|
115
119
|
/**
|
|
116
120
|
* Returns the latest time of Kiddush Levana calculated as 15 days after the molad. This is the opinion brought down
|
|
117
121
|
* in the Shulchan Aruch (Orach Chaim 426). It should be noted that some opinions hold that the
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
* {@link Molad.getSofZmanKidushLevanaBetweenMoldos
|
|
122
|
+
* [Rema](https://en.wikipedia.org/wiki/Moses_Isserles) who brings down the opinion of the
|
|
123
|
+
* [Maharil's](https://en.wikipedia.org/wiki/Yaakov_ben_Moshe_Levi_Moelin) of calculating
|
|
124
|
+
* {@link Molad.getSofZmanKidushLevanaBetweenMoldos | half way between molad and molad} is of the opinion that Mechaber
|
|
121
125
|
* agrees to his opinion. Also see the Aruch Hashulchan. For additional details on the subject, See Rabbi Dovid
|
|
122
|
-
* Heber's very detailed writeup in Siman Daled (chapter 4) of
|
|
123
|
-
*
|
|
126
|
+
* Heber's very detailed writeup in Siman Daled (chapter 4) of
|
|
127
|
+
* [Shaarei Zmanim](https://www.worldcat.org/oclc/461326125). This method returns the time even if it is during
|
|
124
128
|
* the day when _Kiddush Levana_ can't be said. Callers of this method should consider displaying _alos_
|
|
125
129
|
* before this time if the zman is between _alos_ and _tzais_.
|
|
126
130
|
*
|
|
@@ -133,14 +137,16 @@ export declare class Molad {
|
|
|
133
137
|
* month name, day of week, hour : minute, and chalakim if non-zero.
|
|
134
138
|
*
|
|
135
139
|
* Time format honors `options.hour12` and `options.location` (12-hour vs.
|
|
136
|
-
* 24-hour); see {@link
|
|
140
|
+
* 24-hour); see {@link reformatTimeStr}.
|
|
137
141
|
* @example
|
|
138
142
|
* import {Molad, months} from '@hebcal/core';
|
|
139
143
|
* const m = new Molad(5784, months.NISAN);
|
|
140
144
|
* m.render('en', {hour12: true});
|
|
141
|
-
* // => 'Molad Nisan:
|
|
145
|
+
* // => 'Molad Nisan: Monday, 10:57pm and 7 chalakim'
|
|
146
|
+
* m.render('en', {hour12: false});
|
|
147
|
+
* // => 'Molad Nisan: Monday, 22:57 and 7 chalakim'
|
|
142
148
|
* m.render('he');
|
|
143
|
-
* // => 'מוֹלָד נִיסָן יִהְיֶה בַּיּוֹם שֵׁנִי בשָׁבוּעַ, …'
|
|
149
|
+
* // => 'מוֹלָד הָלְּבָנָה נִיסָן יִהְיֶה בַּיּוֹם שֵׁנִי בשָׁבוּעַ, …'
|
|
144
150
|
* @param [locale] Optional locale name (defaults to empty locale)
|
|
145
151
|
* @param options used for time formatting (12-hour vs 24-hour)
|
|
146
152
|
*/
|
package/dist/esm/molad.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @hebcal/core v6.
|
|
1
|
+
/*! @hebcal/core v6.9.0, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
|
|
2
2
|
import 'temporal-polyfill/global';
|
|
3
3
|
import { Event, flags } from './event.js';
|
|
4
4
|
import { HDate, Locale, pad2 } from '@hebcal/hdate';
|
|
@@ -69,8 +69,8 @@ function getHebrewTimeOfDay(hour) {
|
|
|
69
69
|
* import {Molad, months} from '@hebcal/core';
|
|
70
70
|
* const m = new Molad(5784, months.NISAN);
|
|
71
71
|
* console.log(m.getMonthName()); // 'Nisan'
|
|
72
|
-
* console.log(m.getHour(), m.getMinutes(), m.getChalakim()); //
|
|
73
|
-
* console.log(m.render('en')); // 'Molad Nisan:
|
|
72
|
+
* console.log(m.getHour(), m.getMinutes(), m.getChalakim()); // 22 57 7
|
|
73
|
+
* console.log(m.render('en')); // 'Molad Nisan: Monday, 10:57pm and 7 chalakim'
|
|
74
74
|
*/
|
|
75
75
|
class Molad {
|
|
76
76
|
m;
|
|
@@ -142,17 +142,21 @@ class Molad {
|
|
|
142
142
|
return this.m.chalakim;
|
|
143
143
|
}
|
|
144
144
|
/**
|
|
145
|
-
* Returns the
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
145
|
+
* Returns the moment of the molad as a `Temporal.ZonedDateTime` in the `UTC` zone.
|
|
146
|
+
*
|
|
147
|
+
* The molad is computed in Jerusalem *standard* time and then converted, so the
|
|
148
|
+
* returned instant is correct year-round; only the zone of the returned object
|
|
149
|
+
* is `UTC`. This method subtracts 20.94 minutes (20 minutes and 56.496 seconds)
|
|
150
|
+
* from the computed time — Har Habayis, at longitude 35.2354°, is 5.2354° away
|
|
151
|
+
* from the multiple-of-15 timezone longitude — to get to standard time. Daylight
|
|
152
|
+
* savings time is intentionally not applied; adjust when formatting for display.
|
|
149
153
|
*
|
|
150
154
|
* The returned value is cached after the first call.
|
|
151
155
|
* @example
|
|
152
156
|
* import {Molad, months} from '@hebcal/core';
|
|
153
157
|
* const m = new Molad(5784, months.NISAN);
|
|
154
158
|
* const zdt = m.getInstant();
|
|
155
|
-
* console.log(zdt.toString()); //
|
|
159
|
+
* console.log(zdt.toString()); // '2024-04-08T20:36:26.837+00:00[UTC]'
|
|
156
160
|
* @return the `Temporal.ZonedDateTime` representing the moment of the molad
|
|
157
161
|
*/
|
|
158
162
|
getInstant() {
|
|
@@ -171,9 +175,9 @@ class Molad {
|
|
|
171
175
|
return zdt.add({ hours: 72 });
|
|
172
176
|
}
|
|
173
177
|
/**
|
|
174
|
-
* Returns the earliest time of Kiddush Levana calculated as 7 days after the molad as mentioned by the
|
|
175
|
-
*
|
|
176
|
-
*
|
|
178
|
+
* Returns the earliest time of Kiddush Levana calculated as 7 days after the molad as mentioned by the
|
|
179
|
+
* [Mechaber](https://en.wikipedia.org/wiki/Yosef_Karo). See the
|
|
180
|
+
* [Bach's](https://en.wikipedia.org/wiki/Yoel_Sirkis) opinion on this time. This method returns the time
|
|
177
181
|
* even if it is during the day when _Kiddush Levana_ can't be said. Callers of this method should consider
|
|
178
182
|
* displaying the next _tzais_ if the zman is between _alos_ and _tzais_.
|
|
179
183
|
*
|
|
@@ -184,8 +188,8 @@ class Molad {
|
|
|
184
188
|
return zdt.add({ hours: 168 });
|
|
185
189
|
}
|
|
186
190
|
/**
|
|
187
|
-
* Returns the latest time of Kiddush Levana according to the
|
|
188
|
-
*
|
|
191
|
+
* Returns the latest time of Kiddush Levana according to the
|
|
192
|
+
* [Maharil's](https://en.wikipedia.org/wiki/Yaakov_ben_Moshe_Levi_Moelin) opinion that it is calculated as
|
|
189
193
|
* halfway between molad and molad. This adds half the 29 days, 12 hours and 793 chalakim time between molad and
|
|
190
194
|
* molad (14 days, 18 hours, 22 minutes and 666 milliseconds) to the month's molad. This method returns the time
|
|
191
195
|
* even if it is during the day when _Kiddush Levana_ can't be said. Callers of this method should consider
|
|
@@ -208,12 +212,12 @@ class Molad {
|
|
|
208
212
|
/**
|
|
209
213
|
* Returns the latest time of Kiddush Levana calculated as 15 days after the molad. This is the opinion brought down
|
|
210
214
|
* in the Shulchan Aruch (Orach Chaim 426). It should be noted that some opinions hold that the
|
|
211
|
-
*
|
|
212
|
-
*
|
|
213
|
-
* {@link Molad.getSofZmanKidushLevanaBetweenMoldos
|
|
215
|
+
* [Rema](https://en.wikipedia.org/wiki/Moses_Isserles) who brings down the opinion of the
|
|
216
|
+
* [Maharil's](https://en.wikipedia.org/wiki/Yaakov_ben_Moshe_Levi_Moelin) of calculating
|
|
217
|
+
* {@link Molad.getSofZmanKidushLevanaBetweenMoldos | half way between molad and molad} is of the opinion that Mechaber
|
|
214
218
|
* agrees to his opinion. Also see the Aruch Hashulchan. For additional details on the subject, See Rabbi Dovid
|
|
215
|
-
* Heber's very detailed writeup in Siman Daled (chapter 4) of
|
|
216
|
-
*
|
|
219
|
+
* Heber's very detailed writeup in Siman Daled (chapter 4) of
|
|
220
|
+
* [Shaarei Zmanim](https://www.worldcat.org/oclc/461326125). This method returns the time even if it is during
|
|
217
221
|
* the day when _Kiddush Levana_ can't be said. Callers of this method should consider displaying _alos_
|
|
218
222
|
* before this time if the zman is between _alos_ and _tzais_.
|
|
219
223
|
*
|
|
@@ -230,14 +234,16 @@ class Molad {
|
|
|
230
234
|
* month name, day of week, hour : minute, and chalakim if non-zero.
|
|
231
235
|
*
|
|
232
236
|
* Time format honors `options.hour12` and `options.location` (12-hour vs.
|
|
233
|
-
* 24-hour); see {@link
|
|
237
|
+
* 24-hour); see {@link reformatTimeStr}.
|
|
234
238
|
* @example
|
|
235
239
|
* import {Molad, months} from '@hebcal/core';
|
|
236
240
|
* const m = new Molad(5784, months.NISAN);
|
|
237
241
|
* m.render('en', {hour12: true});
|
|
238
|
-
* // => 'Molad Nisan:
|
|
242
|
+
* // => 'Molad Nisan: Monday, 10:57pm and 7 chalakim'
|
|
243
|
+
* m.render('en', {hour12: false});
|
|
244
|
+
* // => 'Molad Nisan: Monday, 22:57 and 7 chalakim'
|
|
239
245
|
* m.render('he');
|
|
240
|
-
* // => 'מוֹלָד נִיסָן יִהְיֶה בַּיּוֹם שֵׁנִי בשָׁבוּעַ, …'
|
|
246
|
+
* // => 'מוֹלָד הָלְּבָנָה נִיסָן יִהְיֶה בַּיּוֹם שֵׁנִי בשָׁבוּעַ, …'
|
|
241
247
|
* @param [locale] Optional locale name (defaults to empty locale)
|
|
242
248
|
* @param options used for time formatting (12-hour vs 24-hour)
|
|
243
249
|
*/
|
package/dist/esm/molad.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"molad.js","sources":["../../../src/molad.ts"],"sourcesContent":["import 'temporal-polyfill/global';\nimport {Event, flags} from './event';\nimport {CalOptions} from './CalOptions';\nimport {HDate, Locale, pad2} from '@hebcal/hdate';\nimport {reformatTimeStr} from './reformatTimeStr';\nimport {MoladBase, calculateMolad} from './moladBase';\nimport {getMoladAsDate} from './moladDate';\nimport {smartApostrophe} from './string';\nimport './locale'; // Adds Hebrew and Ashkenazic translations\n\nconst enDoW = [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n] as const;\n\nconst heDayNames = [\n 'רִאשׁוֹן',\n 'שֵׁנִי',\n 'שְׁלִישִׁי',\n 'רְבִיעִי',\n 'חֲמִישִׁי',\n 'שִׁישִּׁי',\n 'שַׁבָּת',\n] as const;\n\nconst frDoW = [\n 'Dimanche',\n 'Lundi',\n 'Mardi',\n 'Mercredi',\n 'Jeudi',\n 'Vendredi',\n 'Samedi',\n] as const;\nconst night = 'בַּלַּ֥יְלָה';\n\nfunction getDayNames(locale?: string): readonly string[] {\n if (Locale.isHebrewLocale(locale)) {\n return heDayNames;\n }\n if (locale === 'fr') {\n return frDoW;\n }\n return enDoW;\n}\n\nfunction getHebrewTimeOfDay(hour: number): string {\n if (hour < 5) return night;\n if (hour < 12) return 'בַּבֹּקֶר';\n if (hour < 17) return 'בַּצׇּהֳרַיִים';\n if (hour < 21) return 'בָּעֶרֶב';\n return night;\n}\n\n/**\n * Represents a *molad* — the calculated moment when the new moon is \"born\"\n * for a given Hebrew month.\n *\n * The molad is announced in synagogue on Shabbat Mevarchim (the Shabbat\n * before Rosh Chodesh) and is the anchor point for Kiddush Levana zmanim.\n * Calculations use the traditional chalakim arithmetic\n * (1 hour = 1080 chalakim) anchored to *Molad Tohu BaHaRaD*.\n *\n * @example\n * import {Molad, months} from '@hebcal/core';\n * const m = new Molad(5784, months.NISAN);\n * console.log(m.getMonthName()); // 'Nisan'\n * console.log(m.getHour(), m.getMinutes(), m.getChalakim()); // e.g. 1 31 12\n * console.log(m.render('en')); // 'Molad Nisan: Mon, 1:31am and 12 chalakim'\n */\nexport class Molad {\n private readonly m: MoladBase;\n private readonly year: number;\n private readonly month: number;\n private instant?: Temporal.ZonedDateTime;\n\n /**\n * Calculates the molad for a given Hebrew year and month.\n * @param year Hebrew year\n * @param month 1=NISAN, 7=TISHREI (uses Nisan-based numbering)\n */\n constructor(year: number, month: number) {\n this.m = calculateMolad(year, month);\n this.year = year;\n this.month = month;\n }\n /**\n * The exact Hebrew date of the molad, which often falls on the\n * 28th or 30th of the preceeding month, occasionally on the first of the\n * month, and in extremely rare circumstances the 27th of the month.\n * - Molad Shevat 5541 occured on 27 Tevet / 1781-01-24T19:57:20.170Z\n * - Molad Shevat 5788 will occur on 27 Tevet / 2028-01-26T19:07:03.504Z\n * - Molad Nissan 5866 will occur on 27 Adar II / 2106-04-03T21:08:46.837Z\n */\n getMoladDate(): HDate {\n return this.m.hdate;\n }\n /**\n * The year of the molad (as constructed)\n */\n getYear(): number {\n return this.year;\n }\n /**\n * The month (1=NISSAN, 7=TISHREI) as constructed\n */\n getMonth(): number {\n return this.month;\n }\n /**\n * Returns a transliterated string name of the molad's Hebrew month,\n * for example 'Elul' or 'Cheshvan'.\n */\n getMonthName(): string {\n return HDate.getMonthName(this.month, this.year);\n }\n /**\n * @returns Day of Week (0=Sunday, 6=Saturday)\n */\n getDow(): number {\n return this.m.hdate.getDay();\n }\n /**\n * @returns hour of day (0-23)\n */\n getHour(): number {\n return this.m.hour;\n }\n /**\n * @returns minutes past hour (0-59)\n */\n getMinutes(): number {\n return this.m.minutes;\n }\n /**\n * @returns parts of a minute (0-17)\n */\n getChalakim(): number {\n return this.m.chalakim;\n }\n /**\n * Returns the molad in Standard Time in Yerushalayim as a `Temporal.ZonedDateTime`.\n * This method subtracts 20.94 minutes (20 minutes and 56.496 seconds) from the computed time (Har Habayis with a longitude\n * of 35.2354° is 5.2354° away from the %15 timezone longitude) to get to standard time. This method\n * intentionally uses standard time and not daylight savings time.\n *\n * The returned value is cached after the first call.\n * @example\n * import {Molad, months} from '@hebcal/core';\n * const m = new Molad(5784, months.NISAN);\n * const zdt = m.getInstant();\n * console.log(zdt.toString()); // e.g. '2024-04-08T17:21:13.333+00:00[UTC]'\n * @return the `Temporal.ZonedDateTime` representing the moment of the molad\n */\n getInstant(): Temporal.ZonedDateTime {\n this.instant ??= getMoladAsDate(this.m);\n return this.instant;\n }\n /**\n * Returns the earliest time of _Kiddush Levana_ calculated as 3 days after the molad. This method returns the time\n * even if it is during the day when _Kiddush Levana_ can't be said. Callers of this method should consider\n * displaying the next _tzais_ if the zman is between _alos_ and _tzais_.\n *\n * @return the Temporal.ZonedDateTime representing the moment 3 days after the molad.\n */\n getTchilasZmanKidushLevana3Days(): Temporal.ZonedDateTime {\n const zdt = this.getInstant();\n return zdt.add({hours: 72});\n }\n\n /**\n * Returns the earliest time of Kiddush Levana calculated as 7 days after the molad as mentioned by the <a\n * href=\"https://en.wikipedia.org/wiki/Yosef_Karo\">Mechaber</a>. See the <a\n * href=\"https://en.wikipedia.org/wiki/Yoel_Sirkis\">Bach's</a> opinion on this time. This method returns the time\n * even if it is during the day when _Kiddush Levana_ can't be said. Callers of this method should consider\n * displaying the next _tzais_ if the zman is between _alos_ and _tzais_.\n *\n * @return the Temporal.ZonedDateTime representing the moment 7 days after the molad.\n */\n getTchilasZmanKidushLevana7Days(): Temporal.ZonedDateTime {\n const zdt = this.getInstant();\n return zdt.add({hours: 168});\n }\n\n /**\n * Returns the latest time of Kiddush Levana according to the <a\n * href=\"https://en.wikipedia.org/wiki/Yaakov_ben_Moshe_Levi_Moelin\">Maharil's</a> opinion that it is calculated as\n * halfway between molad and molad. This adds half the 29 days, 12 hours and 793 chalakim time between molad and\n * molad (14 days, 18 hours, 22 minutes and 666 milliseconds) to the month's molad. This method returns the time\n * even if it is during the day when _Kiddush Levana_ can't be said. Callers of this method should consider\n * displaying _alos_ before this time if the zman is between _alos_ and _tzais_.\n *\n * @return the Temporal.ZonedDateTime representing the moment halfway between molad and molad.\n */\n getSofZmanKidushLevanaBetweenMoldos(): Temporal.ZonedDateTime {\n const zdt = this.getInstant();\n // add half the time between molad and molad (half of 29 days, 12 hours and 793 chalakim (44 minutes, 3.3\n // seconds), or 14 days, 18 hours, 22 minutes and 666 milliseconds). Add it as hours, not days, to avoid\n // DST/ST crossover issues.\n return zdt.add({\n hours: 24 * 14 + 18,\n minutes: 22,\n seconds: 1,\n milliseconds: 666,\n });\n }\n\n /**\n * Returns the latest time of Kiddush Levana calculated as 15 days after the molad. This is the opinion brought down\n * in the Shulchan Aruch (Orach Chaim 426). It should be noted that some opinions hold that the\n * <a href=\"https://en.wikipedia.org/wiki/Moses_Isserles\">Rema</a> who brings down the opinion of the <a\n * href=\"https://en.wikipedia.org/wiki/Yaakov_ben_Moshe_Levi_Moelin\">Maharil's</a> of calculating\n * {@link Molad.getSofZmanKidushLevanaBetweenMoldos() half way between molad and mold} is of the opinion that Mechaber\n * agrees to his opinion. Also see the Aruch Hashulchan. For additional details on the subject, See Rabbi Dovid\n * Heber's very detailed writeup in Siman Daled (chapter 4) of <a\n * href=\"https://www.worldcat.org/oclc/461326125\">Shaarei Zmanim</a>. This method returns the time even if it is during\n * the day when _Kiddush Levana_ can't be said. Callers of this method should consider displaying _alos_\n * before this time if the zman is between _alos_ and _tzais_.\n *\n * @return the Temporal.ZonedDateTime representing the moment 15 days after the molad.\n */\n getSofZmanKidushLevana15Days(): Temporal.ZonedDateTime {\n const zdt = this.getInstant();\n // 15 days after the molad. Add it as hours, not days, to avoid DST/ST crossover issues.\n return zdt.add({hours: 24 * 15});\n }\n\n /**\n * Returns a human-readable, localized string announcing the molad —\n * suitable for use on Shabbat Mevarchim. The format includes the Hebrew\n * month name, day of week, hour : minute, and chalakim if non-zero.\n *\n * Time format honors `options.hour12` and `options.location` (12-hour vs.\n * 24-hour); see {@link HebrewCalendar.reformatTimeStr}.\n * @example\n * import {Molad, months} from '@hebcal/core';\n * const m = new Molad(5784, months.NISAN);\n * m.render('en', {hour12: true});\n * // => 'Molad Nisan: Mon, 7:21pm and 6 chalakim'\n * m.render('he');\n * // => 'מוֹלָד נִיסָן יִהְיֶה בַּיּוֹם שֵׁנִי בשָׁבוּעַ, …'\n * @param [locale] Optional locale name (defaults to empty locale)\n * @param options used for time formatting (12-hour vs 24-hour)\n */\n render(locale?: string, options?: CalOptions): string {\n const monthName = Locale.gettext(this.getMonthName(), locale);\n const dayNames = getDayNames(locale);\n const dow = dayNames[this.getDow()];\n const minutes = this.getMinutes();\n const hour = this.getHour();\n const chalakim = this.getChalakim();\n const moladStr = Locale.gettext('Molad', locale);\n const minutesStr = Locale.lookupTranslation('min', locale) ?? 'minutes';\n const chalakimStr = Locale.gettext('chalakim', locale);\n const and = Locale.gettext('and', locale);\n if (Locale.isHebrewLocale(locale)) {\n const ampm = getHebrewTimeOfDay(hour);\n let result =\n `${moladStr} ${monthName} יִהְיֶה בַּיּוֹם ${dow} בשָׁבוּעַ, ` +\n `בְּשָׁעָה ${hour} ${ampm}, ` +\n `ו-${minutes} ${minutesStr}`;\n if (chalakim !== 0) {\n result += ` ו-${chalakim} ${chalakimStr}`;\n }\n if (locale!.toLocaleLowerCase() === 'he-x-nonikud') {\n return Locale.hebrewStripNikkud(result);\n }\n return result;\n }\n const fmtTime = reformatTimeStr(`${hour}:${pad2(minutes)}`, 'pm', options);\n const month = smartApostrophe(monthName);\n const result = `${moladStr} ${month}: ${dow}, ${fmtTime}`;\n if (chalakim === 0) {\n return result;\n }\n return result + ` ${and} ${chalakim} ${chalakimStr}`;\n }\n}\n\n/** Represents a Molad announcement on Shabbat Mevarchim */\nexport class MoladEvent extends Event {\n readonly molad: Molad;\n private readonly options: CalOptions;\n /**\n * @param date Hebrew date event occurs\n * @param hyear molad year\n * @param hmonth molad month\n * @param options\n */\n constructor(date: HDate, hyear: number, hmonth: number, options: CalOptions) {\n const m = new Molad(hyear, hmonth);\n const monthName = m.getMonthName();\n super(date, `Molad ${monthName} ${hyear}`, flags.MOLAD);\n this.molad = m;\n this.options = options;\n }\n /**\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n render(locale?: string): string {\n return this.molad.render(locale, this.options);\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"molad.js","sources":["../../../src/molad.ts"],"sourcesContent":["import 'temporal-polyfill/global';\nimport {Event, flags} from './event';\nimport {CalOptions} from './CalOptions';\nimport {HDate, Locale, pad2} from '@hebcal/hdate';\nimport {reformatTimeStr} from './reformatTimeStr';\nimport {MoladBase, calculateMolad} from './moladBase';\nimport {getMoladAsDate} from './moladDate';\nimport {smartApostrophe} from './string';\nimport './locale'; // Adds Hebrew and Ashkenazic translations\n\nconst enDoW = [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n] as const;\n\nconst heDayNames = [\n 'רִאשׁוֹן',\n 'שֵׁנִי',\n 'שְׁלִישִׁי',\n 'רְבִיעִי',\n 'חֲמִישִׁי',\n 'שִׁישִּׁי',\n 'שַׁבָּת',\n] as const;\n\nconst frDoW = [\n 'Dimanche',\n 'Lundi',\n 'Mardi',\n 'Mercredi',\n 'Jeudi',\n 'Vendredi',\n 'Samedi',\n] as const;\nconst night = 'בַּלַּ֥יְלָה';\n\nfunction getDayNames(locale?: string): readonly string[] {\n if (Locale.isHebrewLocale(locale)) {\n return heDayNames;\n }\n if (locale === 'fr') {\n return frDoW;\n }\n return enDoW;\n}\n\nfunction getHebrewTimeOfDay(hour: number): string {\n if (hour < 5) return night;\n if (hour < 12) return 'בַּבֹּקֶר';\n if (hour < 17) return 'בַּצׇּהֳרַיִים';\n if (hour < 21) return 'בָּעֶרֶב';\n return night;\n}\n\n/**\n * Represents a *molad* — the calculated moment when the new moon is \"born\"\n * for a given Hebrew month.\n *\n * The molad is announced in synagogue on Shabbat Mevarchim (the Shabbat\n * before Rosh Chodesh) and is the anchor point for Kiddush Levana zmanim.\n * Calculations use the traditional chalakim arithmetic\n * (1 hour = 1080 chalakim) anchored to *Molad Tohu BaHaRaD*.\n *\n * @example\n * import {Molad, months} from '@hebcal/core';\n * const m = new Molad(5784, months.NISAN);\n * console.log(m.getMonthName()); // 'Nisan'\n * console.log(m.getHour(), m.getMinutes(), m.getChalakim()); // 22 57 7\n * console.log(m.render('en')); // 'Molad Nisan: Monday, 10:57pm and 7 chalakim'\n */\nexport class Molad {\n private readonly m: MoladBase;\n private readonly year: number;\n private readonly month: number;\n private instant?: Temporal.ZonedDateTime;\n\n /**\n * Calculates the molad for a given Hebrew year and month.\n * @param year Hebrew year\n * @param month 1=NISAN, 7=TISHREI (uses Nisan-based numbering)\n */\n constructor(year: number, month: number) {\n this.m = calculateMolad(year, month);\n this.year = year;\n this.month = month;\n }\n /**\n * The exact Hebrew date of the molad, which often falls on the\n * 28th or 30th of the preceeding month, occasionally on the first of the\n * month, and in extremely rare circumstances the 27th of the month.\n * - Molad Shevat 5541 occured on 27 Tevet / 1781-01-24T19:57:20.170Z\n * - Molad Shevat 5788 will occur on 27 Tevet / 2028-01-26T19:07:03.504Z\n * - Molad Nissan 5866 will occur on 27 Adar II / 2106-04-03T21:08:46.837Z\n */\n getMoladDate(): HDate {\n return this.m.hdate;\n }\n /**\n * The year of the molad (as constructed)\n */\n getYear(): number {\n return this.year;\n }\n /**\n * The month (1=NISSAN, 7=TISHREI) as constructed\n */\n getMonth(): number {\n return this.month;\n }\n /**\n * Returns a transliterated string name of the molad's Hebrew month,\n * for example 'Elul' or 'Cheshvan'.\n */\n getMonthName(): string {\n return HDate.getMonthName(this.month, this.year);\n }\n /**\n * @returns Day of Week (0=Sunday, 6=Saturday)\n */\n getDow(): number {\n return this.m.hdate.getDay();\n }\n /**\n * @returns hour of day (0-23)\n */\n getHour(): number {\n return this.m.hour;\n }\n /**\n * @returns minutes past hour (0-59)\n */\n getMinutes(): number {\n return this.m.minutes;\n }\n /**\n * @returns parts of a minute (0-17)\n */\n getChalakim(): number {\n return this.m.chalakim;\n }\n /**\n * Returns the moment of the molad as a `Temporal.ZonedDateTime` in the `UTC` zone.\n *\n * The molad is computed in Jerusalem *standard* time and then converted, so the\n * returned instant is correct year-round; only the zone of the returned object\n * is `UTC`. This method subtracts 20.94 minutes (20 minutes and 56.496 seconds)\n * from the computed time — Har Habayis, at longitude 35.2354°, is 5.2354° away\n * from the multiple-of-15 timezone longitude — to get to standard time. Daylight\n * savings time is intentionally not applied; adjust when formatting for display.\n *\n * The returned value is cached after the first call.\n * @example\n * import {Molad, months} from '@hebcal/core';\n * const m = new Molad(5784, months.NISAN);\n * const zdt = m.getInstant();\n * console.log(zdt.toString()); // '2024-04-08T20:36:26.837+00:00[UTC]'\n * @return the `Temporal.ZonedDateTime` representing the moment of the molad\n */\n getInstant(): Temporal.ZonedDateTime {\n this.instant ??= getMoladAsDate(this.m);\n return this.instant;\n }\n /**\n * Returns the earliest time of _Kiddush Levana_ calculated as 3 days after the molad. This method returns the time\n * even if it is during the day when _Kiddush Levana_ can't be said. Callers of this method should consider\n * displaying the next _tzais_ if the zman is between _alos_ and _tzais_.\n *\n * @return the Temporal.ZonedDateTime representing the moment 3 days after the molad.\n */\n getTchilasZmanKidushLevana3Days(): Temporal.ZonedDateTime {\n const zdt = this.getInstant();\n return zdt.add({hours: 72});\n }\n\n /**\n * Returns the earliest time of Kiddush Levana calculated as 7 days after the molad as mentioned by the\n * [Mechaber](https://en.wikipedia.org/wiki/Yosef_Karo). See the\n * [Bach's](https://en.wikipedia.org/wiki/Yoel_Sirkis) opinion on this time. This method returns the time\n * even if it is during the day when _Kiddush Levana_ can't be said. Callers of this method should consider\n * displaying the next _tzais_ if the zman is between _alos_ and _tzais_.\n *\n * @return the Temporal.ZonedDateTime representing the moment 7 days after the molad.\n */\n getTchilasZmanKidushLevana7Days(): Temporal.ZonedDateTime {\n const zdt = this.getInstant();\n return zdt.add({hours: 168});\n }\n\n /**\n * Returns the latest time of Kiddush Levana according to the\n * [Maharil's](https://en.wikipedia.org/wiki/Yaakov_ben_Moshe_Levi_Moelin) opinion that it is calculated as\n * halfway between molad and molad. This adds half the 29 days, 12 hours and 793 chalakim time between molad and\n * molad (14 days, 18 hours, 22 minutes and 666 milliseconds) to the month's molad. This method returns the time\n * even if it is during the day when _Kiddush Levana_ can't be said. Callers of this method should consider\n * displaying _alos_ before this time if the zman is between _alos_ and _tzais_.\n *\n * @return the Temporal.ZonedDateTime representing the moment halfway between molad and molad.\n */\n getSofZmanKidushLevanaBetweenMoldos(): Temporal.ZonedDateTime {\n const zdt = this.getInstant();\n // add half the time between molad and molad (half of 29 days, 12 hours and 793 chalakim (44 minutes, 3.3\n // seconds), or 14 days, 18 hours, 22 minutes and 666 milliseconds). Add it as hours, not days, to avoid\n // DST/ST crossover issues.\n return zdt.add({\n hours: 24 * 14 + 18,\n minutes: 22,\n seconds: 1,\n milliseconds: 666,\n });\n }\n\n /**\n * Returns the latest time of Kiddush Levana calculated as 15 days after the molad. This is the opinion brought down\n * in the Shulchan Aruch (Orach Chaim 426). It should be noted that some opinions hold that the\n * [Rema](https://en.wikipedia.org/wiki/Moses_Isserles) who brings down the opinion of the\n * [Maharil's](https://en.wikipedia.org/wiki/Yaakov_ben_Moshe_Levi_Moelin) of calculating\n * {@link Molad.getSofZmanKidushLevanaBetweenMoldos | half way between molad and molad} is of the opinion that Mechaber\n * agrees to his opinion. Also see the Aruch Hashulchan. For additional details on the subject, See Rabbi Dovid\n * Heber's very detailed writeup in Siman Daled (chapter 4) of\n * [Shaarei Zmanim](https://www.worldcat.org/oclc/461326125). This method returns the time even if it is during\n * the day when _Kiddush Levana_ can't be said. Callers of this method should consider displaying _alos_\n * before this time if the zman is between _alos_ and _tzais_.\n *\n * @return the Temporal.ZonedDateTime representing the moment 15 days after the molad.\n */\n getSofZmanKidushLevana15Days(): Temporal.ZonedDateTime {\n const zdt = this.getInstant();\n // 15 days after the molad. Add it as hours, not days, to avoid DST/ST crossover issues.\n return zdt.add({hours: 24 * 15});\n }\n\n /**\n * Returns a human-readable, localized string announcing the molad —\n * suitable for use on Shabbat Mevarchim. The format includes the Hebrew\n * month name, day of week, hour : minute, and chalakim if non-zero.\n *\n * Time format honors `options.hour12` and `options.location` (12-hour vs.\n * 24-hour); see {@link reformatTimeStr}.\n * @example\n * import {Molad, months} from '@hebcal/core';\n * const m = new Molad(5784, months.NISAN);\n * m.render('en', {hour12: true});\n * // => 'Molad Nisan: Monday, 10:57pm and 7 chalakim'\n * m.render('en', {hour12: false});\n * // => 'Molad Nisan: Monday, 22:57 and 7 chalakim'\n * m.render('he');\n * // => 'מוֹלָד הָלְּבָנָה נִיסָן יִהְיֶה בַּיּוֹם שֵׁנִי בשָׁבוּעַ, …'\n * @param [locale] Optional locale name (defaults to empty locale)\n * @param options used for time formatting (12-hour vs 24-hour)\n */\n render(locale?: string, options?: CalOptions): string {\n const monthName = Locale.gettext(this.getMonthName(), locale);\n const dayNames = getDayNames(locale);\n const dow = dayNames[this.getDow()];\n const minutes = this.getMinutes();\n const hour = this.getHour();\n const chalakim = this.getChalakim();\n const moladStr = Locale.gettext('Molad', locale);\n const minutesStr = Locale.lookupTranslation('min', locale) ?? 'minutes';\n const chalakimStr = Locale.gettext('chalakim', locale);\n const and = Locale.gettext('and', locale);\n if (Locale.isHebrewLocale(locale)) {\n const ampm = getHebrewTimeOfDay(hour);\n let result =\n `${moladStr} ${monthName} יִהְיֶה בַּיּוֹם ${dow} בשָׁבוּעַ, ` +\n `בְּשָׁעָה ${hour} ${ampm}, ` +\n `ו-${minutes} ${minutesStr}`;\n if (chalakim !== 0) {\n result += ` ו-${chalakim} ${chalakimStr}`;\n }\n if (locale!.toLocaleLowerCase() === 'he-x-nonikud') {\n return Locale.hebrewStripNikkud(result);\n }\n return result;\n }\n const fmtTime = reformatTimeStr(`${hour}:${pad2(minutes)}`, 'pm', options);\n const month = smartApostrophe(monthName);\n const result = `${moladStr} ${month}: ${dow}, ${fmtTime}`;\n if (chalakim === 0) {\n return result;\n }\n return result + ` ${and} ${chalakim} ${chalakimStr}`;\n }\n}\n\n/** Represents a Molad announcement on Shabbat Mevarchim */\nexport class MoladEvent extends Event {\n readonly molad: Molad;\n private readonly options: CalOptions;\n /**\n * @param date Hebrew date event occurs\n * @param hyear molad year\n * @param hmonth molad month\n * @param options\n */\n constructor(date: HDate, hyear: number, hmonth: number, options: CalOptions) {\n const m = new Molad(hyear, hmonth);\n const monthName = m.getMonthName();\n super(date, `Molad ${monthName} ${hyear}`, flags.MOLAD);\n this.molad = m;\n this.options = options;\n }\n /**\n * @param [locale] Optional locale name (defaults to empty locale)\n */\n render(locale?: string): string {\n return this.molad.render(locale, this.options);\n }\n}\n"],"names":[],"mappings":"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"}
|
package/dist/esm/moladBase.d.ts
CHANGED
|
@@ -12,4 +12,15 @@ export type MoladBase = {
|
|
|
12
12
|
/** parts of a minute (0-17) */
|
|
13
13
|
readonly chalakim: number;
|
|
14
14
|
};
|
|
15
|
+
/**
|
|
16
|
+
* Calculates the molad (birth of the new moon) for a Hebrew month using
|
|
17
|
+
* traditional chalakim arithmetic.
|
|
18
|
+
*
|
|
19
|
+
* Returns the raw components — day of week, hour, minutes and chalakim. Use
|
|
20
|
+
* {@link Molad} for a higher-level interface with rendering and Kiddush Levana
|
|
21
|
+
* times.
|
|
22
|
+
* @param year Hebrew year
|
|
23
|
+
* @param month Hebrew month (see `months` from `@hebcal/hdate`)
|
|
24
|
+
* @return the components of the molad for that month
|
|
25
|
+
*/
|
|
15
26
|
export declare function calculateMolad(year: number, month: number): MoladBase;
|
package/dist/esm/moladBase.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @hebcal/core v6.
|
|
1
|
+
/*! @hebcal/core v6.9.0, distributed under GPLv2 https://www.gnu.org/licenses/gpl-2.0.txt */
|
|
2
2
|
import { HDate, isLeapYear } from '@hebcal/hdate';
|
|
3
3
|
|
|
4
4
|
/*
|
|
@@ -56,6 +56,17 @@ function getChalakimSinceMoladTohu(year, month) {
|
|
|
56
56
|
function moladToAbsDate(chalakim) {
|
|
57
57
|
return Math.trunc(chalakim / CHALAKIM_PER_DAY) + JEWISH_EPOCH;
|
|
58
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Calculates the molad (birth of the new moon) for a Hebrew month using
|
|
61
|
+
* traditional chalakim arithmetic.
|
|
62
|
+
*
|
|
63
|
+
* Returns the raw components — day of week, hour, minutes and chalakim. Use
|
|
64
|
+
* {@link Molad} for a higher-level interface with rendering and Kiddush Levana
|
|
65
|
+
* times.
|
|
66
|
+
* @param year Hebrew year
|
|
67
|
+
* @param month Hebrew month (see `months` from `@hebcal/hdate`)
|
|
68
|
+
* @return the components of the molad for that month
|
|
69
|
+
*/
|
|
59
70
|
function calculateMolad(year, month) {
|
|
60
71
|
const chalakim = getChalakimSinceMoladTohu(year, month);
|
|
61
72
|
const absDate = moladToAbsDate(chalakim);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moladBase.js","sources":["../../../src/moladBase.ts"],"sourcesContent":["import {HDate, isLeapYear} from '@hebcal/hdate';\n\n/**\n * Represents a molad, the moment when the new moon is \"born\"\n */\nexport type MoladBase = {\n /** Hebrew date */\n readonly hdate: HDate;\n /** hour of day (0-23) */\n readonly hour: number;\n /** minutes past hour (0-59) */\n readonly minutes: number;\n /** parts of a minute (0-17) */\n readonly chalakim: number;\n};\n\n/*\n * Includes code ported from KosherJava, copyright 2004 Eliyahu Hershfeld,\n * released under LGPL 2.1.\n */\n\n/**\n * the Jewish epoch using the RD (Rata Die/Fixed Date or Reingold Dershowitz) day used in Calendrical Calculations.\n * Day 1 is January 1, 0001 of the Gregorian calendar\n */\nconst JEWISH_EPOCH: number = -1373429;\n\n/** The number of _chalakim_ (18) in a minute. */\nconst CHALAKIM_PER_MINUTE: number = 18;\n\n/** The number of _chalakim_ (1080) in an hour. */\nconst CHALAKIM_PER_HOUR: number = 1080;\n\n/** The number of _chalakim_ (25,920) in a 24-hour day. */\nconst CHALAKIM_PER_DAY: number = 25920; // 24 * 1080\n\n/** The number of _chalakim_ in an average Jewish month. A month has 29 days, 12 hours and 793\n * _chalakim_ (44 minutes and 3.3 seconds) for a total of 765,433 _chalakim_ */\nconst CHALAKIM_PER_MONTH: number = 765433; // (29 * 24 + 12) * 1080 + 793\n\n/**\n * Days from the beginning of Sunday till _molad BaHaRaD_. Calculated as 1 day, 5 hours and 204 _chalakim_ =\n * (24 + 5) * 1080 + 204 = 31524\n */\nconst CHALAKIM_MOLAD_TOHU: number = 31524;\n\n/**\n * Converts the NISSAN-based constants used by this class to numeric month starting from\n * TISHREI. This is required for _molad_ calculations.\n */\nfunction getJewishMonthOfYear(year: number, month: number): number {\n const leap: boolean = isLeapYear(year);\n return ((month + (leap ? 6 : 5)) % (leap ? 13 : 12)) + 1;\n}\n\n/**\n * Returns the number of _chalakim_ (parts - 1080 to the hour) from\n * the original hypothetical _Molad Tohu_ to the year and month\n * passed in.\n */\nfunction getChalakimSinceMoladTohu(year: number, month: number): number {\n // Jewish lunar month = 29 days, 12 hours and 793 chalakim\n // chalakim since Molad Tohu BeHaRaD - 1 day, 5 hours and 204 chalakim\n const monthOfYear: number = getJewishMonthOfYear(year, month);\n const monthsElapsed: number =\n 235 * Math.trunc((year - 1) / 19) + // Months in complete 19-year lunar (Metonic) cycles so far\n 12 * ((year - 1) % 19) + // Regular months in this cycle\n Math.trunc((7 * ((year - 1) % 19) + 1) / 19) + // Leap months this cycle\n (monthOfYear - 1); // add elapsed months till the start of the molad of the month\n // return chalakim prior to BeHaRaD + number of chalakim since\n return CHALAKIM_MOLAD_TOHU + CHALAKIM_PER_MONTH * monthsElapsed;\n}\n\n/**\n * Returns the number of days from the Jewish epoch from the number of chalakim from the epoch passed in.\n * @param chalakim the number of _chalakim_ since the beginning of Sunday prior to BaHaRaD\n * @return the number of days from the Jewish epoch\n */\nfunction moladToAbsDate(chalakim: number): number {\n return Math.trunc(chalakim / CHALAKIM_PER_DAY) + JEWISH_EPOCH;\n}\n\nexport function calculateMolad(year: number, month: number): MoladBase {\n const chalakim = getChalakimSinceMoladTohu(year, month);\n const absDate = moladToAbsDate(chalakim);\n let hd = new HDate(absDate);\n const conjunctionDay: number = Math.trunc(chalakim / CHALAKIM_PER_DAY);\n const conjunctionParts: number = Math.trunc(\n chalakim - conjunctionDay * CHALAKIM_PER_DAY\n );\n\n let adjustedChalakim: number = conjunctionParts;\n let hour = Math.trunc(adjustedChalakim / CHALAKIM_PER_HOUR);\n adjustedChalakim = adjustedChalakim - hour * CHALAKIM_PER_HOUR;\n const minutes = Math.trunc(adjustedChalakim / CHALAKIM_PER_MINUTE);\n\n if (hour >= 6) {\n hd = hd.next();\n }\n hour = (hour + 18) % 24;\n\n const m: MoladBase = {\n hdate: hd,\n hour,\n minutes,\n chalakim: adjustedChalakim - minutes * CHALAKIM_PER_MINUTE,\n };\n\n return m;\n}\n"],"names":[],"mappings":";;;AAgBA;;;AAGG;AAEH;;;AAGG;AACH,MAAM,YAAY,GAAW,QAAQ;AAErC;AACA,MAAM,mBAAmB,GAAW,EAAE;AAEtC;AACA,MAAM,iBAAiB,GAAW,IAAI;AAEtC;AACA,MAAM,gBAAgB,GAAW,KAAK,CAAC;AAEvC;AAC+E;AAC/E,MAAM,kBAAkB,GAAW,MAAM,CAAC;AAE1C;;;AAGG;AACH,MAAM,mBAAmB,GAAW,KAAK;AAEzC;;;AAGG;AACH,SAAS,oBAAoB,CAAC,IAAY,EAAE,KAAa,EAAA;AACvD,IAAA,MAAM,IAAI,GAAY,UAAU,CAAC,IAAI,CAAC;AACtC,IAAA,OAAO,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;AAC1D;AAEA;;;;AAIG;AACH,SAAS,yBAAyB,CAAC,IAAY,EAAE,KAAa,EAAA;;;IAG5D,MAAM,WAAW,GAAW,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC;AAC7D,IAAA,MAAM,aAAa,GACjB,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACjC,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAC5C,SAAC,WAAW,GAAG,CAAC,CAAC,CAAC;;AAEpB,IAAA,OAAO,mBAAmB,GAAG,kBAAkB,GAAG,aAAa;AACjE;AAEA;;;;AAIG;AACH,SAAS,cAAc,CAAC,QAAgB,EAAA;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,gBAAgB,CAAC,GAAG,YAAY;AAC/D;
|
|
1
|
+
{"version":3,"file":"moladBase.js","sources":["../../../src/moladBase.ts"],"sourcesContent":["import {HDate, isLeapYear} from '@hebcal/hdate';\n\n/**\n * Represents a molad, the moment when the new moon is \"born\"\n */\nexport type MoladBase = {\n /** Hebrew date */\n readonly hdate: HDate;\n /** hour of day (0-23) */\n readonly hour: number;\n /** minutes past hour (0-59) */\n readonly minutes: number;\n /** parts of a minute (0-17) */\n readonly chalakim: number;\n};\n\n/*\n * Includes code ported from KosherJava, copyright 2004 Eliyahu Hershfeld,\n * released under LGPL 2.1.\n */\n\n/**\n * the Jewish epoch using the RD (Rata Die/Fixed Date or Reingold Dershowitz) day used in Calendrical Calculations.\n * Day 1 is January 1, 0001 of the Gregorian calendar\n */\nconst JEWISH_EPOCH: number = -1373429;\n\n/** The number of _chalakim_ (18) in a minute. */\nconst CHALAKIM_PER_MINUTE: number = 18;\n\n/** The number of _chalakim_ (1080) in an hour. */\nconst CHALAKIM_PER_HOUR: number = 1080;\n\n/** The number of _chalakim_ (25,920) in a 24-hour day. */\nconst CHALAKIM_PER_DAY: number = 25920; // 24 * 1080\n\n/** The number of _chalakim_ in an average Jewish month. A month has 29 days, 12 hours and 793\n * _chalakim_ (44 minutes and 3.3 seconds) for a total of 765,433 _chalakim_ */\nconst CHALAKIM_PER_MONTH: number = 765433; // (29 * 24 + 12) * 1080 + 793\n\n/**\n * Days from the beginning of Sunday till _molad BaHaRaD_. Calculated as 1 day, 5 hours and 204 _chalakim_ =\n * (24 + 5) * 1080 + 204 = 31524\n */\nconst CHALAKIM_MOLAD_TOHU: number = 31524;\n\n/**\n * Converts the NISSAN-based constants used by this class to numeric month starting from\n * TISHREI. This is required for _molad_ calculations.\n */\nfunction getJewishMonthOfYear(year: number, month: number): number {\n const leap: boolean = isLeapYear(year);\n return ((month + (leap ? 6 : 5)) % (leap ? 13 : 12)) + 1;\n}\n\n/**\n * Returns the number of _chalakim_ (parts - 1080 to the hour) from\n * the original hypothetical _Molad Tohu_ to the year and month\n * passed in.\n */\nfunction getChalakimSinceMoladTohu(year: number, month: number): number {\n // Jewish lunar month = 29 days, 12 hours and 793 chalakim\n // chalakim since Molad Tohu BeHaRaD - 1 day, 5 hours and 204 chalakim\n const monthOfYear: number = getJewishMonthOfYear(year, month);\n const monthsElapsed: number =\n 235 * Math.trunc((year - 1) / 19) + // Months in complete 19-year lunar (Metonic) cycles so far\n 12 * ((year - 1) % 19) + // Regular months in this cycle\n Math.trunc((7 * ((year - 1) % 19) + 1) / 19) + // Leap months this cycle\n (monthOfYear - 1); // add elapsed months till the start of the molad of the month\n // return chalakim prior to BeHaRaD + number of chalakim since\n return CHALAKIM_MOLAD_TOHU + CHALAKIM_PER_MONTH * monthsElapsed;\n}\n\n/**\n * Returns the number of days from the Jewish epoch from the number of chalakim from the epoch passed in.\n * @param chalakim the number of _chalakim_ since the beginning of Sunday prior to BaHaRaD\n * @return the number of days from the Jewish epoch\n */\nfunction moladToAbsDate(chalakim: number): number {\n return Math.trunc(chalakim / CHALAKIM_PER_DAY) + JEWISH_EPOCH;\n}\n\n/**\n * Calculates the molad (birth of the new moon) for a Hebrew month using\n * traditional chalakim arithmetic.\n *\n * Returns the raw components — day of week, hour, minutes and chalakim. Use\n * {@link Molad} for a higher-level interface with rendering and Kiddush Levana\n * times.\n * @param year Hebrew year\n * @param month Hebrew month (see `months` from `@hebcal/hdate`)\n * @return the components of the molad for that month\n */\nexport function calculateMolad(year: number, month: number): MoladBase {\n const chalakim = getChalakimSinceMoladTohu(year, month);\n const absDate = moladToAbsDate(chalakim);\n let hd = new HDate(absDate);\n const conjunctionDay: number = Math.trunc(chalakim / CHALAKIM_PER_DAY);\n const conjunctionParts: number = Math.trunc(\n chalakim - conjunctionDay * CHALAKIM_PER_DAY\n );\n\n let adjustedChalakim: number = conjunctionParts;\n let hour = Math.trunc(adjustedChalakim / CHALAKIM_PER_HOUR);\n adjustedChalakim = adjustedChalakim - hour * CHALAKIM_PER_HOUR;\n const minutes = Math.trunc(adjustedChalakim / CHALAKIM_PER_MINUTE);\n\n if (hour >= 6) {\n hd = hd.next();\n }\n hour = (hour + 18) % 24;\n\n const m: MoladBase = {\n hdate: hd,\n hour,\n minutes,\n chalakim: adjustedChalakim - minutes * CHALAKIM_PER_MINUTE,\n };\n\n return m;\n}\n"],"names":[],"mappings":";;;AAgBA;;;AAGG;AAEH;;;AAGG;AACH,MAAM,YAAY,GAAW,QAAQ;AAErC;AACA,MAAM,mBAAmB,GAAW,EAAE;AAEtC;AACA,MAAM,iBAAiB,GAAW,IAAI;AAEtC;AACA,MAAM,gBAAgB,GAAW,KAAK,CAAC;AAEvC;AAC+E;AAC/E,MAAM,kBAAkB,GAAW,MAAM,CAAC;AAE1C;;;AAGG;AACH,MAAM,mBAAmB,GAAW,KAAK;AAEzC;;;AAGG;AACH,SAAS,oBAAoB,CAAC,IAAY,EAAE,KAAa,EAAA;AACvD,IAAA,MAAM,IAAI,GAAY,UAAU,CAAC,IAAI,CAAC;AACtC,IAAA,OAAO,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;AAC1D;AAEA;;;;AAIG;AACH,SAAS,yBAAyB,CAAC,IAAY,EAAE,KAAa,EAAA;;;IAG5D,MAAM,WAAW,GAAW,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC;AAC7D,IAAA,MAAM,aAAa,GACjB,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACjC,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAC5C,SAAC,WAAW,GAAG,CAAC,CAAC,CAAC;;AAEpB,IAAA,OAAO,mBAAmB,GAAG,kBAAkB,GAAG,aAAa;AACjE;AAEA;;;;AAIG;AACH,SAAS,cAAc,CAAC,QAAgB,EAAA;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,gBAAgB,CAAC,GAAG,YAAY;AAC/D;AAEA;;;;;;;;;;AAUG;AACG,SAAU,cAAc,CAAC,IAAY,EAAE,KAAa,EAAA;IACxD,MAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,EAAE,KAAK,CAAC;AACvD,IAAA,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC;AACxC,IAAA,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC;IAC3B,MAAM,cAAc,GAAW,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,gBAAgB,CAAC;AACtE,IAAA,MAAM,gBAAgB,GAAW,IAAI,CAAC,KAAK,CACzC,QAAQ,GAAG,cAAc,GAAG,gBAAgB,CAC7C;IAED,IAAI,gBAAgB,GAAW,gBAAgB;IAC/C,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,iBAAiB,CAAC;AAC3D,IAAA,gBAAgB,GAAG,gBAAgB,GAAG,IAAI,GAAG,iBAAiB;IAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,mBAAmB,CAAC;AAElE,IAAA,IAAI,IAAI,IAAI,CAAC,EAAE;AACb,QAAA,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE;IAChB;IACA,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE;AAEvB,IAAA,MAAM,CAAC,GAAc;AACnB,QAAA,KAAK,EAAE,EAAE;QACT,IAAI;QACJ,OAAO;AACP,QAAA,QAAQ,EAAE,gBAAgB,GAAG,OAAO,GAAG,mBAAmB;KAC3D;AAED,IAAA,OAAO,CAAC;AACV;;;;"}
|
package/dist/esm/moladDate.d.ts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import 'temporal-polyfill/global';
|
|
2
2
|
import { MoladBase } from './moladBase';
|
|
3
3
|
/**
|
|
4
|
-
* Returns the
|
|
5
|
-
* This method subtracts 20.94 minutes (20 minutes and 56.496 seconds) from the computed time (Har Habayis with a longitude
|
|
6
|
-
* of 35.2354° is 5.2354° away from the %15 timezone longitude) to get to standard time. This method
|
|
7
|
-
* intentionally uses standard time and not daylight savings time.
|
|
4
|
+
* Returns the moment of the molad as a `Temporal.ZonedDateTime` in the `UTC` zone.
|
|
8
5
|
*
|
|
9
|
-
*
|
|
10
|
-
|
|
6
|
+
* The molad is computed in Jerusalem *standard* time and then converted, so the
|
|
7
|
+
* returned instant is correct year-round; only the zone of the returned object
|
|
8
|
+
* is `UTC`. This method subtracts 20.94 minutes (20 minutes and 56.496 seconds)
|
|
9
|
+
* from the computed time — Har Habayis, at longitude 35.2354°, is 5.2354° away
|
|
10
|
+
* from the multiple-of-15 timezone longitude — to get to standard time. Daylight
|
|
11
|
+
* savings time is intentionally not applied; adjust when formatting for display.
|
|
12
|
+
*
|
|
13
|
+
* @param molad the molad to convert
|
|
14
|
+
* @return the `Temporal.ZonedDateTime` representing the moment of the molad
|
|
11
15
|
*/
|
|
12
16
|
export declare function getMoladAsDate(molad: MoladBase): Temporal.ZonedDateTime;
|