Javascript new Date()Concat日期和时间在移动浏览器上不起作用

时间:2018-10-15 15:25:09

标签: javascript datetime mobile

我正在使用将事件添加到外部日历的open-source script。我还使用时刻来更改时间格式。

  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()函数内部将两者串联起来。

示例开始日期为“ 2018-10-15 00:00:00”,而示例开始时间为“下午10:00”。因此,为什么我必须通过一个函数运行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中尝试过和iPhone6s Plus上的Chrome)

1 个答案:

答案 0 :(得分:0)

因此,无论出于何种原因,移动浏览器似乎都不喜欢当前的.format(“ HH:mm”)。因此,我完全放弃了片刻,将AM / PM手动转换为24小时格式(使用代码from here):

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;
}

然后创建新的Date():

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'
    }
  });