Guest User

Untitled

a guest
Oct 19th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. const oneSecond = () => 1000
  2. const getCurrentTime = () => new Date()
  3. const clear = () => console.clear()
  4. const log = message => console.log(message)
  5.  
  6. // Pure functions
  7. const serializeClockTime = (date) =>
  8. ({
  9. hours: date.getHours(),
  10. minutes: date.getMinutes(),
  11. seconds: date.getSeconds(),
  12. })
  13.  
  14. const civilianHours = clockTime =>
  15. ({
  16. ...clockTime,
  17. hours: (clockTime.hours > 12) ? clockTime.hours - 12 : clockTime.hours
  18. })
  19.  
  20. const appendAMPM = clockTime =>
  21. ({
  22. ...clockTime,
  23. ampm: (clockTime.hours >= 12) ? "PM" : "AM"
  24. })
  25.  
  26. const display = target => time => target(time)
  27.  
  28. const formatClock = format =>
  29. time =>
  30. format.replace("hh", time.hours)
  31. .replace("mm", time.minutes),
  32. .replace("ss", time.seconds),
  33. .replace("tt", time.ampm)
  34.  
  35. const prependZero = key => clockTime =>
  36. ({
  37. ...clockTime,
  38. [key]: (clockTime[key] < 10) ? "0" + clockTime[key] : clockTime[key]
  39. })
  40.  
  41.  
  42.  
  43. const convertToCivilianTime = clockTime =>
  44. compose(
  45. appendAMPM,
  46. civilianHours
  47. )(clockTime)
  48.  
  49. const doubleDigits = civilianTime =>
  50. compose(
  51. prependZero("hours"),
  52. prependZero("minutes"),
  53. prependZero("seconds")
  54. )(civilianTime)
  55.  
  56. const startTicking = () =>
  57. setInterval(
  58. compose(
  59. clear,
  60. getCurrentTime,
  61. serializeClockTime,
  62. convertToCivilianTime,
  63. doubleDigits,
  64. formatClock("hh:mm:ss tt"),
  65. display(log)
  66. )
  67. ), oneSecond()
  68.  
  69. startTicking()
Add Comment
Please, Sign In to add comment