代码之家  ›  专栏  ›  技术社区  ›  Jimmyt1988

使用Moment将时区特定日期转换为区域设置

  •  0
  • Jimmyt1988  · 技术社区  · 5 年前

    我有以下时区数据:

    {
        "Id": "Pacific Standard Time",
        "DisplayName": "(UTC-08:00) Pacific Time (US & Canada)",
        "StandardName": "Pacific Standard Time",
        "DaylightName": "Pacific Daylight Time",
        "BaseUtcOffset": "-08:00:00",
        "AdjustmentRules": [{
            "DateStart": "0001-01-01T00:00:00Z",
            "DateEnd": "2006-12-31T00:00:00Z",
            "DaylightDelta": "01:00:00",
            "DaylightTransitionStart": {
                "TimeOfDay": "0001-01-01T02:00:00Z",
                "Month": 4,
                "Week": 1,
                "Day": 1,
                "DayOfWeek": 0,
                "IsFixedDateRule": false
            },
            "DaylightTransitionEnd": {
                "TimeOfDay": "0001-01-01T02:00:00Z",
                "Month": 10,
                "Week": 5,
                "Day": 1,
                "DayOfWeek": 0,
                "IsFixedDateRule": false
            },
            "BaseUtcOffsetDelta": "00:00:00"
        }, {
            "DateStart": "2007-01-01T00:00:00Z",
            "DateEnd": "9999-12-31T00:00:00Z",
            "DaylightDelta": "01:00:00",
            "DaylightTransitionStart": {
                "TimeOfDay": "0001-01-01T02:00:00Z",
                "Month": 3,
                "Week": 2,
                "Day": 1,
                "DayOfWeek": 0,
                "IsFixedDateRule": false
            },
            "DaylightTransitionEnd": {
                "TimeOfDay": "0001-01-01T02:00:00Z",
                "Month": 11,
                "Week": 1,
                "Day": 1,
                "DayOfWeek": 0,
                "IsFixedDateRule": false
            },
            "BaseUtcOffsetDelta": "00:00:00"
        }],
        "SupportsDaylightSavingTime": true
    }
    

    以及以下日期:

    2019-01-05T07:30:07Z
    

    使用moment,我想将其转换为当前的区域设置,即

    en-GB
    

    我该如何对待妈妈呢?

    问题似乎是我的日期格式与Moment不兼容。

    我已经准备了一个JS处理我可以访问的变量:

    http://jsfiddle.net/jimmyt1988/xe7ha5ms/1/

    2 回复  |  直到 5 年前
        1
  •  1
  •   VincenzoC    5 年前

    您的输入是目前认可的ISO 8601格式。您可以使用 moment.tz :

    这个 瞬间 构造函数接受所有与Moment构造函数相同的参数,但使用最后一个参数作为 a time zone identifier .

    然后您可以使用将其转换为所需时区 tz() :

    这个 moment#tz mutator将更改时区并更新偏移量。

    可以使用 locale() 然后使用 format() 显示值。

    这里是一个代码示例:

    console.log(
      moment.tz('2019-01-05T07:30:07', 'America/Los_Angeles') // parse input in given tz
        .tz('Europe/London') // Convert moment to desired zone
        .locale('en-gb') // set en-gb locale
        .format('LLLL') // display result
    );
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment-with-locales.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data-2012-2022.min.js"></script>
        2
  •  0
  •   Jimmyt1988    5 年前

    通过使用utcoffset方法计算出:

    http://jsfiddle.net/jimmyt1988/xe7ha5ms/2/

    moment("2019-01-05T07:30:07Z")
    .utcOffset("-08:00:00")
    .format("DD/MM/YYYY HH:mm:ss");