Moment: إزالة المنطقة الزمنية من كائن Mom.js

تم إنشاؤها على ٤ ديسمبر ٢٠١٥  ·  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 كومينتر

سيتم تنسيق كل لحظة التاريخ الأصلي ليكون تاريخ المنطقة الزمنية المحلية. على سبيل المثال ، سيتم تنسيق 2017-08-02 10: 00: 00 + 02: 00 ليكون 2017-08-02 16: 00: 00 + 08: 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 التقييمات

القضايا ذات الصلة

danieljsinclair picture danieljsinclair  ·  3تعليقات

M-Zuber picture M-Zuber  ·  3تعليقات

tanepiper picture tanepiper  ·  3تعليقات

benhathaway picture benhathaway  ·  3تعليقات

Shoroh picture Shoroh  ·  3تعليقات