diff --git a/components/DateAndTime.js b/components/DateAndTime.js index f157099..b8d245e 100644 --- a/components/DateAndTime.js +++ b/components/DateAndTime.js @@ -1,23 +1,16 @@ -import { convertTime, timeToAMPM } from "../services/converters"; -import { getWeekDay, getTime, isPM } from "../services/utils"; +import { unixToLocalTime, timeTo12HourFormat } from "../services/converters"; +import { getTime, getWeekDay, getAMPM } from "../services/utils"; import styles from "./DateAndTime.module.css"; const DateAndTime = ({ weatherData, systemUsed }) => { return (

- {getWeekDay(weatherData)},{" "} - {systemUsed == "metric" - ? parseInt( - convertTime(weatherData.dt, weatherData.timezone)[0].split(":")[0] - ) - : timeToAMPM( - convertTime(weatherData.dt, weatherData.timezone)[0] - ).split(":")[0]} - :00{" "} - {systemUsed == "imperial" - ? isPM(convertTime(weatherData.dt, weatherData.timezone)[0]) - : ""} + {`${getWeekDay(weatherData)} ${getTime( + systemUsed, + weatherData.dt, + weatherData.timezone + )} ${getAMPM(systemUsed, weatherData.dt, weatherData.timezone)}`}

); }; diff --git a/services/converters.js b/services/converters.js index 84ae7d4..b038a9f 100644 --- a/services/converters.js +++ b/services/converters.js @@ -1,18 +1,18 @@ -export const ctoF = (c) => (c * 9) / 5 + 32; +export const ctoF = (c) => (c * 9) / 5 + 32; //celsius to fahrenheit -export const mpsToMph = (mps) => (mps * 2.236936).toFixed(2); +export const mpsToMph = (mps) => (mps * 2.236936).toFixed(2); //meters per second - miles per hour -export const kmToM = (km) => (km / 1.609).toFixed(1); +export const kmToMiles = (km) => (km / 1.609).toFixed(1); //kilometers to miles -export const timeToAMPM = (time) => { - let hours = time.split(":")[0]; - let minutes = time.split(":")[1]; - hours = hours % 12; - hours = hours ? hours : 12; - return hours + ":" + minutes; +export const timeTo12HourFormat = (time) => { + //23:43 to 11:43 + const [hours, minutes] = time.split(":"); + const remain = hours % 12; + return `${remain ? remain : 12}:${minutes}`; }; export const degToCompass = (num) => { + //degree to compass direction var val = Math.floor(num / 22.5 + 0.5); var arr = [ "N", @@ -35,10 +35,14 @@ export const degToCompass = (num) => { return arr[val % 16]; }; -export const convertTime = (unixSeconds, timezone) => { - const time = new Date((unixSeconds + timezone) * 1000) +// unixToLocalTime +export const unixToLocalTime = (unixSeconds, timezone) => { + //convert time to 19:23 (last received data in 24h format) + let time = new Date((unixSeconds + timezone) * 1000) .toISOString() - .match(/(\d{2}:\d{2})/); + .match(/(\d{2}:\d{2})/)[0]; - return time; + // console.log(time); + // time = time.startsWith("0") ? time.substring(1) : time; + return time.startsWith("0") ? time.substring(1) : time; }; diff --git a/services/utils.js b/services/utils.js index eae526d..a9676fd 100644 --- a/services/utils.js +++ b/services/utils.js @@ -1,6 +1,35 @@ -import { convertTime, kmToM, mpsToMph, timeToAMPM } from "./converters"; +import { + unixToLocalTime, + kmToMiles, + mpsToMph, + timeTo12HourFormat, +} from "./converters"; + +export const getWindSpeed = (systemUsed, windInMps) => + systemUsed == "metric" ? windInMps : mpsToMph(windInMps); //meters per second to miles per hour + +export const getVisibility = ( + systemUsed, + visibilityInMeters // visibility in kilometers or in miles +) => + systemUsed == "metric" + ? (visibilityInMeters / 1000).toFixed(1) + : kmToMiles(visibilityInMeters / 1000); + +export const getTime = (systemUsed, currentTime, timezone) => + systemUsed == "metric" + ? unixToLocalTime(currentTime, timezone) + : timeTo12HourFormat(unixToLocalTime(currentTime, timezone)); + +export const getAMPM = (systemUsed, currentTime, timezone) => + systemUsed === "imperial" + ? unixToLocalTime(currentTime, timezone).split(":")[0] >= 12 + ? "PM" + : "AM" + : ""; export const getWeekDay = (weatherData) => { + //get the name of the week day const weekday = [ "Sunday", "Monday", @@ -11,31 +40,6 @@ export const getWeekDay = (weatherData) => { "Saturday", ]; return weekday[ - new Date( - convertTime(weatherData.dt, weatherData.timezone).input - ).getUTCDay() + new Date((weatherData.dt + weatherData.timezone) * 1000).getUTCDay() ]; }; - -export const isPM = (time) => { - let hours = time.split(":")[0]; - return hours >= 12 ? "PM" : "AM"; -}; - -export const getWindSpeed = (systemUsed, windInMph) => - systemUsed == "metric" ? windInMph : mpsToMph(windInMph); - -export const getVisibility = (systemUsed, visibilityInKm) => - systemUsed == "metric" - ? (visibilityInKm / 1000).toPrecision(2) - : kmToM(visibilityInKm / 1000); - -export const getTime = (systemUsed, currentTime, timezone) => - systemUsed == "metric" - ? `${parseInt(convertTime(currentTime, timezone)[0].split(":")[0])}:${ - convertTime(currentTime, timezone)[0].split(":")[1] - }` - : timeToAMPM(convertTime(currentTime, timezone)[0]); - -export const getAMPM = (systemUsed, currentTime, timezone) => - systemUsed == "imperial" ? isPM(convertTime(currentTime, timezone)[0]) : "";