【问题标题】:Carbon Error in Internet Explorer 11 / Microsoft EdgeInternet Explorer 11 / Microsoft Edge 中的 Carbon 错误
【发布时间】:2018-06-22 09:33:51
【问题描述】:

我最近发现我的网站在 Internet Explorer 11 和 Microsoft Edge 中出现错误。适用于所有其他浏览器。

当我在 Laravel 中使用 Carbon 创建日期时发生错误。

代码:

$date = new Carbon(request('date'));

request('date') 类似于 "YYYY-mm-dd",在其他浏览器中也能完美运行。

我在这条线上得到的错误是:

DateTime::__construct():在位置 0 (�) 解析时间字符串 (‎2018-‎06-‎13) 失败:意外字符

我尝试了很多其他方法来创建 Carbon 实例,在其他 borsers 中都可以正常工作,但在这些方法中不行。

任何想法,什么会导致问题?

编辑: javascript 发送的数据在本例中是一个字符串“2018-06-13”。我试图分解字符串,然后重新连接,并转换一些其他方式。 它在大多数浏览器中显示 string(10) "2018-06-13", 和 string(19) "‎2018-‎06-‎13" 在 Internet Explorer 中,这真的很奇怪。

编辑2: 用于创建日历天数的脚本(Vue2.js):

weeks: function () {
            var dayCount = this.calendar.days(this.displayedYear, this.displayedMonth),
                dayIndex = this.calendar.day(this.displayedYear, this.displayedMonth, 0).getDay(),
                weekCount = Math.ceil((dayCount + dayIndex) / 7);

            var weeks = [];

            for (var i = 0; i < weekCount; i++) {
                var week = [];

                for (var j = 0; j < 7; j++) {
                    var date = new Date(
                        this.displayedYear,
                        this.displayedMonth - 1,
                        i * 7 + j - dayIndex + 1
                    );

                    week.push(
                        date.getMonth() === this.displayedMonth - 1
                            ? date : null
                    );
                }

                weeks[i] = week;
            }

            return weeks;

展示用刀片:

<tr v-for="week in weeks()">
                <td
                        v-for="day in week"
                        @click="setSelectionPivot(day)"
                        :class="classes(day)">
                    <span>
                        @{{ (day == null) ? '' : day.getDate() }}
                    </span>
                </td>
            </tr>

要处理的函数部分:

this.selection = day;

然后我通过 ajax 将其传递给发生错误的代码。询问是否需要其他任何东西。 我不明白的是它如何在任何其他浏览器中完美运行?

【问题讨论】:

  • 如果您声明请求“喜欢”某物,您能否分享成功和失败尝试的真实数据?
  • 这看起来像是浏览器将数据发送到服务器而不是 Carbon 的方式的问题。你能告诉我们生成这个请求的表单或javascript吗?
  • 我认为问题与 PHP 无关,而与数据发送到服务器的方式有关。似乎您的日期字符串之前有一个不可见的字符,这会导致错误。您必须显示用于发送数据的代码
  • 您必须显示用于发送数据的代码
  • 代码相当复杂,分为4个文件。您究竟需要哪一部分?创建日期的部分?

标签: php laravel datetime internet-explorer php-carbon


【解决方案1】:

首先检查正在使用的浏览器客户端是否是 Internet Explorer 11/Microsoft Edge,然后像这样解析日期:

$req->time->toDateTime()->format('d-m-Y H:i:s A')    //I assume you already get time value from view

要检查哪个浏览器客户端正在使用,请点击此链接:PHP function to get browser

【讨论】:

    【解决方案2】:

    我找到了解决方案。 在 Carbon 实例之前,我只是这样做:

    $date = preg_replace('/[^0-9, -]/', '', request('date'));
    $date = new Carbon($date);
    

    它删除了 9 个随机字符。仍然不知道为什么会发生,在 IE 和 Edge 中。

    【讨论】:

      猜你喜欢
      • 2017-11-11
      • 2022-11-05
      • 2015-10-25
      • 2015-06-14
      • 1970-01-01
      • 2018-06-08
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      相关资源
      最近更新 更多