2017-05-04 82 views
0

我试图在Datatable列中显示格式正确的日期。我使用MomentJS正确检测和格式的单元格,因为它是作为一个yyyyMMdd(即20051201)从数据库字符串:Datatables/MomentJS - 当区域更改时更改日期格式

columns: [ 
    { 
     data: "fechaPago", 
     "render": function(data){ 
      return (moment(data).isValid()) ? moment(data).format("DD/MM/YYYY") : "-"; 
     } 
    }, 
] 

其中工程完全按照预期:

enter image description here

现在,我正在努力实现更灵活的方法,并让当前区域确定格式。我们已经在我们的webapp 3种可用的语言,并我想要的数据表来检测当前语言更改格式(从dd/MM/yyyyMM/dd/yyyy,如果是英文)。

我曾尝试使用'LLLL'作为格式,但它返回全日的信件,我找不出如何修改它。

+1

确实['格式( 'L')'](http://momentjs.com/docs/#/displaying/format/)满足您的需求? – VincenzoC

+0

@VincenzoC感谢Vincenzo的帮助。它部分的确如此,因为它简化了格式化。但是,当我更改语言时,它不会更改格式。 – wickedchild

+0

您的代码中是否已经有语言环境信息,或者您正在询问如何获取浏览器语言环境(本例中为搜索,例如,请参阅[here](http://stackoverflow.com/q/1043339/4131048))? – VincenzoC

回答

1

您可以使用时刻locale(String)函数来设置一段时间的语言环境oblect或moment.locale(String)来全局设置时刻语言环境。

若要本地化的日,月,年使用L令牌在format()

您的代码将是这样的:

columns: [ 
    { 
    data: "fechaPago", 
    "render": function(data){ 
     var locale = // get current locale code 
     return (moment(data).isValid()) ? moment(data).locale(locale).format("L") : "-"; 
    } 
    }, 
] 

记住使用moment-with-locales.js(或进口所需的语言环境)。

+0

再次文森佐。我尝试过使用你的解决方案,即使yyyyMMdd字符串被格式化为MM-dd-yyyy,当我切换全局语言环境时,即使重新加载时也不会改变。 – wickedchild

+1

@wickedchild问题可能是你的语言环境,试图考验我的解决方案硬编码区域的方式('VAR区域=“EN-GB”;')和的rember使用['时刻与 - locales.js'(HTTPS ://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment-with-locales.min.js)(或导入必需的语言环境)。 – VincenzoC

+0

就是这样!我正在使用常规moment.js,切换到另一个做了诀窍:)非常感谢您的时间,文森佐:) – wickedchild