122 lines
3.0 KiB
JavaScript
Executable File
122 lines
3.0 KiB
JavaScript
Executable File
|
|
import React, { PropTypes } from 'react'
|
|
|
|
export default class Dater extends React.Component{
|
|
|
|
constructor(props){
|
|
super(props);
|
|
}
|
|
|
|
/**
|
|
* Format time duration
|
|
*
|
|
* @param milliseconds int
|
|
* @return string (HH:mm:ss)
|
|
**/
|
|
durationTime(milliseconds = false){
|
|
if (!milliseconds ) return null
|
|
|
|
var string = '';
|
|
var total_hours, total_minutes, total_seconds, minutes, seconds;
|
|
|
|
// get total values for each
|
|
total_seconds = Math.floor(milliseconds / 1000 )
|
|
total_minutes = Math.floor(milliseconds / (1000 * 60) )
|
|
total_hours = Math.floor(milliseconds / (1000 * 60 * 60))
|
|
|
|
// get left-over number of seconds
|
|
seconds = total_seconds - (total_minutes * 60 )
|
|
if (seconds <= 9) seconds = '0'+ seconds
|
|
if (seconds == 0) seconds = '00'
|
|
|
|
// get left-over number of minutes
|
|
minutes = total_minutes - (total_hours * 60 )
|
|
if (minutes <= 9 && total_hours) minutes = '0'+ minutes
|
|
if (minutes == 0) minutes = '0'
|
|
|
|
if (total_hours) string += total_hours+':'
|
|
if (minutes) string += minutes+':'
|
|
if (seconds) string += seconds
|
|
|
|
return string
|
|
}
|
|
|
|
/**
|
|
* Format time duration as a human-friendly sentence
|
|
*
|
|
* @param milliseconds int
|
|
* @return string (eg 2+ hours)
|
|
**/
|
|
durationSentence(milliseconds = false){
|
|
if (!milliseconds ) return null
|
|
|
|
var string = '';
|
|
var total_hours, total_minutes, total_seconds, minutes, seconds;
|
|
|
|
// get total values for each
|
|
total_seconds = Math.floor(milliseconds / 1000 )
|
|
total_minutes = Math.floor(milliseconds / (1000 * 60) )
|
|
total_hours = Math.floor(milliseconds / (1000 * 60 * 60))
|
|
|
|
if (total_hours > 1 ) return total_hours+'+ hrs'
|
|
if (total_minutes > 1 ) return total_minutes+' mins'
|
|
if (total_seconds ) return total_seconds+' sec'
|
|
}
|
|
|
|
calculate(){
|
|
switch(this.props.type){
|
|
|
|
case 'total-time':
|
|
var duration = 0;
|
|
var tracks = this.props.data
|
|
for(var i = 0; i < tracks.length; i++){
|
|
if (tracks[i].duration ){
|
|
duration += parseInt(tracks[i].duration);
|
|
}
|
|
}
|
|
return this.durationSentence(duration)
|
|
break
|
|
|
|
case 'length':
|
|
return this.durationTime(this.props.data)
|
|
break
|
|
|
|
case 'date':
|
|
var date = new Date(this.props.data)
|
|
return date.getDate()+'/'+date.getMonth()+'/'+date.getFullYear()
|
|
break
|
|
|
|
case 'ago':
|
|
var date = new Date(this.props.data)
|
|
var diff = new Date() - date
|
|
|
|
var seconds = Math.floor(diff / 1000)
|
|
var minutes = Math.floor(diff / (1000 * 60))
|
|
var hours = Math.floor(diff / (1000 * 60 * 60))
|
|
var days = Math.floor(diff / (1000 * 60 * 60 * 24))
|
|
|
|
if (seconds < 60){
|
|
return seconds + " seconds";
|
|
}else if (minutes < 60){
|
|
return minutes + " minutes";
|
|
}else if (hours < 24){
|
|
return hours + " hours";
|
|
} else {
|
|
return days + " days"
|
|
}
|
|
break
|
|
|
|
default:
|
|
return null
|
|
}
|
|
}
|
|
|
|
render(){
|
|
if (!this.props.data){
|
|
return null;
|
|
} else {
|
|
return <span className="dater">{ this.calculate() }</span>
|
|
}
|
|
}
|
|
}
|