2017-02-24 85 views
0

如何根據情景獲取不同形式的date datetime and full date如何在javascript中獲取時間,僅限日期和完整日期

  1. 1如果日期是最新less than 24 Hr old那麼我必須表現出像22:31
  2. 如果日期是同月爲如february但年齡比24 hr然後我必須表現出像15 Feb.
  3. 如果日期比一個月還要舊,所以我必須展示如15 Feb 17

到目前爲止我已經做了兩個javascript函數。

function getLocalizeDateTime(dateString,format) { 
if(dateString==null || dateString==undefined || dateString==""){ 
    return ""; 
} 
var dateTime = dateString.trim().split(" "); 
var dateOnly = dateTime[0]; 
var timeOnly = dateTime[1]; 
timeOnlyOfDate = timeOnly; 
var temp = dateOnly + "T" + timeOnly+"Z"; 
var utc_date =new Date(temp); 
currentDateStr = dateString; 

//var offset = new Date().getTimezoneOffset(); 
//utc_date.setMinutes(utc_date.getMinutes() - offset); 
    if(format!=undefined && format!=null) 
    return date2str(utc_date,format); 
    return date.toString(); 
} 

function date2str(x, y) { 
var z = { 
    YR: x.getFullYear(), 
    M: x.getMonth() + 1, 
    d: x.getDate(), 
    h: x.getHours(), 
    m: x.getMinutes(), 
    s: x.getSeconds() 
}; 

// Here return 22:32 if date is less than 24 hr old. 
// return 24 feb as currentmonth is feb. 
// return 24 feb 17 in case current date is march or greater. 
y = y.replace(/(M+|d+|h+|m+|s+)/g, function(v) { 
    return ((v.length > 1 ? "0" : "") + eval('z.' + v.slice(-1))).slice(-2) 
}); 

return y.replace(/(y+)/g, function(v) { 
    return x.getFullYear().toString().slice(-v.length) 
}); 

} 

而這些功能在格式返回整個日期e.g日期"2017-02-24 07:46:38"和格式MM-dd-yyyy hh:mm"它返回02-24-2017 13:16。如何做到上面提到的3個商業檢查。

+0

看看[momentjs](https://momentjs.com) –

+0

有很多格式化庫。 [* fecha.js *](https://github.com/taylorhakes/fecha)簡潔,並解析和格式化。 – RobG

+0

請參閱:http://stackoverflow.com/help/someone-answers – c0der

回答

0

如果您確定支持toLocaleString選項,則可以使用它們來格式化日期字符串。第二

function formatTime(date) { 
 
    var now = new Date(); 
 
    var timeOpt = {hour:'2-digit', hour12:false, minute:'2-digit'}; 
 
    var monthOpt = {day:'numeric', month:'short'}; 
 
    var fullOpt = {day:'numeric', month:'short', year:'2-digit'}; 
 
    if (now - date < 8.64e7) { 
 
    return date.toLocaleString(undefined, timeOpt); 
 
    } 
 
    if (now.getFullYear() == date.getFullYear() && 
 
     now.getMonth() == date.getMonth()) { 
 
    return date.toLocaleString(undefined, monthOpt); 
 
    } 
 
    return date.toLocaleString(undefined, fullOpt); 
 
} 
 

 
// Tests 
 
var soon = new Date(); 
 
soon.setHours(soon.getHours() - 2, 23); 
 
var sameMonth = new Date(); 
 
sameMonth.setHours(sameMonth.getHours() - 25); 
 
var agesAgo = new Date(2016,5,6,14,27,50); 
 

 
[soon, sameMonth, agesAgo].forEach(function(date){ 
 
    console.log(formatTime(date)); 
 
})

sameMonth測試將使用fullOpt在第一個月或前01:00因爲它將設置:否則,使用圖書館,如該日期到前一個月,但除此之外它會顯示一天以上但同一月份的結果。

+0

如何僅在時間顯示AM,PM。 –

0

這是我的解決方案。基本上我只是剪掉日期對它們進行條件測試,然後將它們縫合在一起。好處是它不使用庫來完成它。

我確實從另一個答案[Link]中獲取了「減去一天」的代碼。

$(document).ready (function() { 
    var less_than_24 = getLocalizeDateTime(new Date('Fri Feb 24 2017 10:41:28')); 
    var same_month = getLocalizeDateTime(new Date('Fri Feb 16 2017 13:41:28')); 
    var older_than_month = getLocalizeDateTime(new Date('Fri Jan 24 2017 13:41:28')); 

    console.log('less_than_24: ' + less_than_24); 
    console.log('same_month: ' + same_month); 
    console.log('older_than_month: ' + older_than_month); 
}); 

function getLocalizeDateTime(dateString,format) { 

    var monthNames = ['Jan','Feb','Mar','Apr','May','Jun', 
     'Jul','Aug','Sep','Oct','Nov','Dec']; 

    if (dateString==null || dateString==undefined || dateString=="") { 
     return ""; 
    } 

    var now = new Date(); 

    var hours_24_ago = now; 
    hours_24_ago.setDate(hours_24_ago.getDate() - 1); 

    if (dateString >= hours_24_ago) { 
     return dateString.getHours() + ':' + dateString.getMinutes(); 
    } else if (dateString.getFullYear() == now.getFullYear() 
      && dateString.getMonth() == now.getMonth()) { 
     return (dateString.getDate() + ' ' + monthNames[dateString.getMonth()]); 
    } else { 
     return (dateString.getDate() + ' ' 
      + monthNames[dateString.getMonth()] + ' ' 
      + dateString.getFullYear()); 
    } 
} 
相關問題