2017-03-14 7 views
1

ウェブページに多くのタイムゾーンで時刻を表示する必要があります。このサービスは、適切なオフセットを持つ私にISO8601形式で時間をgivess:ユーザーのタイムゾーンに変換せずにタイムゾーン入力時に表示時間

今、私は「14MAR 2155」 にかかわらず、ユーザーがどこにあるのと何としてそれを表示する必要があり、この(出発時間)時間を表示するとき
"ScheduleTimes": { 
    "ScheduledDepartureTime": "2017-03-14T21:55:00.000-07:00", 
    "ScheduledArrivalTime": "2017-03-16T06:50:00.000+11:00" 
} 

ロケールとタイムゾーンにブラウザが設定されています。

標準Javascriptの日付()は、ブラウザのローカル時刻に変換されます。 Moment.jsとその友人(反応モーメントなど)はタイムゾーン変換を行いますが、タイムゾーンを知る必要があります。

<Moment format="HHmm">2017-03-14T21:55:00.000-07:00</Moment> 

現地時間に時間/分に変換します。タイムゾーンを指定することはできますが、指定された空港コードのタイムゾーンを取得する必要があります。私は1つのディスプレイで何十ものディスプレイを持っているので、私はそれを本当にしたくありません。 (私はオフセットと空港と、到着便と出発便の巨大なリストしか持っていないので、私はそれらを1つ1つずつ変換していません)。

オペレーションコントロールセンターではこれは問題ではありません。デフォルトのタイムゾーンはです。常に UTCです。これはOCCの外にあり、ポート・ローカル時間を期待する異なるオーディエンスのためです。ツアーの他の「終わり」が異なるタイムゾーンのポートにある場合、出発/到着時間が自分のタイムゾーンに変換されることは、聴衆からは期待されない。

私の日付/時刻を具体的に解析するカスタムクラスを書く以外に、はありません時間をブラウザのタイムゾーンに変換しようとすると、そのタイムゾーンを知る必要はありません。以下のように、この作品

const moment = require('moment'); 

class LocalTime extends Component { 
    formatLocalTime() { 
     const t = this.props['value']; 
     const f = this.props['format']; 
     if (t && f) { 
      return moment.utc(t.substring(0, 23)).format(f).toUpperCase(); 
     } 
     return ""; 
    } 

    render() { 
     const formatLocalTime = this.formatLocalTime(); 
     return (
      <time>{formatLocalTime}</time> 
     ); 
    } 
} 

:I下記の受け入れ答えに基づいて

UPDATE

は、私はまた、私は別の表示形式を必要とする他の場所でそれを使用することができますリアクトコンポーネントを作成しました、「の値」と '形式のプロパティで、私はポートローカル時間に異なる形式でSTDとETDを表示することができます。

<LocalTime value="2017-03-14T21:55:00.000-07:00" format="DDMMM HH:mm"/> 
<LocalTime value="2017-03-14T22:05:00.000-07:00" format="HHmm"/> 

答えて

1

迅速かつややダーティ:

const moment = require('moment'); 

let departure = '2017-03-14T21:55:00.000-07:00'; 
let arrival = '2017-03-16T06:50:00.000+11:00'; 

function format(t) { 
    return moment.utc(t.substring(0, 23)).format('DDMMM HH:mm').toUpperCase(); 
} 

console.log('Departure:', format(departure)); 
console.log('Arrival :', format(arrival)); 

// Outputs: 
// Departure: 14MAR 21:55 
// Arrival : 16MAR 06:50 

それを、弦からのタイムゾーンオフセットを取り除き(それがローカルに変換しない)UTCタイムスタンプとして残りを使用するモーメントを伝え、およびフォーマット。

+0

ありがとうRobert:私はこの解決策を適用できるかどうかを確認します。クイックとダーティーが時々勝つことができます! – scot

+0

うまく動く、ありがとう! – scot

1

をチェックライブラリ。クライアントタイムゾーンをフォーマットメソッドに自動的に適用するようではありません。

+0

ありがとうございます、私はその数週間にわたってその図書館を見ていきます。 – scot

関連する問題