【发布时间】:2013-11-06 21:59:29
【问题描述】:
我一直在阅读文档,但似乎找不到从服务器而不是客户端设置日期的方法?
比如这样的
moment().set('server time')
然后 moment() 将根据服务器的时间而不是客户端计算机的时间返回日期对象。
此功能是否存在,如果不存在,您会使用哪些推荐方法?现在我正在轮询服务器以获取服务器的时间,但是您可以想象这不是很有效。
更新了代码示例和摘要
我正在构建一个拍卖应用程序。所以服务器时间很关键。例如,如果用户篡改了他们的时间设置或者他们的时间是手动配置的,客户可能会看到一个已经结束的拍卖,而实际上它还有几分钟的时间。所有时间检查显然都是在服务器上完成的,但这就是我需要客户端和服务器同步的原因。现在您可以看到我每隔几秒就轮询服务器以获取最新时间。但是,我需要设置 moment() 以从我从服务器传递的变量中调用基本时间。所以每次我调用 moment() 时,它都会基于最初传入的时间而不是 new Date()。
app.getTime = ->
setInterval ->
$.get app.apiUrl + 'public/time', (time) ->
app.now = moment(time).format('YYYY-MM-DDTHH:mm')
, app.fetchTimeInterval
在我的应用程序的其他地方,我像这样使用应用程序的服务器时间
collection = new Auction.DealershipBasket [], query: "?$orderby=Ends&$filter=Ends lt datetime'#{app.now}'"
相反,我想调用以下命令,它会从服务器返回时间,我只需要使用来自上面 url 的 get 请求配置一次。
now = moment().format('YYYY-MM-DDTHH:mm')
【问题讨论】:
-
必须是准确的服务器时间吗?否则,我建议只使用服务器中的时区来转换本地时间。由于大多数时钟都是通过时间服务器同步的,因此差异应该非常小(当然,除非有人篡改了他们的时间设置)。
-
检查更新的问题。
-
我会研究一种获取服务器时间一次然后将差异存储到本地时间的方法。然后你可以用你自己的函数来包装你对时刻的调用,相应地调整时间。
-
嗯。非常有趣的想法。我绝对认为那值得一试。只是认为 Moment 会让你指定一个基准时间。可能应该查看源代码,看看分叉和添加功能是多么容易。
标签: javascript date momentjs