2017-02-06 3 views
0

Я добавил moment.js для управления часовым поясом в моем webapp. Я настроить свои устройства в Новой Зеландии (GTM +13) и отлично работает на:Moment.js и часовой пояс не работают только на Android Chrome

  • Iphone: Safari & Chrome
  • Android: Firefox
  • 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(); 

    }, 

     ... 
     } 

... ...

//it should return tomorrow (GTM +13) in Android Chrome 
var currentDay = managedates.getFormatDate(managedates.getCurrentDate()) 

Я думаю, что, возможно, это связано с учетной записью Google, связанной с Android устройства. Есть идеи?

Edit: я редактировал его, чтобы добавить мой обновленный код

ответ

2

несколько вещей:

  • Ваш timezoneOffset имя переменной является на самом деле идентификатор часового пояса, а не смещение. Неважно, но может вызвать некоторую путаницу.

  • Вам вообще не нужен момент-часовой пояс. Moment.js может работать в локальном часовом поясе без помощи момента времени.

  • Временные зоны являются неуправляемыми, когда вы работаете с числовыми временными метками в любом случае. Время Unix всегда основано на UTC.

  • Не нужно использовать функции, основанные на секундах, с */1000. Момент может справиться с этим для вас.

Ваш код, исправлено:

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

"getFormatDate": function(dateLong){ 
    return moment(dateLong).toDate(); 
}, 

один шаг дальше - поскольку вы работаете только с числовыми метками времени и даты объектов, нет действительно веских причин использовать Moment здесь вообще.

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

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

Если вы пытались работать с местным временем, вам нужно быть более ясным о том, как вы отправляете данные туда и обратно. Вы не можете сделать это с отметками времени и сохранить местное время. В временной отметке Unix отсутствует информация о локальном времени или часовом поясе.

+0

Webapp - это заказы, и сервер не может проверить часовой пояс клиента, поэтому клиент должен отправить правильные даты (если клиент из Новой Зеландии GTM +13, ему необходимо отправить следующий день на сервер) , Webapp работает с отметками времени (нужно только проверить день, а не время), поэтому мне нужно добавить часовой пояс, когда я конвертирую дату в другой формат для ее отображения или отправки на сервер. Я стараюсь с вашим кодом, и вы правы, мне не нужен момент-время, спасибо. Но проблема с Android Chrome (только в этом случае) не исчезла. – josekron

+0

Рассмотрите возможность использования функции 'format', так что вы можете отправить обратно строку. Обычно ISO8601 - это путь. –

Смежные вопросы