UNPKG

sun-time

Version:

Calculator of sunrise time as well as sunset time according to location(Long.,lat.) or city name.

98 lines (85 loc) 3.43 kB
((JsDK,ETL,db,api,salatTime,$)=>{ //salatTime.getTimes(new Date(), [43, -80], -5); api.moodoon=ETL.extract(__dirname+'/db/moodon.txt',{process:db.process_moodoon}) $(api.moodoon.length); /** * */ api.coordCity=function(name){ let result=api.moodoon.filter((city)=>city.name.toLowerCase()===name.toLowerCase()); if(!result.length){ result=api.moodoon.filter((city)=> `,${city.namei18n.toLowerCase()},`.indexOf(`,${name.toLowerCase()},`)>=0); if(!result.length){ result=api.coordCityComplx(name); } } return result.map((city)=>[parseFloat(city.lat+""),parseFloat(city.long+"")]); }; api.coordCityComplx=function(name){ try { var city=require('db-city'); return city.find(name); } catch (e) { console.log(` "${name}" City is not found!! install "db-city" package to increase the potential of finding City =>Run : npm install -g db-city; Then , "sun-time" will detect that "db-city" exists & it will search on 3.1 million cities. `); } }; /** * sun(24.32,18.556); --> {rise:"5:00",set:"18:50"} sun(24,18,13) -> sun([24,18],date,{tz:120,dst:1}) --> 120min=GMT+2,dst=Daylight Saving Time sun([24,18,1],date,{tz:2,format:'24h',dst:0}) ->format="24h","12hNS","12h","Float" * sun('Riyadh') --> {rise:"5:00",set:"18:50"} sun('Riyadh',new Date('11/25/2014'),{}); sun() * */ JsDK.overload(api,'sun');api.sun.meta={}; api.sun.meta.DEFAULT_OPTS={date:()=>new Date(),tz:()=>-parseInt((new Date().getTimezoneOffset())/60)} api.sun_2_number_number=function(lat,long){ return api.sun_3_number_number_number(lat,long,0); }; api.sun_3_number_number_number=function(lat,long,elevation){ return api.sun_3_object_object_object([lat,long,elevation],api.sun.meta.DEFAULT_OPTS.date(),{}) }; api.sun_3_object_object_object=function(lle,date,opts){ opts=JsDK.extends(opts,{tz:api.sun.meta.DEFAULT_OPTS.tz(),dst:0,format:'24h'}); let times=salatTime.getTimes(date, lle, opts.tz,opts.dst,opts.format); return {rise:times.sunrise,set:times.sunset}; }; api.sun_1_string=function(city){ return api.sun_2_string_object(city,new Date()); } api.sun_2_string_object=function(city,date){ return api.sun_3_string_object_object(city,date,{}); }; api.sun_3_string_object_object=function(city,date,opts){ let coords=api.coordCity(city); if(coords && coords.length){ coords=coords.map((e)=>api.sun_3_object_object_object([e[0],e[1]],date,opts)); if(coords.length===1){ return coords[0]; } } return coords; }; api.sun.rise=function(){ let result= api.sun(...arguments); if(result && result.rise){ return result.rise; }else if(result && result.length){ return result.map((r)=>r.rise); } }; api.sun.set=function(){ let result= api.sun(...arguments); if(result && result.set){ return result.set; }else if(result && result.length){ return result.map((r)=>r.set); } }; module.exports=api.sun; })(require('x-class'),require('node-etl'),require('./db/load.js'),{},require('./salat_times.js'),function(){console.log(...arguments)});