59 lines
No EOL
1.7 KiB
CoffeeScript
59 lines
No EOL
1.7 KiB
CoffeeScript
class Time
|
|
since: (timestamp) ->
|
|
now = +(new Date)/1000
|
|
if timestamp > 1000000000000 # In ms
|
|
timestamp = timestamp/1000
|
|
secs = now - timestamp
|
|
if secs < 60
|
|
back = "Just now"
|
|
else if secs < 60*60
|
|
minutes = Math.round(secs/60)
|
|
back = "" + minutes + " minutes ago"
|
|
else if secs < 60*60*24
|
|
back = "#{Math.round(secs/60/60)} hours ago"
|
|
else if secs < 60*60*24*3
|
|
back = "#{Math.round(secs/60/60/24)} days ago"
|
|
else
|
|
back = "on "+@date(timestamp)
|
|
back = back.replace(/^1 ([a-z]+)s/, "1 $1") # 1 days ago fix
|
|
return back
|
|
|
|
dateIso: (timestamp=null) ->
|
|
if not timestamp
|
|
timestamp = window.Time.timestamp()
|
|
|
|
if timestamp > 1000000000000 # In ms
|
|
timestamp = timestamp/1000
|
|
tzoffset = (new Date()).getTimezoneOffset() * 60
|
|
return (new Date((timestamp - tzoffset) * 1000)).toISOString().split("T")[0]
|
|
|
|
date: (timestamp=null, format="short") ->
|
|
if not timestamp
|
|
timestamp = window.Time.timestamp()
|
|
|
|
if timestamp > 1000000000000 # In ms
|
|
timestamp = timestamp/1000
|
|
parts = (new Date(timestamp * 1000)).toString().split(" ")
|
|
if format == "short"
|
|
display = parts.slice(1, 4)
|
|
else if format == "day"
|
|
display = parts.slice(1, 3)
|
|
else if format == "month"
|
|
display = [parts[1], parts[3]]
|
|
else if format == "long"
|
|
display = parts.slice(1, 5)
|
|
return display.join(" ").replace(/( [0-9]{4})/, ",$1")
|
|
|
|
weekDay: (timestamp) ->
|
|
if timestamp > 1000000000000 # In ms
|
|
timestamp = timestamp/1000
|
|
return ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"][ (new Date(timestamp * 1000)).getDay() ]
|
|
|
|
timestamp: (date="") ->
|
|
if date == "now" or date == ""
|
|
return parseInt(+(new Date)/1000)
|
|
else
|
|
return parseInt(Date.parse(date)/1000)
|
|
|
|
|
|
window.Time = new Time |