Дата в часовом поясе конвертирует дату в «Сегодня», «Вчера», «2 дня a go» и др. c. в Javascript - PullRequest
1 голос
/ 18 марта 2020

У меня есть новостная лента, и я хочу отобразить время публикации статьи просто как Сегодня, Вчера, 2 дня, 3 дня go, et c. Я просто хочу сохранить формат ГГГГ-ММ-ДД и избавиться от части часового пояса. Однако в 8 вечера по Нью-Йорку C по восточному времени (ET) даты меняются, например, с 2 дней go до 3 дней go. Как я могу убедиться, что это изменение вносится только в полночь по восточному времени каждый день?

Пример даты статьи: 2020-03-17T04: 00: 00.000Z

Текущий код:

 convertDateLiteral(article_date: string) {
    const newDt = article_date.split('T')[0];
    let date = moment(newDt);
    if (moment({hours: 0}).diff(date, 'days') >= 2) {
            return date.add(1,'d').fromNow(); // '2 days ago' etc.
    }
    //console.log(date.calendar().split(' ')[0])
    return date.calendar().split(' ')[0]
    }

1 Ответ

0 голосов
/ 19 марта 2020

Учитывая строки дат в формате ISO 8601, вы можете конвертировать в объекты Date, обнулять время, затем сравнивать с сегодняшней датой с обнуленным временем и округлением для изменения летнего времени, если таковые имеются. Например,

function getEvenDaysDiff(d) {
  let now = new Date();
  now.setHours(0,0,0,0);
  let then = new Date(d);
  then.setHours(0,0,0,0);
  return Math.round((now - then) / 8.64e7);
}

function parseAndFormatDate(d) {
  d = new Date(d);
  let z = n => (n<10?'0':'')+n;
  return d.getFullYear() + '-' +
         z(d.getMonth()+1) + '-' +
         z(d.getDate());  
}

// test - dates are UTC so local dates may differ
let dates = [
 '2020-03-17T04:00:00.000Z',
 '2020-03-16T14:00:00.000Z',
 '2020-03-12T04:30:00.000Z',
 '2020-02-17T12:00:00.000Z'
].forEach(
  s => console.log(parseAndFormatDate(s) + ' ' + getEvenDaysDiff(s) + ' days ago.')
);

Обратите внимание, что поскольку метками времени являются UT C, дата, которую они представляют, может отличаться от эквивалентной локальной даты. Я предположил, что вы хотите отличия от местных дат. Если вы хотите UT C, тогда используйте методы UT C в getEvenDaysDiff , а функция parseAndFormatDate является излишней.

...