Moment: moment.jsオブジェクトからタイムゾーンを削除します

作成日 2015年12月04日  ·  3コメント  ·  ソース: moment/moment

私はdatetimepicker.jsを使用しており、そのdate関数はmoment.jsオブジェクトを返します。 これはローカルUTCオフセットを使用して行われ、元の日付には別のオフセットがあります。

私の元の日付:

2015-10-01T15:00:00.000Z

日時ピッカー( DD-MM HH:mm )に表示するもの:

01-10 15:00

私が得るもの:

2015-10-01T15:40:00+01:00

私が欲しいもの:

2015-10-01T15:40:00+00:00

最後に+01オフセットを削除した方法に注意してください。

ローカルUTCに適用してこれを行うにはどうすればよいですか? これは、01を手動で削除する必要がないことです(ユーザーの場所によっては、他のローカルオフセットになる可能性があるため)。

これは私がこれまでに日付を取得するために持っているものですが、同じ時間を維持することによってオフセットを削除する方法がわかりません。

    var momentDate = timePicker.data("DateTimePicker").date();
    console.log(momentDate.format());
    //this prints  2015-10-01T15:40:00+01:00

最も参考になるコメント

const tmp = moment(valueAsDate).utc(true) -それはあなたが必要とするものであり、タイムゾーンを無視します
次に、たとえばtmp.toISOString()として使用できます。

全てのコメント3件

重複: http ://stackoverflow.com/questions/34050389/remove-timezone-from-a-moment-js-object

モーメントとして、元の日付をローカルタイムゾーンの日付にフォーマットします。 つまり、マシンシステムが+08:00タイムゾーンを使用している場合、2017-08-02 10:00:00 + 02:00は2017-08-02 16:00:00 + 08:00にフォーマットされます。

タイムゾーンを無視して元の日付をフォーマットする関数を作成しました。

/**
 * <strong i="7">@desc</strong> use moment to format a datetime
 * <strong i="8">@param</strong> string|date|timestamp datetime: the datetime to format
   the given datetime can have timezone, and the timezone will be kept in the process of output datetime
   i.e. formate('2017-09-08 11:24:00+08:00', 'D/M/YYYY HH:mm:ss Z') =>  8/9/2017 11:24:00 +08:00, as you see, +08:00 is kept, which is different from moment default behavior
   if timezone has not been given, local timezone will be used.
 * <strong i="9">@param</strong> string formatter: the target format you want to get
 * <strong i="10">@param</strong> string givenFormatter: moment allow developer to define your own formatter, i.e. DD/MM/YYYY HH,mm,ss which is not a statndard time format
 * <strong i="11">@return</strong> string new formatted datetime string
 * <strong i="12">@example</strong>:
   1. format(new Date(), 'YYYY-MM-DD HH:mm:ss')
   2. format(your_date, 'YYYY-MM-DD HH:mm:ss', 'DD/MM/YYYY HH,mm,ss')
 */
export function format(datetime, formatter, givenFormatter) {
  let localTimezoneOffset = timezoneOffset()
  let givenTimezoneOffset = moment.parseZone(datetime).utcOffset()

  if (givenTimezoneOffset !== 0) {
    return moment(datetime, givenFormatter).utcOffset(givenTimezoneOffset).format(formatter)
  }
  else {
    // big problem: we do not know whether timezone has not been given or it is +00:00
    // if its utc time is the same with itself, it means timezone has been given
    let u = utc(datetime, 'YYYY-MM-DD HH:mm:ss')
    let t = moment(datetime).parseZone(datetime).format('YYYY-MM-DD HH:mm:ss')
    if (u === t) {
      return moment(datetime, givenFormatter).utc().format(formatter)
    }
    else {
      return moment(datetime).format(formatter)
    }
  }
}

ソースコード: https ://github.com/tangshuang/moment-format

この関数を使用して、日付無視モーメントのデフォルトのフォーマットロジックをフォーマットします。 2017-08-02 10:00:00 + 02:00は2017/08/02 10:00:00 + 02:00のようにフォーマットされます。

const tmp = moment(valueAsDate).utc(true) -それはあなたが必要とするものであり、タイムゾーンを無視します
次に、たとえばtmp.toISOString()として使用できます。

このページは役に立ちましたか?
0 / 5 - 0 評価