2011-08-12 35 views
0

我正在写一个计时器的web应用程序,它记录开始时间和停止time.It使用前端javascript,jquery1.4.2python后端代码。当一个开始按钮被点击,开始时间是保存在一个javascript变量中。当再次单击按钮时,停止时间保存在另一个变量中。这些值作为隐藏参数传递给获取起始值的python代码,从djangorequest参数中停止值。javascript/python时间处理失败,在铬

我希望开始/停止参数的值是按以下格式

"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中查找值在页面的hiddenfields设置

与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); 

... 
} 
); 

回答

1

你不希望在区域设置的时间字符串,通过toString方法你可以提供自己的格式,或者使用toUTCString()。

toLocaleTimeString特别用于显示用户习惯的时间,您希望以设定的格式显示时间。

因此,而不是start_date.toLocaleTimeString(),您想要使用start_date。 toUTCString()。

+0

我想这会给我“星期五,2011年8月12日15:02:45 GMT”..我将不得不在Python中处理然后...谢谢..将尝试 – jimgardener

+0

输出将确实会改变,但它会在每个浏览器上保持不变。你可以使用toString来给它自己的格式,它会使解析更容易,因为你可以决定发送什么信息。 – TJHeuvel

1

为什么用JavaScript格式化时间并解析Python,甚至让自己陷入混乱的不同区域?

尝试使用Date.getTime insteam:

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

这可以让你的时间以毫秒为单位,因为时代,应该始终是稳定的。