@ -3,6 +3,7 @@ import { injectIntl, defineMessages } from 'react-intl';
import PropTypes from 'prop-types' ;
import PropTypes from 'prop-types' ;
const messages = defineMessages ( {
const messages = defineMessages ( {
today : { id : 'relative_time.today' , defaultMessage : 'today' } ,
just _now : { id : 'relative_time.just_now' , defaultMessage : 'now' } ,
just _now : { id : 'relative_time.just_now' , defaultMessage : 'now' } ,
seconds : { id : 'relative_time.seconds' , defaultMessage : '{number}s' } ,
seconds : { id : 'relative_time.seconds' , defaultMessage : '{number}s' } ,
minutes : { id : 'relative_time.minutes' , defaultMessage : '{number}m' } ,
minutes : { id : 'relative_time.minutes' , defaultMessage : '{number}m' } ,
@ -65,12 +66,14 @@ const getUnitDelay = units => {
}
}
} ;
} ;
export const timeAgoString = ( intl , date , now , year ) => {
export const timeAgoString = ( intl , date , now , year , timeGiven = true ) => {
const delta = now - date . getTime ( ) ;
const delta = now - date . getTime ( ) ;
let relativeTime ;
let relativeTime ;
if ( delta < 10 * SECOND ) {
if ( delta < DAY && ! timeGiven ) {
relativeTime = intl . formatMessage ( messages . today ) ;
} else if ( delta < 10 * SECOND ) {
relativeTime = intl . formatMessage ( messages . just _now ) ;
relativeTime = intl . formatMessage ( messages . just _now ) ;
} else if ( delta < 7 * DAY ) {
} else if ( delta < 7 * DAY ) {
if ( delta < MINUTE ) {
if ( delta < MINUTE ) {
@ -91,12 +94,14 @@ export const timeAgoString = (intl, date, now, year) => {
return relativeTime ;
return relativeTime ;
} ;
} ;
const timeRemainingString = ( intl , date , now ) => {
const timeRemainingString = ( intl , date , now , timeGiven = true ) => {
const delta = date . getTime ( ) - now ;
const delta = date . getTime ( ) - now ;
let relativeTime ;
let relativeTime ;
if ( delta < 10 * SECOND ) {
if ( delta < DAY && ! timeGiven ) {
relativeTime = intl . formatMessage ( messages . today ) ;
} else if ( delta < 10 * SECOND ) {
relativeTime = intl . formatMessage ( messages . moments _remaining ) ;
relativeTime = intl . formatMessage ( messages . moments _remaining ) ;
} else if ( delta < MINUTE ) {
} else if ( delta < MINUTE ) {
relativeTime = intl . formatMessage ( messages . seconds _remaining , { number : Math . floor ( delta / SECOND ) } ) ;
relativeTime = intl . formatMessage ( messages . seconds _remaining , { number : Math . floor ( delta / SECOND ) } ) ;
@ -173,8 +178,9 @@ class RelativeTimestamp extends React.Component {
render ( ) {
render ( ) {
const { timestamp , intl , year , futureDate } = this . props ;
const { timestamp , intl , year , futureDate } = this . props ;
const timeGiven = timestamp . includes ( 'T' ) ;
const date = new Date ( timestamp ) ;
const date = new Date ( timestamp ) ;
const relativeTime = futureDate ? timeRemainingString ( intl , date , this . state . now ) : timeAgoString ( intl , date , this . state . now , year ) ;
const relativeTime = futureDate ? timeRemainingString ( intl , date , this . state . now , timeGiven ) : timeAgoString ( intl , date , this . state . now , year , timeGiven ) ;
return (
return (
< time dateTime = { timestamp } title = { intl . formatDate ( date , dateFormatOptions ) } >
< time dateTime = { timestamp } title = { intl . formatDate ( date , dateFormatOptions ) } >