Javascript Moment.js和时区不';我不能只在Android Chrome上工作

Javascript Moment.js和时区不';我不能只在Android Chrome上工作,javascript,angularjs,google-chrome,timezone,momentjs,Javascript,Angularjs,Google Chrome,Timezone,Momentjs,我添加了moment.js来管理我的webapp中的时区。我在新西兰(GTM+13)安装了我的设备,并在以下方面运行良好: Iphone:Safari&Chrome 安卓:火狐 OSX:Safari和Chrome 再返回1天(我在GTM+0中)。但是它在Android Chrome上不起作用(我用几个Android设备测试了它),我也不知道为什么。我的代码: var dateFunctions = { "getCurrentDate": function(){ re

我添加了moment.js来管理我的webapp中的时区。我在新西兰(GTM+13)安装了我的设备,并在以下方面运行良好:

  • Iphone:Safari&Chrome
  • 安卓:火狐
  • OSX:Safari和Chrome
再返回1天(我在GTM+0中)。但是它在Android Chrome上不起作用(我用几个Android设备测试了它),我也不知道为什么。我的代码:

  var dateFunctions = {

    "getCurrentDate": function(){
      return moment().valueOf();
    },

    //I need Date type to use in a custom Calendar component.
    "getFormatDate": function(dateLong){
      var d = moment(parseInt(dateLong)).toDate();
        },

   //For jquery calendar. input: Date without local time; output: timestamp
   "getDate": function(date){
      var currentDay = moment();
      var d = moment(date).set("hour",currentDay.get("hour")).set("minute",currentDay.get("minute")).set("second",currentDay.get("second")).set("millisecond",currentDay.get("millisecond"));
      return d.valueOf();

    },

        ...
        }
。。。 ...

我认为这可能与安卓设备的谷歌账户有关。有什么想法吗

编辑:我对其进行编辑以添加更新的代码

一些内容:

  • 您的
    timezoneOffset
    变量名实际上是一个时区标识符,而不是偏移量。没什么大不了的,但可能会引起一些混乱

  • 实际上,这里根本不需要时刻时区。Moment.js可以在本地时区工作,而无需矩时区的帮助

  • 不管怎样,当您使用数字时间戳时,时区是不相关的。Unix时间始终基于UTC

  • 无需对*/1000使用基于秒的函数。时刻可以帮你解决这个问题

您的代码已更正:

"getCurrentDate": function(){
  return moment().valueOf();
},

"getFormatDate": function(dateLong){
  return moment(dateLong).toDate();
},
更进一步——因为您只处理数字时间戳和日期对象,所以这里根本没有使用矩的好理由

"getCurrentDate": function(){
  return Date.now();
},

"getFormatDate": function(dateLong){
  return new Date(dateLong);
},

如果您试图使用当地时间,您需要更清楚地了解如何来回发送数据。你不能用时间戳和保留本地时间。Unix时间戳中没有关于本地时间或时区的信息。

webapp是关于预订的,服务器无法检查客户端的时区,因此客户端必须发送正确的日期(如果客户端来自新西兰GTM+13,则需要在第二天发送到服务器)。webapp使用时间戳(它只需要检查日期而不是时间),因此当我将日期转换为另一种格式以显示它或将它发送到服务器时,需要添加时区。我试着用你的代码,你是对的,我不需要时刻时区,谢谢。但是Android Chrome(只有在这种情况下)的问题并没有消失。考虑使用Time<代码>格式>代码>函数,这样你就可以返回一个字符串。ISO8601通常是最好的选择。
"getCurrentDate": function(){
  return Date.now();
},

"getFormatDate": function(dateLong){
  return new Date(dateLong);
},