2017-11-15 4 views
0

複数のタイムゾーンにある複数のクライアントがあります。 APIからいくつかの日付を取得していますが、この文字列にある日付/時刻は正確に表示する必要があります。私はこれを研究していて、しばらく掘り下げてきましたが、まだ明確な答えが出ていません。入ってくる文字列は、次のようなフォーマットされます。私は望んだ何タイムゾーンをオフセットしないJS Dateオブジェクトからの時間の抽出

"2017-12-29T20:00:00" 

があるように、2つの文字列(相殺なしタイムゾーン、閲覧者が配置されているにかかわらず)が、午前に、日付と時刻の両方を抽出することですそのようないくつかの問題があります。また、正しい形式でフォーマットすることも期待しています。例:

"M/d/yyyy" 
"hh:mm AM/PM" (12 hour) 

私はこれを戦うためにさまざまな方法を試してみた、と本当にただのサブストリングをつかむことを望んでいないが、半分そうする誘惑しています。どんな助けもありがとうございます。このコード

+0

momentjsの使用を検討しましたか? moment.format()はこれを簡単な作業にします。それ以外の場合は、javascriptのgetHour、getMinuteなどの関数を組み込んでビルドしようとするよりも、部分文字列を取得する方がよいでしょう。 – cstricklan

+0

@cstricklan - これをmoment.format()に入れた場合、自動的にタイムゾーンを相殺しますか?または、文字列で指定された時間/日付を保持しますか? – dlimes

+0

文字列 '' 2017-12-29T20:00:00 "にはタイムゾーン情報が含まれていません。はい、 'moment(" 2017-12-29T20:00:00 ")を呼び出すと、ローカルタイムゾーンで20:00のモーメントオブジェクトが作成されますが、これはformat()関数が文字列を作成するために使用するゾーンでもあります。それは午後10時を過ごすでしょう。 – cstricklan

答えて

0

は単なる文字列を再フォーマットを検討し、それは組み込みのパーサおよびタイムゾーンを持つすべての問題を回避:

function reformatTimestamp(s) { 
 
    function z(n){return (n<10?'0':'')+ +n} 
 
    var b = s.split(/\D/); 
 
    var h = b[3]%12 || 12; 
 
    var ap = b[3] < 12? 'AM':'PM'; 
 
    return b[1] + '/' + b[2] + '/' + b[0] + 
 
     ' ' + z(h) + ':' + z(b[4]) + ' ' + ap; 
 
} 
 

 
console.log(reformatTimestamp('2017-12-29T20:00:00')) // 12/29/2017 08:00 PM

私は、月と日を先行ゼロで埋めるほうが良いと思う(しかし、私はまた、特有のm/d/yではなくDD-MMM-YYYYのような明瞭な日付フォーマットを使用するだろう)。

0

用途:

function formatAMPM(date) { 
 
    var hours = date.getUTCHours(); 
 
    var minutes = date.getUTCMinutes(); 
 
    var ampm = hours >= 12 ? 'PM' : 'AM'; 
 
    hours = hours % 12; 
 
    hours = hours ? hours : 12; // the hour '0' should be '12' 
 
    minutes = minutes < 10 ? '0'+minutes : minutes; 
 
    var strTime = hours + ':' + minutes + ' ' + ampm; 
 
    return strTime; 
 
} 
 

 
var str = "2017-12-29T20:00:00"; 
 
var dt = new Date(str + "Z"); 
 
console.log("M/d/yyyy"); 
 
console.log((dt.getUTCMonth() + 1) + '/' + dt.getUTCDate() + '/' + dt.getUTCFullYear()); 
 
console.log("hh:mm AM/PM"); 
 
console.log(formatAMPM(dt));

+0

@RobGはいそうです。私はそれに応じてoptions1行を削除しました:) –

関連する問題