Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在自定义格式化程序中使用外部库?_Javascript_Jquery_Jqgrid_Momentjs_Free Jqgrid - Fatal编程技术网

Javascript 如何在自定义格式化程序中使用外部库?

Javascript 如何在自定义格式化程序中使用外部库?,javascript,jquery,jqgrid,momentjs,free-jqgrid,Javascript,Jquery,Jqgrid,Momentjs,Free Jqgrid,我有一些数据以时间戳的形式出现,所以我需要在它发送给最终用户之前对其进行格式化。我没有找到任何方法来使用jQgrid中的 我已经说过,我正在尝试混合使用本机Javascript,并在显示数据之前格式化数据 我做的第一件事是在加载jqgrid之前加载库momentjs: 接下来,我创建了一个用于该列的自定义格式化程序: $.extend$.fn.f格式{ customTimestampToDate:函数cellvalue、选项、行数据{ var parsed_timestamp=parseIntr

我有一些数据以时间戳的形式出现,所以我需要在它发送给最终用户之前对其进行格式化。我没有找到任何方法来使用jQgrid中的

我已经说过,我正在尝试混合使用本机Javascript,并在显示数据之前格式化数据

我做的第一件事是在加载jqgrid之前加载库momentjs:

接下来,我创建了一个用于该列的自定义格式化程序:

$.extend$.fn.f格式{ customTimestampToDate:函数cellvalue、选项、行数据{ var parsed_timestamp=parseIntrowdata.timestamp, tmp=新的Dateparsed_时间戳*1000.toISOString; console.logtypeof cellvalue;//日志字符串 console.logtypeof rowdata.timestamp;//日志字符串 console.logtypeof解析的_timestamp;//日志编号 console.logtmp;//日志2018-01-15T14:19:28.000Z 返回力矩; } }; 最后,我尝试在colModel中使用自定义格式化程序:

colModel:[ {name:act,template:actions,width:115}, {name:username,search:true,stype:text}, {name:email,search:true,stype:text}, {name:first_name,search:true,stype:text}, {name:last_name,search:true,stype:text}, {name:company,search:true,stype:text}, {name:request_uri,search:true,stype:text}, {name:client_ip,search:true,stype:text}, { 名称:时间戳, 搜索:对, 字体:文本, 格式化程序:customTimestampToDate } ], 由于某种原因,我得到的是时间戳值,而不是格式化的值,我不知道为什么或者如何得到

我一直在玩momentjs,它按预期工作。我也在jqgrid中使用momentjs,正如我在这里展示的,它不起作用

问题:这里的问题是在网格渲染之后,值在时间戳列显示为字符串| int,这意味着列上的值就是时间戳。期望值将是逐时刻格式化的值,不管它是否正确格式化,这是另一个不同的问题

我的猜测是,在构建网格或类似的东西时,库尚未加载,但我一点也不确定

有什么想法吗

注意:也许有一个简单的方法可以使用预定义的格式化程序来实现这一点,但我找不到它,如果你知道的话,请告诉我

正如政府所说:

要打印某个时刻的值,请使用.format、.toString或.toISOString

您的代码可能如下所示:

customTimestampToDate: function (cellvalue, options, rowdata) {
    var parsed_timestamp = parseInt(rowdata.timestamp),
        tmp = new Date(parsed_timestamp * 1000).toISOString();

    return moment(tmp).format();
}
您可以通过符合ISO 8601标准的字符串将格式标记传递给或用于输出


请注意,矩也接受以秒为单位的Unix时间戳,因此您可以在本例中使用:return-moment.unixrowdata.timestamp.format

您不需要使用“时刻”。只需使用srcu格式,它是Unix时间戳,网格就会完成这项工作

formatter : 'date', formatoptions : { 
    srcformat : 'u',
    newformat : 'Y-m-d H:i:s'
} 

要在jqGrid中显示时间戳,可以使用预定义的格式化程序日期,而不是自定义格式化程序:customTimestampToDate。你可以替换

formatter: "customTimestampToDate"
比如,

formatter: "date", sorttype: "date",
formatoptions: {srcformat: "u", newformat: "n/j/Y g:i:s A"}
SRC格式可以是u或u1000,具体取决于输入的时间戳。newformat的默认值为n/j/Y,但您可以将其更改为另一个值。您应该使用PHP格式语法,请参阅


仅当预定义的格式化程序不能满足您的需要时,建议使用自定义格式化程序。例如,您可以使用moment插件对日期进行高级格式化。如果您定义格式化程序,您不应该忘记始终定义unformat回调函数。例如,编辑数据时需要它。

不工作是什么意思?我想您必须使用矩。@VincenzoC not working==我得到的是时间戳值,而不是格式化的值。事实并非如此,我不需要使用格式,因为momentjs直接支持时间戳。另外,如果你看看小提琴的例子,你会发现什么不起作用对不起,我错过了你问题的那一部分,你想要的输出是什么?你是对的,很明显,这是这里遗漏的部分。真高兴这有帮助!不要混淆解析输入和显示力矩对象格式的值。是的,我有点混淆,我认为它应该返回格式化的日期,但不是,thx Againsis建议避免使用自定义格式化程序,除非严格需要,然后我已切换到Oleg answer,但这两种解决方案都能正常工作。@ReynierPM:是的,我建议您使用它。如果您定义了自定义格式化程序,我建议您始终编写unformat,即使您目前不需要它。后来,如果你真的需要它,你会忘记定义unformat。通过使用formatter:date、sorttype:date,您将确保所有数据的显示和格式与输入数据的格式或显示数据的格式无关。最重要的是,您可能需要定义自定义操作,请参阅。