2017-02-24 9 views
0

date datetime and full dateの異なるフォームは、シナリオに応じて得るのですか?場合日にはどのように時間を取得するだけで、日付のみと完全な日付は、JavaScriptで

  1. 1その後、私はケースの日には22:31
  2. のように示さなければならないless than 24 Hr old最新であるし、私はケースの日には15 Feb.
  3. のように示さなければならない例えばfebruaryのために同じ月であるが、24 hrより古いです1ヶ月よりも古い場合は、15 Feb 17のように表示する必要があります。

これまで2つの目的のために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) 
}); 

} 

しかし、これらの機能は、それが02-24-2017 13:16を返す日付"2017-02-24 07:46:38"と形式MM-dd-yyyy hh:mm"のために例えばのためのフォーマットで全体の日付を返します。上記の3つのビジネスチェックをどのように捉えるか。

+0

ライブラリのフォーマットがたくさんある –

+0

[momentjs](https://momentjs.com)を見てみましょう。 [* fecha.js *](https://github.com/taylorhakes/fecha)は簡潔であり、解析と書式設定を行います。 – RobG

+0

参照:http://stackoverflow.com/help/someone-answers – c0der

答えて

0

toLocaleStringオプションのサポートが確実な場合は、それらを使用して日付文字列をフォーマットすることができます。それが設定されますようsameMonthテストが第二の月の最初または1時前にfullOptを使用します

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)); 
 
})

:それ以外の場合は、ライブラリー、例えばを使用前月の日付が表示されますが、それ以外の場合は1日以上同じ月の結果が表示されます。

+0

時間の場合のみAM、PMを表示するにはどうすればいいですか? –

0

これは私のソリューションです。基本的には、条件付きテストを実行するための日付を切り取り、それらを一緒に戻してステッチします。利点は、ライブラリを使用しないことです。

別の回答[Link]から「1日差し引く」コードを取得しました。

$(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()); 
    } 
} 
関連する問題