Javascript / Python время обработки не удается в Chrome - PullRequest
0 голосов
/ 12 августа 2011

Я пишу веб-приложение с таймером, которое записывает время начала и время окончания. Оно использует javascript,jquery1.4.2 для внешнего интерфейса и python для внутреннего кода. Когда нажата кнопка запуска, время начала сохраняется в javascript Переменный. При повторном нажатии кнопки время остановки сохраняется в другой переменной. Эти значения передаются в виде скрытых параметров в код Python, который получает значения начала, остановки из django request параметра.

Я ожидаю, что значения параметров запуска / остановки будут в следующем формате

"07:16:03 PM"

, чтобы его можно было проанализировать с использованием строки формата '%I:%M:%S %p'. Я получаю это правильно в mozilla firefox. Но когда я использую chrome, я получаю только

"19:16:03"

Это приводит к ошибке значения, когда я пытаюсь проанализировать его с приведенной выше строкой формата.

import time
...
def process_input(request,...):    
    start_time=request.POST[u'timerstarted']
    ...
    fmtstr='%I:%M:%S %p'
    start_time_list = list(time.strptime(start_time,fmtstr)[3:6])

Я попытался поместить alert('start time set as'+start_time) в javascript, чтобы найти, какие значения установлены в скрытых полях страницы

С Firefox я получил

start time set as08:03:09 PM
stop time set as08:03:43 PM

но с хромом

start time set as20:04:21
stop time set as20:04:32

Мои знания javascript, jquery минимальны. Почему скрипт работает по-разному в этих двух браузерах? Ниже приведен фрагмент JavaScript

$(document).ready(function(){
    var changeBtnStatus=function(){
    var timebtnvalue=$('#timebtn').attr("value");

    if (timebtnvalue =="start"){
        ...      
        var start_date=new Date();
        var str_time=start_date.toLocaleTimeString();       
        var timerstartedfield =$('#timerstarted');              
        timerstartedfield.attr("value",str_time);        
        alert('start time set as'+str_time);

    }
    else if (timebtnvalue=="stop"){
        ...            
        var stop_date=new Date();
        var stp_time=stop_date.toLocaleTimeString();        
        var timerstoppedfield =$('#timerstopped');
        timerstoppedfield.attr("value",stp_time);             
        alert('stop time set as'+stp_time);       
    }
};
var timerBtnClicked=function(){   
    ...
    changeBtnStatus();
};

$('#timebtn').click(timerBtnClicked);

...
}
);

Ответы [ 2 ]

1 голос
/ 12 августа 2011

Зачем форматировать время в JavaScript и анализировать в Python, и даже подвергать себя путанице в разных локалях?

Попробуйте использовать Date.getTime insteam:

start_time = (new Date).getTime();
stop_time = (new Date).getTime();

Это дает вам время в миллисекундах с начала эпохи, которое всегда должно быть стабильным.

1 голос
/ 12 августа 2011

Вам не нужна строка времени в локали, используя метод toString, вы можете указать свой собственный формат или использовать toUTCString ().

toLocaleTimeString специально предназначено для отображения времени как пользователяиспользуется, вы хотите его в установленном формате.

Таким образом, вместо start_date.toLocaleTimeString (), вы хотите использовать start_date. toUTCString ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...