【问题标题】:Free jqGrid 4.9.0 - Dates format on Safari on MAC免费 jqGrid 4.9.0 - MAC 上 Safari 上的日期格式
【发布时间】:2015-11-10 15:56:36
【问题描述】:

在 Windows 上工作时在所有主要 4 种浏览器(Safari、Chrome、IE 和 Firefox)上测试日期格式选项效果很好。

但是,在 MAC 机器上测试时,Safari 中的格式选项失败(MAC 上的 Firefox 运行良好)。

我的格式选项是:

gridField.formatter = 'date';
gridField.formatoptions = {};
gridField.formatoptions['srcformat'] = 'U/1000';
gridField.formatoptions['newformat'] = 'm/d/Y H:i:s';

在 Safari 中(仅在 MAC 上)将产生:NaN/NaN/NaN NaN:Nan:NaN。

知道如何解决这个问题吗?

谢谢,

【问题讨论】:

  • 您使用哪些源数据?需要一些测试数据来重现问题。你写了关于免费 jqGrid 4.9.0 的问题。您是否验证免费 jqGrid 4.10.0 和 GitHub 的最新资源中存在相同的问题?您只需将 URL 更改为 free jqGrid 对应于the article。你能准备一个简短的演示,它使用来自 GitHub 的非最小化源代码,并且可以用来重现问题吗?我没有Mac,但我会尝试在其他环境中测试。
  • 当然,Oleg,这里是演示:jsfiddle.net/OlegKi/ngm5rhgp/7
  • 如果您在 MAC 上的 ONLY Safari 中查看演示中的日期,它们将被视为 NaN
  • 我没有任何 MAC。你能试试修改后的演示jsfiddle.net/OlegKi/ngm5rhgp/8吗?
  • 有效!有什么区别?

标签: jquery jqgrid free-jqgrid


【解决方案1】:

问题如下。免费的 jqGrid 使用与 jqGrid 4.7 类似的 $.jgrid.parseDate 函数的代码。它支持两种不同情况在日期格式中使用"u""U"。第一种情况是使用"u""U" 没有任何额外的格式规范(例如,srcformat:"u")。这意味着jqGrid使用new Date(inputValue*1000)来解析输入值。像1418297439 这样的输入值将使用newformat: "m/d/Y H:i:s" 显示为12/11/2014 11:30:39。另一方面,输入数据中有1418297439000 而不是1418297439,并且jqGrid 没有针对这种情况的确切格式化程序。

您在原始演示 http://jsfiddle.net/OlegKi/ngm5rhgp/7/ 中使用格式 srcformat: "U/1000"。这种格式("U/1000")根本不存在。格式 "U/1000" 将以与 "U/""U.""U/BlaBla""U:H:i:s" 或任何其他以 u 开头并后跟分隔符的方式相同的方式进行解释。因为输入数据看起来像1418297439000 并且没有额外的分隔符,/, 和其他一些),所以只有第一个格式化程序 U 会被使用,但它现在将被解释为u 格式化程序,这意味着毫秒。 u 格式通常用于像12/11/2014 11:30:39,123 这样的格式,其中最后123 部分是时间的毫秒部分。

似乎 MAC 上的 Safari 不允许将日期创建为 new Date(1970, 1, 1, 0, 0, 1418297439000),它使用 jqGrid 和 1418297439000 作为输入数据和 srcformat: "U/1000"

我建议你做的是修改输入数据和srcformat: "u"格式的用法。需要枚举所有输入数据项并将start_timeend_time 属性划分为100。我在我的演示中使用了http://jsfiddle.net/OlegKi/ngm5rhgp/8/的代码

var mydata = [{...},{...}... {...}], n = mydata.length, item, i;

for (i = 0; i < n; i++) {
    item = mydata[i];
    item.start_time = Math.floor(item.start_time / 1000);
    item.end_time = Math.floor(item.end_time / 1000);
}

并将srcformat: "U/1000" 替换为srcformat: "u"。如果您没有datatype"local" 值,则可以修改beforeProcessing 回调中的数据。

更新:为了简化自 Unix 纪元(格林威治标准时间 1970 年 1 月 1 日 00:00:00)以来以毫秒为单位的时间处理,例如 1418297439000,我在免费 jqGrid 中引入了 new格式选项:srcformat: "u1000"。新的演示http://jsfiddle.net/OlegKi/ngm5rhgp/9/ 使用 未修改 输入数据,只使用 srcformat: "u1000" 而不是 srcformat: "U/1000"。要使用它,必须使用来自GitHub 的最新免费 jqGrid。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 2015-12-06
    • 2018-05-13
    • 2012-05-24
    相关资源
    最近更新 更多