2016-08-23 139 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