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
JavaScript
((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)});