繁体   English   中英

moment.js和moment.timezone.js-我如何知道客户端时区以本地tz显示UTC日期?

[英]moment.js, and moment.timezone.js - how do i know the client timezone to display UTC date in local tz?

我看过这些帖子-以及阅读文档; 从Moment.js中的UTC日期字符串创建本地日期,然后使用moment.js将Utc日期更改为本地日期

而且我仍然不放弃得到我想要的东西。

数据库中的所有日期都存储在UTC中,但是我希望客户端看到其本地时间中的日期-但是带有时区。

我可以获取.local(),但可以剃刮区域信息,如果我指定了时区,那么我可以得到想要的结果,但是我不知道该时区。时区应该提供的东西? 我可以得到偏移量-但是文档没有说明如何使用它。

示例(这就是我要去的):CDT 9月8日15日,晚上10:51

这是我尝试过的示例。

// I spoof a date as if it came from the db (for demo purposes)
var now = new Date().toUTCString();

// now outputs.. I am in CDT (-0500)
document.write( now ); 
    // Wed, 09 Sep 2015 03:51:15 GMT

document.write( moment( now ).format('MMM Do YY, h:mm a z') );
    // Sep 8th 15, 10:51 pm

document.write( moment( now ).local().format('MMM Do YY, h:mm a z') );
    // Sep 8th 15, 10:51 pm  (same as above, so I'm unclear what 'local()' gives me that I didn't already have?)

document.write( moment( now ).tz('America/Chicago').format('MMM Do YY, h:mm a z') );
    // Sep 8th 15, 10:51:15 pm CDT 

最后一个是我想要的...但是我不知道tz,所以我什至无法将其设置为变量并将其传递给我,如何获取时区作为字符串,而不是偏移量-或如何我可以使用偏移量做同样的事情吗? // CDT 9月8日15日,晚上10:51

您可以使用jsTimezoneDetect之类的方法手动获取IANA时区名称,并将其附加到字符串中。 但是,我不知道该库的可靠性如何,所以这不是认可。

以下仅是一个示例,一个健壮的函数需要对jstz.determine的返回值进行一些验证和错误处理。

这看起来有点怪异,我已经习惯了将实际时区视为+05:30或其他任何时间。

IANA时区并非为一般用途而设计,而是存在一个问题,即为实际上覆盖广阔区域的某个区域提供一个地理位置。

 document.write(moment().format('d MMM YYYY HH:mm:ss') + ' ' + jstz.determine().name()); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.4/jstz.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js"></script> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM