我想将 GTM0 中的日期传递给我的当地时间,根据momentjs是这样的,但我无法将日期转换为我的当地时间。
moment.locale('es');
let fecha = '2018-12-07 22:56:48';
let fecha_origin = moment(fecha).format('DD [de] MMM [del] YYYY [a las] hh:mm:ss A');
console.log('Fecha original: ', fecha_origin);
let fecha_local = moment(fecha).utc().format('DD [de] MMM [del] YYYY [a las] hh:mm:ss A');
console.log('Conversión: ', fecha_local);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment-with-locales.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data.min.js"></script>
更新1:
我的当地时间应该是-5,而不是在我进行转换时是+5。
问题是您试图解析一个在任何地方都没有 UTC 信息的日期。如果我们分解您用作输入的日期,那可以立即知道
日期
2018-12-07
和时间22:56:48
用空格隔开UTC 信息应以
+hh:mm
或结尾-hh:mm
,如果是 UTC,则应为+00:00
更改日期输入效果很好。我用作
T
垫片。另一种方法是,而不是直接
moment(fecha).utc()
使用moment.utc(fecha)
它,因为正如您所说,它来自服务器的 UTC。不同之处在于它的处理方式。请记住,您的初始日期没有偏移信息,因此如果您使用
moment(fecha).utc()
它将做的是将其解释为本地时间,然后通过添加或减去小时数将其转换为 utc(因此您的问题)。如果您指定它,moment.utc(fecha)
那么它将直接将其解释为 utc,即+00:00
让我们首先通过查看示例来了解日期如何与 moment.js 一起工作,但首先:
这只影响语言,即是写Dec(ember)还是dic(ember),而不影响时间。因此,我们可以将其排除为问题的原因
您以标准格式定义时刻。但是现在几点了?让我们做一些测试来检查一下。我在 GMT+1(西班牙):
我们已经看到了一个区别:没有格式化,使用的是祖鲁时间(因此是最后的 Z),而格式化时,使用的是我机器操作系统的本地区域。
祖鲁时间为UTC时间,与GMT+0重合
现在让我们尝试解析一个日期:
所以我们看到问题是当你写的时候:
你有一个误解:
utc() 应该在原始日期和本地日期应用 local() 使用以下示例 ami 它对我来说非常有效。代码应如下所示:
这样我就可以得到您需要的时区日期:该图像显示了控制台中的捕获。(在本地做测试)