0

我制作了一个数据表。所有列都是可排序的。它在一列中有一个日期,我将其格式化为 dd/mm/yyyy hh:mm:ss 。这与doco中定义的默认格式不同,但我应该能够为非美国格式定义自己的格式。(见下文)

DataTable 类提供了一组内置静态函数来格式化某些众所周知的数据类型。在您的 Column 定义中,如果您将 Column 的格式化程序设置为 YAHOO.widget.DataTable.formatDate,该函数将使用默认语法“MM/DD/YYYY”呈现 Date 类型的数据。如果您想绕过内置格式化程序而使用自己的格式化程序,可以将 Column 的格式化程序指向您定义的自定义函数。

该表是从 HTML 标记生成的,因此数据保存在 "" 标记中。

这为我提供了有关 javascript 兼容字符串日期的更多线索:

通常,RecordSet 期望以原生 JavaScript 类型保存数据。例如,为了正确排序,日期应该是 JavaScript Date 实例,而不是像“4/26/2005”这样的字符串。通过 DataSource 的 responseSchema 的 fields 数组中的 parser 属性启用在数据进入 RecordSet 时转换数据类型

我怀疑我在日期格式中遗漏了一些东西。那么,如果我想将其格式化为 "dd/mm/yyyy hh:mm:ss" ,那么 Yui dataTable 可以识别的 javascript 可接受的字符串日期是什么?

4

3 回答 3

1

定义您的语言环境

YAHOO.util.DateLocale["pt-BR"] = YAHOO.lang.merge(YAHOO.util.DateLocale, {
    x:"%d/%m/%Y"
});

而你的列设置如下

{key:"columnKey", label:"columnLabel",  
    formatter:function(container, record, column, data) {
        container.innerHTML = YAHOO.util.Date.format(data, {format:"%x"}, "pt-BR");
    }
}
于 2010-04-22T20:47:44.577 回答
0

Javascript 能够使用以下格式的日期字符串构造日期:

new Date("April 22, 2010 14:15:23");

如果您无法控制服务器端日期字符串的格式(或不想更改它),请编写一个自定义解析函数,该函数接受日期字符串并返回一个新构造的 Date 对象。

在构造 DataTable 中表示的数据时,您可以使用此解析器函数。

rows:[{name:"John",born:customParser("[date string here"]},
      {name:"Bill",born:customParser("[date string here"]}
     ]

-或者-

如果您正在使用 Yui 的 DataSource 模块(如第二个灰色框所示),您可以在日期字段上注册此解析器函数,以便在构建 DataTable 之前它已经是 Date() 。

dataSource.responseSchema = {
    . . .
    fields: [
        ...
        { key: "birth_dt", parser: customParser }
        ...
    ]
    ....
}
于 2010-04-22T19:49:10.577 回答
0

您可以以您希望的任何格式将日期从服务器传递到客户端,只需在DataSource.responseSchema.fieldssetparser字段中将其解析为函数即可。stringToDate动态数据示例中查找。

在客户端,您可以以任何其他格式显示日期, formatter在相应的字段中提供功能ColumnDefs

为了设置整个DataTable的日期格式,设置它的dateOptions选项;或者,您可以设置ColumnDef.dateOptions,所有与oConfig 参数的YAHOO.util.Date.format() 文档中描述的相同。

对于当前语言环境和整个 DataTable,它应该是

  var myConfigs = {
    initialRequest: ...
    ...
    // http://developer.yahoo.com/yui/docs/YAHOO.util.Date.html
    dateOptions: {format: '%c'} 
  };

您也可以在此处设置 sLocale。

于 2010-05-17T13:10:40.307 回答