2016-08-23 101 views
1

我从一个SQLServer数据库表得到一个日期时间值:如何在JavaScript中格式化数据库日期时间?

2016-08-16T17:00:00Z 

使用JavaScript,我想格式化的日期如下:

16/08/2016 17:00:00 

我用下面的代码:

$scope.FormatDate = function (value) { 
     if (value !== null && typeof (value) !== 'undefined') { 
      var date = new Date(value); 
      var returnStr = date.getDate() + "/" + date.getMonth() + 1 + "/" + date.getFullYear(); 
      return returnStr; 
     } else { 
      return value; 
     } 
    } 

来自样本资源的结果是:

17/71/2016 

我想你的帮助,以获得输出结果为:“16/08/2016 17:00:00”

回答

3

如果你想要做的就是它,那么你并不需要创建一个实际日期对象格式,你可以做一个简单的字符串替换使用正则表达式来抓住各个部分,按照这个简单的演示:

var value = "2016-08-16T17:00:00Z"; 
 
console.log(value.replace(/(\d{4})-(\d\d)-(\d\d)T([^Z]+)Z/,"$3/$2/$1 $4"));

在你的功能的情况下:

$scope.FormatDate = function (value) { 
    if (value !== null && typeof (value) !== 'undefined') { 
    return value.replace(/(\d{4})-(\d\d)-(\d\d)T([^Z]+)Z/,"$3/$2/$1 $4"); 
    } else { 
    return value; 
    } 
} 
+0

这不完全是我想要的结果,但它可以解决我目前的问题。无论如何,我已将其标记为我的解决方案。 –

+1

*“这不完全是我想要的结果”* - 你*明确要求的结果是'16/08/2016 17:00:00',这正是我的代码产生的结果。 – nnnnnn

+0

我只是指你修复它的方式。 :D –

0

试试这个

function formatDate(date) 
    { 
     var hours = date.getHours(); 
     var minutes = date.getMinutes(); 
     var seconds = date.getSeconds(); 


     minutes = minutes < 10 ? '0'+minutes : minutes; 
     seconds = seconds < 10 ? '0'+seconds : seconds; 
     var strTime = hours + ':' + minutes + ':' +seconds ; 
     return date.getMonth()+1 + "/" + date.getDate() + "/" + date.getFullYear() + " " + strTime; 

    } 
+0

我试过了。它没有解决。你能再次检查小提琴吗? https://jsfiddle.net/2142eotp/ –

+0

这适用于我 –

0

你可以使用这个库格式化日期你渴望实施一些逻辑。

http://momentjs.com/

与函数参数和使用一刻只是工作。

例子:

const date = moment("2016-08-16T17:00:00Z").date(); 
const month = moment("2016-08-16T17:00:00Z").month(); 
const hour = moment("2016-08-16T17:00:00Z").hour(); 
const year = moment("2016-08-16T17:00:00Z").year(); 
const minute = moment("2016-08-16T17:00:00Z").minute(); 
const sec = moment("2016-08-16T17:00:00Z").second(); 
// implementing some logic 
console.log('' + date + '/' + month + '/' + year + ' ' + hour + ':' + minute + ':' + sec); 

这里是小提琴: https://jsfiddle.net/Refatrafi/6m4m7mp3/

1

另一种解决方案:

var parsed = Date.parse("2016-08-16T17:00:00Z"), 
 
    date = new Date(parsed), 
 
    day = date.getUTCDate(), 
 
    month = date.getUTCMonth() + 1, 
 
    year = date.getUTCFullYear(), 
 
    hour = date.getUTCHours(), 
 
    minute = date.getUTCMinutes(), 
 
    second = date.getUTCSeconds(), 
 
    dateStr = ""; 
 

 
day = day < 10 ? "0" + day : day; 
 
month = month < 10 ? "0" + month : month; 
 
hour = hour < 10 ? "0" + hour : hour; 
 
minute = minute < 10 ? "0" + minute : minute; 
 
second = second < 10 ? "0" + second : second; 
 

 
dateStr = day + "/" + month + "/" + year + " " + hour + ":" + minute + ":" + second; 
 

 
console.log(dateStr);

更新:旧的代码可以在各国改变,因为他们有不同的本地日期/时间格式,所以我已经更新来格式化它TLY。

+1

当我点击“运行代码片段”时,我得到的结果是'“2016/8/17 3:00:00”'。 – nnnnnn

+1

您可以通过以下方式控制所需结果: var dateStr = date.getDate()+ 1 +“/”+ date.getMonth()+“/”+ date.getFullYear()+“”+ date.toLocaleTimeString (); –

+0

我已经更新了代码。 – Nhan