2016-11-11 120 views
4

我有一个使用Bootstrap表的应用程序,其中一个字段是Time。当我从数据库中获取数据时,它以JSON格式进行编码,这个字段的数据类似于2016-11-07T13:40:29.000Z,我知道它是标准的JSON格式。JSON日期格式 - 仅显示时间

我想分解它,并在我的表中有一列显示日期,另一列显示时间,理想情况。但是如果我只能让Time列显示时间,我会很高兴。

我读过这是与添加一个dataFormatter列标题有关,但我似乎无法使其工作,因为我的JavaScript返回NaN。

这是我在研究问题时找到的代码。我是Javascript的新手,所以可能会遇到一些错误,我会很感激一些帮助。

<table id="table" data-url ="http://maccdx161012:4567/api/v1/sat" data-toggle="table"> 
    <thead> 
     <tr> 

      <th data-field="initials">Initials</th> 
      <th data-field="sector">Sector</th> 
      <th data-field="cjs">CJS</th> 
      <th data-field="satin" data-formatter="timeFormatter">In</th> 
      <th data-field="satout">Out</th> 
      <th data-field="duration">Duration</th> 
      <th data-field="position">Position</th> 
      <th data-field="ot">OT</th>    
     </tr> 
    </thead> 
</table> 
<script> 
    function timeFormatter(value) { 
     var date = new Date(value*1000); 
     var hours = date.getHours(); 
     var minutes = "0" + date.getMinutes(); 

     return hours + ':' + minutes.substr(-2); 
    } 
</script> 
+2

''2016-11-07T13:40:29.000Z'substring(11,16)' – Keith

+0

如果您看到一个NaN异常,可能'值'输入字段不是日期,您可以放置​​一个控制台。记录(值)在你的功能,看看有什么问题 – Kalamarico

回答

2
<script> 
    function timeFormatter(value) { 
     var date = new Date(value); 
     var hours = date.getHours(); 
     var minutes = leadZero(date.getMinutes()); 

     return hours + ':' + minutes; 
    } 
    function dateFormatter(value) { 
     var date = new Date(value); 
     var years = date.getFullYear(); 
     var months = leadZero(date.getMonth() + 1); 
     var days = leadZero(date.getDate()); 

     return years + '-' + months + '-' + days; 
    } 
    function leadZero(n) { return n>9 ? n : "0" + n; } 
</script> 

它将返回时间为本地时区。如果你不想要这个功能 - 使用Keith的解决方案。

+0

这似乎工作正如我想要的,有一个问题。我有一次看起来像这样:16:39或15:32这很棒。但其中一些看起来像这样:16:0或18:0。任何想法为什么这可能发生在一些但不是全部?当我删除代码并返回到JSON格式时,它们看起来都一样。再次感谢!!它真的有帮助 – user2843365

+0

看来它可能与分钟少于10次的时间有关。 – user2843365

+0

尝试新版本 – br3t