реагировать js формат даты с моментом - PullRequest
0 голосов
/ 07 мая 2020

введите код здесь введите код здесь

var start_date = ["2020-05-07 18:30:00"];
var header_date_array =  ["2020-05-07 12:59:12 PM", "2020-05-07 14:29:12 PM", "2020-05-07 18:30:00 PM", "2020-05-07 20:29:12 
PM"];


//match or compare date with same format 
//what i should i do?

//this is my logic, but it is not working
 const isSameDate = (start_date, header_date) => {
   const startDate = moment(start_date);
   const headerDate = moment(header_date_array);

   return startDate.isSame(headerDate, 'day');
 }
console.log(isSameDate);

Я столкнулся с проблемой в React js. Я хочу сравнить / сопоставить две даты start_end или header_date и показать на странице компонента рендеринга.

Мой пример кода:

          {this.state.appointmentdata.map(data => 
              { const dateTime = moment(data.start_date.toString()); //start_date
                const headerDate = moment(this.state.headerdatearray);    //header_date
                return headerDate.isSame(dateTime, 'day');
            })
          }

данные console.log (формат даты)

start_date: 2020-05-07 02:15:00     //format: "YYYY-MM-DD HH:mm:ss"

header_date array: ["11:57:16 AM", "11:27:16 AM"] 

Но формат даты другой. как я могу получить ту же дату в том же формате?

кто-нибудь мне поможет?

Ответы [ 3 ]

0 голосов
/ 07 мая 2020

Для этого может быть несколько вариантов:

Выполнить эту команду в терминале:

npm install moment --save

Использование в React js Компонент:

import Moment from 'moment';

render(){
    Moment.locale('en');
    var dt = '2020-05-07T02:15:00';
    return(<View> {Moment(dt).format('d MMM')} </View>)
}

Вы можете проверить момент. js здесь официальные документы https://momentjs.com/docs/

Или вы можете использовать этот пакет

npm install date-fns --save

Использование в коде:

import { format } from "date-fns";

var date = new Date("2020-05-07 02:15:00");

var formattedDate = format(date, "MMMM Do, YYYY H:mma");

console.log(formattedDate);
0 голосов
/ 07 мая 2020

Даты заголовка представляют собой массив, поэтому вы, вероятно, захотите перебрать его, построив для каждого объект luxon DateTime и проверить, совпадает ли он second с указанной датой начала. Проверка seconds unit включает все более крупные единицы, т.е. те же минуты, час, день, неделя и т.д. true.

Изменить: я не смог заставить форматирование работать должным образом, используя momenjs, и, поскольку вы были открыты для альтернативных предложений, IMO luxon - лучшая утилита для обработки объектов DateTime ( это сделано той же организацией, кстати)

const isSameDate = (start_date, header_date_array) => {
  const startDate = DateTime.fromFormat(start_date, 'yyyy-MM-dd HH:mm:ss');
  return header_date_array.some(header_date => {
    const headerDate = DateTime.fromFormat(header_date, 'yyyy-MM-dd hh:mm:ss a');
    return startDate.hasSame(headerDate, "second");
  });
};

Указанный массив даты заголовка и данные встречи:

const header_date_array = [
  "2020-05-07 12:59:12 PM",
  "2020-05-07 14:29:12 PM",
  "2020-05-07 18:30:00 PM",
  "2020-05-07 20:29:12 PM"
];

const appointmentData = [
  {
    start_date: "2020-05-07 18:30:00"
  },
  {
    start_date: "2020-05-07 09:30:00"
  },
  {
    start_date: "2020-05-08 18:30:00"
  },
  {
    start_date: "2020-05-08 09:30:00"
  }
];

Карта как таковая

appointmentData.map(({ start_date }) =>
  isSameDate(start_date, header_date_array)
)

[true, false, false, false]

Edit heuristic-cookies-n8xx4

0 голосов
/ 07 мая 2020

В соответствии с вашей текущей структурой кода, я попробовал, как показано ниже:

var start_date = ["2020-05-07 18:30:00"];
var header_date_array =  ["2020-05-07 12:59:12 PM", "2020-05-07 14:29:12 PM", "2020-05-07 18:30:00 PM", "2020-05-07 20:29:12 
PM"];

Если start_date является массивом,

this.start_date.map(start_date => {
  this.isSameDate(start_date, this.header_date_array);
  console.log(this.isSameDate(start_date, this.header_date_array));
})

const isSameDate = (start_date, header_date) => {
  const startDate = [moment.utc(start_date).format('L'), moment.utc(start_date).format('LTS')].join(' '); // You can replace LTS with LT to eliminate seconds.
  let flag;
  header_date.map(d => {
    d = d.substring(0, d.indexOf("PM")); // if I don't remove "PM", then moment says invalid Date. I have not dug in-depth to find reason.
    const headerDate = [moment.utc(d).format('L'), moment.utc(d).format('LTS')].join(' '); //Again here You can replace LTS with LT to eliminate seconds.
    startDate == headerDate ? flag = headerDate : flag = 'no appointment logged';
  })
  return flag; // you can use 'start_date' in order to return date instead.
}
...