Convert UTC time string to the user's local time
我目前有一个网页,我在其中显示文件创建为字符串的日期。 由于该文件是在美国服务器上生成的,因此日期为UTC。
一个示例日期是:
6/3/2016 10:13:55 AM
我想将此日期转换为访问该网页的用户的时区。 该网页可供世界各地的人们访问。
例如,我希望示例时间显示澳大利亚东部标准时间(AEST)的6/4/2016 01:13:55 AM。
-
你是如何得到文件的创建日期的?
-
通过我的c#helper类中的方法。。。 var directory = new DirectoryInfo(path);,var astWriteTime = directory.CreationTimeUtc;。 这整个时间我都认为这是在CDT时间,但我忘了我在UTC中获得了创作时间。
-
之前已经多次询问过这个问题。 请参阅重复发布,这与下面的gravityplax给出的答案相同。 此外,如果您有格式问题或其他时区问题,您可以查看moment.js。 干杯!
-
注意到你在这里关于C#的评论,以UTC格式获得创建时间非常棒。 只是不要以特定于语言环境的格式发送它。 以ISO8601 / RFC3339格式发送。 请参阅W3C的建议。 在.NET中使用.toString("o")。 (任何好的JSON或XML序列化程序也应该使用该格式。)
1 2 3 4
| var ms = Date.parse('6/3/2016 10:13:55 AM' + ' UTC');
var date = new Date();
date.setTime(ms);
var timezone_shifted_string = date.toLocaleString(); |
-
如果我的当地人不是我们的话,这会有用吗?
-
圣洁的烟雾让我复杂化了。
-
它将默认为本地运行时的时区,但您也可以手动将其覆盖到任何时区:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
-
@gravityplanx我不小心误解了我收到的原始时间,默认情况下我在UTC时间得到它。我修改了我的问题。我假设我只是删除' CDT'的串联。
-
如果未提供本地时区,将使用本地时区。只需将CDT更改为UTC即可。
-
这种方法有很多问题。 1)6/3可以解释为6月3日或3月6日,具体取决于当前的区域设置。 2)CDT仅适用于夏令时生效的部分时间,因此不能应用于每个日期输入。 3)使用CDT仅适用于某些实现,它不是ECMAScript规范的一部分。 4)时区缩写可能不明确。
-
@MattJohnson:问题指出输入在~CDT~UTC中始终是一个字符串。如果您尝试动态转换,这种方法会出现问题,这是正确的,但如果数据存储为字符串而不是日期对象,则所有问题都会消失,这就是我解释事物的方式。
-
我不确定你的意思。您在这里使用的是Date对象,并且您依赖CDT一致地解释为UTC-5。这不能保证。您还假设toLocaleString的输出格式将与给定的输入格式匹配,但这一切都取决于它运行的区域设置。
-
@MattJohnson我最初也提出了我的问题,我的意思是UTC而不是CDT。日期最初以字符串形式(通过视图模型传递到视图)显示文件在UTC时间内被修改的日期。
-
哦 - 这完全改变了一切。但是,您仍应小心格式化部分。请注意,中间位不是必需的,因为您可以将字符串传递给Date构造函数,而不是调用Date.parse。但是要注意字符串输入格式。我对M / D / Y与D / M / Y的看法仍然有效。
-
@MattJohnson啊,对不起,那时误解了你。就格式化而言,如果需要控制输出格式,则可以通过其他可选字段。