2016-07-23 81 views
0

我在客户端从.NET上放置了UTC .NET/JSON日期。当我运行以下命令:转换时刻UTC到当地日期时间

moment(value.Planet.when).utc() 

返回从Web服务日期:

"/Date(1469271646000)/" 

我得到的_D参数显示当前准确的UTC日期与GMT + 0300上右侧的日期。

我想将此时间转换为用户机器上的本地时间,以及我所做的事情,我总是将时间缩短3个小时。

我这样做:

moment(value.Planet.when).local().format('YYYY-MM-DD HH:mm:ss') 

,我也得到了相同的日期时间作为UTC。我不明白我怎么能得到相对于当地时间的UTC时间。我检查了那个momentjs对象的确是UTC。

我认为,如果我通过moment.utc()函数从web服务(最初来自数据库)获取UTC日期,我可以运行local()函数,我会得到准确的时间相对于我的区域,但它不起作用。

回答

0

请勿使用_d属性。它仅供内部使用。见this answer,the user guideMaggie's blog post on the subject

至于你如何转换为本地时间的问题,你根本不需要转换。你已经解析以本地模式的输入值,所以你可以直接使用它:除非他们通过一些其他控件或库,你正在使用需要

var m = moment("/Date(1469271646000)/"); // gives you a moment object in local mode. 
var s = m.format(); // lets you format it as a string. Pass parameters if you like. 
var d = m.toDate(); // gives you a Date object if you really need one 

尽量避免使用Date对象。大多数操作都可以在moment对象上严格执行。

+0

我只是把一个新的记录,我得到太阳七月24 2016 02:24:15 GMT + 0300如果我使用你的代码,但我当地的时间是5:24而不是2:24。该web服务返回“/日期(1469316255000)/” - 所以我做错了。 –

+0

时间戳“1469316255000”对应于“2016-07-23T23:24:15.000Z”。您可以在纯JS或许多网站上查看,如[epochconverter.com](http://www.epochconverter.com)。您的输出会在三个小时后显示,因为您的本地时区偏移值为“+03:00”。如果你预计它甚至比这还多三个小时,那么我会说你的web服务发送了错误的数据。也许你是双重纠正。 –

+2

例如,假设您的后端是.NET,如果您在数据库中有基于UTC的值,但在检索它们时不使用DateTimeKind.Utc(使用DateTime.SpecifyKind),那么它们将具有' DateTimeKind.Unspecified'默认情况下。 ASP.Net将在序列化期间将这些视为*本地时间*,并将减去服务器的本地时区偏移量。 –