GAE&;JavaScript日期时间同步

GAE&;JavaScript日期时间同步,javascript,python,google-app-engine,Javascript,Python,Google App Engine,在客户端和服务器之间同步时间的最佳实践是什么 我有这个查询数据存储的功能: @classmethod def read( cls, language=None, user=None, filters=None, **q_options ): assert not isinstance( cls, BaseModel ) assert issubclass( cls, BaseModel ) query = cls.query( cls.language == language )

在客户端和服务器之间同步时间的最佳实践是什么

我有这个查询数据存储的功能:

@classmethod
def read( cls, language=None, user=None, filters=None, **q_options ):
  assert not isinstance( cls, BaseModel )
  assert issubclass( cls, BaseModel )

  query = cls.query( cls.language == language )
  if filters:
    for name, value in cls.attributes( filters, [] ).iteritems():
      if name == 'updated':
        query = query.filter( getattr(cls, name) >= value )
      else:
        query = query.filter( getattr( cls, name ) == value )
    # logging.info( query )
    # Query(kind='Page', filters=AND(
    #   FilterNode('language', '=', 'en'),
    #   FilterNode('updated', '>=', datetime.datetime(2014, 5, 7, 9, 12, 51, 142000))))
    return query.fetch()
  data = query.fetch( **q_options )
  return cls.sort( data )
使用ajax调用执行时:

{method: 'GET', url: '/something.json?updated=' + (new Date().getTime() / 1000)}
它应该返回在调用中提供的时间之后更新的项目。(我正在使用它将浏览器的本地存储与真实数据同步)。嗯,它不起作用,但我发现这是因为服务器和客户端之间的时间差

我在UTC/GMT+2小时,CEST(中欧夏季时间)时区(这是javascript发送的),GAE dev_appserver在GMT工作。对此进行补偿:

updated=((new Date().getTime() - 1000*60*60*2) / 1000)
解决了这个问题,但硬编码并不能解决不同时区的问题。因此,有几个问题:

1) 真正的GAE服务器的时区是什么?它与dev_appserver的相同吗

2) 我应该处理客户端或服务器上下文(javascript或python)中的差异吗

3) 还有什么我应该知道的吗?(:


谢谢

这篇文章介绍了一个解决方案:


Google App Engine始终使用UTC,因此您需要一个库来调整您的首选项。

我建议尽可能多地在服务器端处理时区,因为您永远不知道您的消费者/客户机在解释/转换日期方面有多可靠。客户机的时间概念与他所在的位置有关,而您的服务器时间应该是引用。
new Date().getTime()
返回unix时间戳,它不应该依赖于时区。但是客户端只有在其时钟正确时才返回正确的时间,所以我认为您不应该依赖它。是的,我同意服务器应该是引用…我将使用
var timestamp=(data?hasOwnProperty.call)(数据,'updated'):false)?data.updated:new Date().UTC();
content Date,返回UTC。谢谢falks。谢谢!我会调查pytz