2017-01-26 4 views
0

Я хочу отправить сообщение пользователю чата, а затем я сохраняю свое сообщение с датой в формате синтаксиса в моей базе данных. Так что, когда я должен получить историю чата я должен показать время, как это:Как получить сегодня, вчера или день в javascript

  1. если дата сегодня показывают время (3 вечера и т.д.)
  2. если дата один день предыдущего шоу вчера
  3. если день в названии той же неделе шоу день (т.е. воскресенье и т.д.)
  4. все остальные показывают точную дату

Я попытался это:

var now = moment(new Date()); //todays date 
var end = moment("2015-12-1"); // another date 
var differn = now.diff(end, 'days'); 

Как это сделать в JavaScript? Я попытался использовать momentjs.

+2

Взгляните на документы MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date Enjoy! :) – RhinoDevel

ответ

1

Один из способов сделать это следующим образом:

function getMyText(date){ 
 
    if(!moment.isMoment(date)){ 
 
    date = moment(date); // ok for js date, milliseconds or string in ISO format 
 
    } 
 
    
 
    if(date.isSame(moment(), 'day')){ 
 
    return date.format('hh:mm a'); 
 
    } else if(date.isSame(moment().subtract(1, 'd'), 'day')){ 
 
    return 'Yesterday'; 
 
    } else if(date.isSame(moment(), 'week')){ 
 
    return date.format('dddd'); 
 
    } else { 
 
    return date.format('DD/MM/YYYY'); 
 
    } 
 
} 
 

 
var input = [ 
 
    moment(), // now 
 
    moment().subtract(22, 'h'), // 22 hours ago 
 
    moment().subtract(3, 'd'), // 3 days ago 
 
    moment().subtract(6, 'd'), // 6 days ago 
 
    moment().subtract(15, 'd') // 15 days ago 
 
]; 
 

 
for(var i=0; i<input.length; i++){ 
 
    console.log(getMyText(input[i])); 
 
}
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>

Он использует момент isSame, format и subtract

+0

nice, избили меня до этого :) – alebianco

+0

@alebianco всего несколько секунд, ваш ответ тоже приятный :) – VincenzoC

2

, так как вы уже используете moment.js, вы можете использовать функциональность календарного времени

var formats = { 
 
    sameDay: '[Today]', 
 
    nextDay: '[Tomorrow]', 
 
    nextWeek: 'dddd', 
 
    lastDay: '[Yesterday]', 
 
    lastWeek: '[Last] dddd', 
 
    sameElse: 'DD/MM/YYYY' 
 
} 
 
var date = new Date() 
 
var output = moment().calendar(date, formats); 
 
console.log(output)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>

взглянуть на documentation дополнительные примеры

+0

Спасибо, что это отлично работает –

+0

@ NazarHussain, пожалуйста, отметьте ответ как принятый, если он решает вашу проблему, вы получаете также +2 репутации за это. – VincenzoC

+0

Как я могу ответить? –