{"id":22733468,"url":"https://github.com/strikeentco/feels","last_synced_at":"2025-08-23T13:19:33.416Z","repository":{"id":57234305,"uuid":"42102977","full_name":"strikeentco/feels","owner":"strikeentco","description":":cyclone: Calculate apparent temperature using heat index, approximate wet-bulb globe temperature, humidex, australian apparent temperature and wind chill.","archived":false,"fork":false,"pushed_at":"2018-02-25T18:00:42.000Z","size":55,"stargazers_count":31,"open_issues_count":0,"forks_count":9,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-09T06:16:32.625Z","etag":null,"topics":["apparent","chill","dew-point","heat","heat-index","humidity","index","javascript","nodejs","temperature","wind","wind-chill"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/strikeentco.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-09-08T09:30:51.000Z","updated_at":"2024-12-23T03:20:09.000Z","dependencies_parsed_at":"2022-09-12T11:02:44.239Z","dependency_job_id":null,"html_url":"https://github.com/strikeentco/feels","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/strikeentco/feels","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strikeentco%2Ffeels","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strikeentco%2Ffeels/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strikeentco%2Ffeels/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strikeentco%2Ffeels/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/strikeentco","download_url":"https://codeload.github.com/strikeentco/feels/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strikeentco%2Ffeels/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271749047,"owners_count":24814114,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-23T02:00:09.327Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apparent","chill","dew-point","heat","heat-index","humidity","index","javascript","nodejs","temperature","wind","wind-chill"],"created_at":"2024-12-10T20:14:42.658Z","updated_at":"2025-08-23T13:19:33.392Z","avatar_url":"https://github.com/strikeentco.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"feels [![License](https://img.shields.io/npm/l/feels.svg)](https://github.com/strikeentco/feels/blob/master/LICENSE)  [![npm](https://img.shields.io/npm/v/feels.svg)](https://www.npmjs.com/package/feels)\n==========\n[![Build Status](https://travis-ci.org/strikeentco/feels.svg)](https://travis-ci.org/strikeentco/feels)  [![node](https://img.shields.io/node/v/feels.svg)](https://www.npmjs.com/package/feels) [![Test Coverage](https://api.codeclimate.com/v1/badges/8db75e23fd57ba5ee971/test_coverage)](https://codeclimate.com/github/strikeentco/feels/test_coverage) [![bitHound Score](https://www.bithound.io/github/strikeentco/feels/badges/score.svg)](https://www.bithound.io/github/strikeentco/feels)\n\n`Feels` allow you to calculate [apparent temperature](https://en.wikipedia.org/wiki/Apparent_temperature) using [heat index](https://en.wikipedia.org/wiki/Heat_index), approximate [wet-bulb globe temperature](https://en.wikipedia.org/wiki/Wet-bulb_globe_temperature), [humidex](https://en.wikipedia.org/wiki/Humidex), [australian apparent temperature](https://en.wikipedia.org/wiki/Wind_chill#Australian_Apparent_Temperature) and [wind chill](https://en.wikipedia.org/wiki/Wind_chill).\n\nCombinations of this methods also named as `Feels like`, `Real feel` etc.\n\nYou can also convert temperature, speed and calculate `relative humidity`, `dew point`, `frost point`, `water vapour pressure` using [class](#class-methods) or [standalone](#standalone-methods) methods.\n\n# Usage\n\n```sh\n$ npm install feels --save\n```\n\n```javascript\nconst Feels = require('feels');\n\nconst config = {\n  temp: 20,\n  humidity: 85,\n  speed: 20,\n  units: {\n    temp: 'c',\n    speed: 'mps'\n  }\n};\n\nnew Feels(config).like();\n```\n\n## Quick navigation\n* [Class methods](#class-methods)\n  * [.setOptions(options)](#setoptionsoptions)\n  * [.like([methods])](#likemethods)\n  * [.addMethod(name, method)](#addmethodname-method)\n  * [.registerMethod(method)](#registermethodmethod)\n  * [.registerMethods(methods)](#registermethodsmethods)\n  * [.heatIndex()](#heatindex)\n  * [.AWBGT()](#awbgt)\n  * [.humidex()](#humidex)\n  * [.AAT()](#aat)\n  * [.windChill()](#windchill)\n  * [.getWVP()](#getwvp)\n  * [.getWVPbyDP()](#getwvpbydp)\n  * [.getARH()](#getarh)\n  * [.getRH()](#getrh)\n  * [.getADP()](#getadp)\n  * [.getDP()](#getdp)\n  * [.getFP()](#getfp)\n* [Standalone methods](#standalone-methods)\n  * [Temperature convert](#temperature-convert)\n  * [Speed convert](#speed-convert)\n  * [Heat index](#heat-index)\n  * [Approximate WBGT](#approximate-wbgt)\n  * [Humidex](#humidex-1)\n  * [Australian Apparent Temperature](#australian-apparent-temperature)\n  * [Wind chill](#wind-chill)\n  * [Water vapour pressure](#water-vapour-pressure)\n  * [Approximate relative humidity](#approximate-relative-humidity)\n  * [Relative humidity](#relative-humidity)\n  * [Approximate dew point](#approximate-dew-point)\n  * [Dew point](#dew-point)\n  * [Frost point](#frost-point)\n\n# API\n\n# Class methods\n\nMost of the class methods also available as [standalone methods](#standalone-methods).\n\n### new Feels(options)\n\nConstructor.\n\n#### Params:\n* **options** (*Object*) - Feels options:\n  * **temp** (*Float*) - Temperature in `Celsius`, `Fahrenheit` or `Kelvin`, depends on units type.\n  * **humidity** (*Float*) - Relative humidity in percent.\n  * **speed** (*Float*) - Wind speed in meters per second, miles per hour or kilometers per hour, depends on units type.\n  * **dewPoint** (*Float*) - Dew point in `Celsius`, `Fahrenheit`, `Kelvin` depends on units type.\n  * **wvp** (*Float*) - Water vapour pressure in `hPa`.\n  * **round** (*Boolean|Function*) - The function that will be used to round the result. If `true`, rounds the result using `Math.round`.\n  * **units** (*Object*) - Units type:\n    * **temp** (*String*) - `c`, `f`, `k` (by default `c`).\n    * **speed** (*String*) - `mps`, `mph`, `kph` (by default `mps`).\n\n```javascript\nconst Feels = require('feels');\n\nnew Feels({ temp: 20, humidity: 80.9 }).toF().humidex();\n```\n\n### .setOptions(options)\n\nSets the options.\n\n#### Params:\n* **options** (*Object*) - Feels options:\n  * **temp** (*Float*) - Temperature in `Celsius`, `Fahrenheit` or `Kelvin`, depends on units type.\n  * **humidity** (*Float*) - Relative humidity in percent.\n  * **speed** (*Float*) - Wind speed in meters per second, miles per hour or kilometers per hour, depends on units type.\n  * **dewPoint** (*Float*) - Dew point in `Celsius`, `Fahrenheit`, `Kelvin` depends on units type.\n  * **wvp** (*Float*) - Water vapour pressure in `hPa`.\n  * **round** (*Boolean|Function*) - The function that will be used to round the result. If `true`, rounds the result using `Math.round`.\n  * **units** (*Object*) - Units type:\n    * **temp** (*String*) - `c`, `f`, `k` (by default `c`).\n    * **speed** (*String*) - `mps`, `mph`, `kph` (by default `mps`).\n\n```javascript\nconst Feels = require('feels');\nconst feels = new Feels();\nconst config = {\n  temp: 20,\n  humidity: 85,\n  speed: 20,\n  units: {\n    temp: 'c',\n    speed: 'mps'\n  }\n};\n\nfeels.setOptions(config);\nfeels.AAT();\n```\n\n### .like([methods])\n\nCalculates apparent temperature using specified methods.\n\nIf methods aren't provided returns an index which is calculated with `['HI', 'HI_CA', 'AAT', 'WCI']`.\n\n#### Params:\n* **[methods]** (*String|Array*) - String or array with one of the apparent temperature [acronyms](#acronyms).\n\n### Acronyms\n* **HI** - Heat index ([Feels().heatIndex()](#heatindex) or [heatIndex()](#heat-index)).\n* **AWBGT** - Approximate wet-bulb globe temperature ([Feels().AWBGT()](#awbgt) or [AWBGT()](#approximate-wbgt)).\n* **HI_CA** - Humidex ([Feels().humidex()](#humidex) or [humidex()](#humidex-1)).\n* **AAT** - Australian apparent temperature ([Feels().AAT()](#aat) or [AAT()](#australian-apparent-temperature)).\n* **WCI** - Wind chill ([Feels().windChill()](#windchill) or [windChill()](#wind-chill)).\n\nIf you want to convert temperature from one to other temperature scale, you can place `.toC()`, `.toF()` or `.toK()` before target method.\n\n```javascript\nnew Feels(config).toF().like(['AAT', 'HI_CA']);\n```\n\n### .addMethod(name, method)\n\nAdds new method, which can be used by itself or in [`.like()`](#likemethods).\n\n#### Params:\n* **name** (*String*) - Method name.\n* **method** (*Function*) - The method itself.\n\n```javascript\nconst feels = new Feels();\nfeels.addMethod('newbie', () =\u003e (feels.heatIndex() + feels.humidex()) / 2);\nfeels.addMethod('newbie2', function () {\n  return (this.heatIndex() + this.humidex()) / 2;\n});\n\nfeels.setOptions({ temp: 20, dewPoint: 18 });\nfeels.newbie();\nfeels.like(['AAT', 'newbie2']);\n```\n\n### .registerMethod(method)\n#### Params:\n* **method** (*String*) - Method name.\n\n### .registerMethods(methods)\n\nAllows you to create your own methods which can be used in [`.like()`](#likemethods), by inheriting the base class.\n\n#### Params:\n* **methods** (*Array*) - Method names.\n\n```javascript\nclass NewFeels extends Feels {\n  constructor(opts) {\n    super(opts);\n    this.registerMethods(['newbie', 'newbie2']);\n  }\n  newbie() {\n    return (this.heatIndex() + this.humidex()) / 2;\n  }\n  newbie2() {\n    return (this.heatIndex() + this.humidex()) / 2;\n  }\n}\n\nconst feels = new NewFeels({ temp: 20, dewPoint: 18 });\n\nfeels.newbie();\nfeels.like(['AAT', 'newbie2']);\n```\n\n### .heatIndex()\n#### Params:\n* **options** (*Object*) - Constructor options:\n  * **temp** (*Float*)\n  * **humidity|dewPoint** (*Float*)\n\n### .AWBGT()\n#### Params:\n* **options** (*Object*) - Constructor options:\n  * **temp** (*Float*)\n  * **humidity|dewPoint** (*Float*)\n\n### .humidex()\n#### Params:\n* **options** (*Object*) - Constructor options:\n  * **temp** (*Float*)\n  * **humidity|dewPoint** (*Float*)\n\n### .AAT()\n#### Params:\n* **options** (*Object*) - Constructor options:\n  * **temp** (*Float*)\n  * **speed** (*Float*)\n  * **humidity|dewPoint** (*Float*)\n\n### .windChill()\n#### Params:\n* **options** (*Object*) - Constructor options:\n  * **temp** (*Float*)\n  * **speed** (*Float*)\n\n### .getWVP()\n#### Params:\n* **options** (*Object*) - Constructor options:\n  * **humidity** (*Float*)\n  * **temp** (*Float*)\n\n### .getWVPbyDP()\n#### Params:\n* **options** (*Object*) - Constructor options:\n  * **dewPoint** (*Float*)\n\n### .getARH()\n#### Params:\n* **options** (*Object*) - Constructor options:\n  * **temp** (*Float*)\n  * **dewPoint** (*Float*)\n\n### .getRH()\n#### Params:\n* **options** (*Object*) - Constructor options:\n  * **temp** (*Float*)\n  * **wvp|dewPoint** (*Float*)\n\n### .getADP()\n#### Params:\n* **options** (*Object*) - Constructor options:\n  * **temp** (*Float*)\n  * **humidity** (*Float*)\n\n### .getDP()\n#### Params:\n* **options** (*Object*) - Constructor options:\n  * **temp** (*Float*)\n  * **humidity** (*Float*)\n\n### .getFP()\n#### Params:\n* **options** (*Object*) - Constructor options:\n  * **temp** (*Float*)\n  * **humidity** (*Float*)\n\n### Aliases\n* **toC()** - *toCelsius()*\n* **toF()** - *toFahrenheit()*\n* **toK()** - *toKelvin()*\n* **getWVP()** - *getWaterVapourPressure()*\n* **getWVPbyDP()** - *getWaterVapourPressureByDewPoint()*\n* **getARH()** - *getAproximateRelativeHumidity()*\n* **getRH()** - *getRelativeHumidity()*\n* **getADP()** - *getAproximateDewPoint()*\n* **getDP()** - *getDewPoint()*\n* **getFP()** - *getFrostPoint()*\n\n## Standalone methods\n\nAll standalone methods use temperature in Celsius, humidity in percent and wind speed in meters per second.\n\n```javascript\nconst Feels = require('feels');\n\nFeels.humidex(20, 80.9);\n```\n\n## Temperature convert\n\n### Feels.tempConvert(temp, from, to, round)\n\n#### Params:\n* **temp** (*Float*) - Temperature.\n* **from** (*String*) - `c` - Celsius, `f` - Fahrenheit, `k` - Kelvin.\n* **to** (*String*) - `c` - Celsius, `f` - Fahrenheit, `k` - Kelvin.\n* **round** (*Boolean|Function*) - The function that will be used to round the result. If `true`, rounds the result using `Math.round`.\n\n```javascript\nconst Feels = require('feels');\nconst humidex = Feels.humidex(20, 80.9);\n\nFeels.tempConvert(humidex, 'c', 'f');\n```\n\n## Speed convert\n\n### Feels.speedConvert(speed, from, to, round)\n\n#### Params:\n* **speed** (*Float*) - Speed.\n* **from** (*String*) - `mps` - Metre per second, `mph` - Miles per hour, `kph` - Kilometre per hour.\n* **to** (*String*) - `mps` - Metre per second, `mph` - Miles per hour, `kph` - Kilometre per hour.\n* **round** (*Boolean|Function*) - The function that will be used to round the result. If `true`, rounds the result using `Math.round`.\n\n```javascript\nconst Feels = require('feels');\nconst speed = Feels.speedConvert(36, 'kph', 'mps');\n\nFeels.AAT(20, speed, 89);\n```\n\n## Heat index\n\nThe heat index is an index that combines air temperature and relative humidity in an attempt to determine the human-perceived equivalent temperature. [Wiki](https://en.wikipedia.org/wiki/Heat_index)\n\n**Note:** *The heat index is used for temperatures more than 20 Celsius.*\n\n### Feels.heatIndex(temp, humidity|dewPoint, [options])\n\n#### Params:\n* **temp** (*Float*) - Temperature in Celsius.\n* **humidity|dewPoint** (*Float*) - Humidity in percent (0 \u003e humidity \u003c= 100) or Dew point in Celsius.\n* **[options]** (*Object*) - Object with options:\n  * **dewPoint** (*True*) - Must be `true` for dew point usage.\n  * **round** (*Boolean|Function*) - The function that will be used to round the result. If `true`, rounds the result using `Math.round`.\n\n## Approximate WBGT\n\nThe approximate wet-bulb globe temperature is a composite temperature used to estimate the effect of temperature, humidity, wind speed on humans. Unlike WBGT, AWBGT not take into account radiation effect. [Wiki](https://en.wikipedia.org/wiki/Wet-bulb_globe_temperature)\n\n**Note:** *The AWBGT is used for temperatures more than 15 Celsius.*\n\n### Feels.AWBGT(temp, humidity|dewPoint, [options])\n\n#### Params:\n* **temp** (*Float*) - Temperature in Celsius.\n* **humidity|dewPoint** (*Float*) - Humidity in percent (0 \u003e humidity \u003c= 100) or Dew point in Celsius.\n* **[options]** (*Object*) - Object with options:\n  * **dewPoint** (*True*) - Must be `true` for dew point usage.\n  * **round** (*Boolean|Function*) - The function that will be used to round the result. If `true`, rounds the result using `Math.round`.\n\n## Humidex\n\nThe humidex is an index number used by Canadian meteorologists to describe how hot the weather feels to the average person, by combining the effect of heat and humidity. [Wiki](https://en.wikipedia.org/wiki/Humidex)\n\n**Note:** *The humidex is used for temperatures more than 0 Celsius.*\n\n### Feels.humidex(temp, humidity|dewPoint, [options])\n\n#### Params:\n* **temp** (*Float*) - Temperature in Celsius.\n* **humidity|dewPoint** (*Float*) - Humidity in percent (0 \u003e humidity \u003c= 100) or Dew point in Celsius.\n* **[options]** (*Object*) - Object with options:\n  * **dewPoint** (*True*) - Must be `true` for dew point usage.\n  * **round** (*Boolean|Function*) - The function that will be used to round the result. If `true`, rounds the result using `Math.round`.\n\n## Australian Apparent Temperature\n\nThe AAT is an index number used by the Australian Bureau of Meteorology to describe heat balance in the human body. [Wiki](https://en.wikipedia.org/wiki/Wind_chill#Australian_Apparent_Temperature)\n\n### Feels.AAT(temp, speed, humidity|dewPoint, [options])\n\n#### Params:\n* **temp** (*Float*) - Temperature in Celsius.\n* **speed** (*Float*) - Speed in meters per second.\n* **humidity|dewPoint** (*Float*) - Humidity in percent (0 \u003e humidity \u003c= 100) or Dew point in Celsius.\n* **[options]** (*Object*) - Object with options:\n  * **dewPoint** (*True*) - Must be `true` for dew point usage.\n  * **round** (*Boolean|Function*) - The function that will be used to round the result. If `true`, rounds the result using `Math.round`.\n\n## Wind chill\n\nWind chill is the perceived decrease in air temperature felt by the body on exposed skin due to the flow of air. [Wiki](https://en.wikipedia.org/wiki/Wind_chill)\n\n**Note:** *The humidex is used for temperatures less than 0 Celsius.*\n\n### Feels.windChill(temp, speed, [options])\n\n#### Params:\n* **temp** (*Float*) - Temperature in Celsius.\n* **speed** (*Float*) - Speed in meters per second.\n* **[options]** (*Object*) - Object with options:\n  * **round** (*Boolean|Function*) - The function that will be used to round the result. If `true`, rounds the result using `Math.round`.\n\n## Water vapour pressure\n\n### Feels.getWVP(temp, humidity, [options])\n\n#### Params:\n* **temp** (*Float*) - Temperature in Celsius.\n* **humidity** (*Integer*) - Humidity in percent (0 \u003e humidity \u003c= 100).\n* **[options]** (*Object*) - Object with options:\n  * **round** (*Boolean|Function*) - The function that will be used to round the result. If `true`, rounds the result using `Math.round`.\n\n### Feels.getWVPbyDP(dewPoint, [options])\n\n#### Params:\n* **dewPoint** (*Float*) - Dew point in Celsius.\n* **[options]** (*Object*) - Object with options:\n  * **round** (*Boolean|Function*) - The function that will be used to round the result. If `true`, rounds the result using `Math.round`.\n\n## Approximate relative humidity\n\n### Feels.getARH(temp, dewPoint, [options])\n\n#### Params:\n* **temp** (*Float*) - Temperature in Celsius.\n* **dewPoint** (*Float*) - Dew point in Celsius.\n* **[options]** (*Object*) - Object with options:\n  * **round** (*Boolean|Function*) - The function that will be used to round the result. If `true`, rounds the result using `Math.round`.\n\n## Relative humidity\n\n### Feels.getRH(temp, WVP|dewPoint, [options])\n\n#### Params:\n* **temp** (*Float*) - Temperature in Celsius.\n* **WVP|dewPoint** (*Float*) - Water vapour pressure or Dew point in Celsius.\n* **[options]** (*Object*) - Object with options:\n  * **dewPoint** (*True*) - Must be `true` for dew point usage.\n  * **round** (*Boolean|Function*) - The function that will be used to round the result. If `true`, rounds the result using `Math.round`.\n\n## Approximate dew point\n\n### Feels.getADP(temp, humidity, [options])\n\n#### Params:\n* **temp** (*Float*) - Temperature in Celsius.\n* **humidity** (*Integer*) - Humidity in percent (0 \u003e humidity \u003c= 100).\n* **[options]** (*Object*) - Object with options:\n  * **round** (*Boolean|Function*) - The function that will be used to round the result. If `true`, rounds the result using `Math.round`.\n\n## Dew point\n\n### Feels.getDP(temp, humidity, [options])\n\n#### Params:\n* **temp** (*Float*) - Temperature in Celsius.\n* **humidity** (*Integer*) - Humidity in percent (0 \u003e humidity \u003c= 100).\n* **[options]** (*Object*) - Object with options:\n  * **round** (*Boolean|Function*) - The function that will be used to round the result. If `true`, rounds the result using `Math.round`.\n\n## Frost point\n\n### Feels.getFP(temp, humidity, [options])\n\n#### Params:\n* **temp** (*Float*) - Temperature in Celsius.\n* **humidity** (*Integer*) - Humidity in percent (0 \u003e humidity \u003c= 100).\n* **[options]** (*Object*) - Object with options:\n  * **round** (*Boolean|Function*) - The function that will be used to round the result. If `true`, rounds the result using `Math.round`.\n\n## License\n\nThe MIT License (MIT)\u003cbr/\u003e\nCopyright (c) 2015-2018 Alexey Bystrov\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstrikeentco%2Ffeels","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstrikeentco%2Ffeels","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstrikeentco%2Ffeels/lists"}