Javascript new Date () Concat Дата и время не работают на мобильных браузерах - PullRequest
0 голосов
/ 15 октября 2018

Я использую скрипт с открытым исходным кодом , который добавляет событие во внешний календарь.Я также использую момент, чтобы изменить формат времени.

  this.addToCalendar = createCalendar({
    options: {
      class: 'addtocal-btn',
      id: 'event-' + this.item.id                                // You need to pass an ID. If you don't, one will be generated for you.
    },
    data: {
      title: this.item.title,     // Event title
      start: new Date(this.calendarDate(this.item.start_date) + ' ' + moment(this.item.start_time, ["h:mm A"]).format("HH:mm")),   // Event start date
      end: new Date(this.calendarDate(this.item.end_date) + ' ' + moment(this.item.end_time, ["h:mm A"]).format("HH:mm")),     // You can also choose to set an end time.
      address: this.item.location,
      description: this.item.description,
      timezone: 'America/Detroit'
    }
  });

К сожалению, дата и время разделены в базе данных, и поэтому я должен объединить две функции Date ().

Примером start_date будет '2018-10-15 00:00:00', тогда как примером start_time будет '10: 00 pm'. Поэтому я должен запустить start_date через функцию и start_time через моментчтобы получить правильное форматирование.

// If 2018-10-15 00:00:00 is passed, returns 2018-10-15
calendarDate: function (value) {
  var arr = value.split(' ');
  return arr[0]
},

В любом случае проблема заключается в в том, что, хотя это прекрасно работает в настольных браузерах, оно НЕ работает в мобильных браузерах.И так как я не могу провести какое-либо тестирование непосредственно на мобильном устройстве, я не могу диагностировать проблему напрямую.

Мне удалось сузить проблему до объединения даты и времени, ноЯ не знаю, почему браузеры настольных компьютеров принимают это, а мобильные браузеры - нет (к вашему сведению, я пробовал это в Safari и Chrome на iPhone6s Plus)

1 Ответ

0 голосов
/ 15 октября 2018

Похоже, что мобильным браузерам (по какой-либо причине) не понравился формат ("ЧЧ: мм") момента.Поэтому я просто исключил момент и преобразовал AM / PM в 24-часовой формат вручную (используя код отсюда ):

convertTimeformat: function(time) {
    var hours = Number(time.match(/^(\d+)/)[1]);
    var minutes = Number(time.match(/:(\d+)/)[1]);
    var AMPM = time.match(/\s(.*)$/)[1];
    if (AMPM == "p.m." && hours < 12) hours = hours + 12;
    if (AMPM == "a.m." && hours == 12) hours = hours - 12;
    var sHours = hours.toString();
    var sMinutes = minutes.toString();
    if (hours < 10) sHours = "0" + sHours;
    if (minutes < 10) sMinutes = "0" + sMinutes;
    return sHours + ':' + sMinutes;
}

Затем, чтобы создать новую дату ():

var start_datetime = moment(this.calendarDate(this.item.start_date) + ' ' + this.convertTimeformat(this.item.start_time));

var end_datetime = moment(this.calendarDate(this.item.end_date) + ' ' + this.convertTimeformat(this.item.end_time));

  this.addToCalendar = createCalendar({
    options: {
      class: 'addtocal-btn',
      id: 'event-' + this.item.id                                // You need to pass an ID. If you don't, one will be generated for you.
    },
    data: {
      title: this.item.title,
      start: new Date(start_datetime),
      end: new Date(end_datetime),
      address: this.item.location,
      description: this.item.description,
      timezone: 'America/Detroit'
    }
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...