2017-02-24 137 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()); 
    } 
}