2010-11-28 40 views
0

我正在向SharePoint主頁面添加自定義標題,並且想要在四個不同的時區中顯示當前時間。但是,我不想使用客戶端的時間,因爲無法知道客戶端將在什麼時區,或者他們的計算機上是否有正確的時間。使用JScript在四個不同的時區顯示來自ASP.NET的serverTime在四個不同的時區使用JScript

理想的是,如下的時間應顯示:

達拉斯:(UTC-6 W/DST支持)祖魯:(UTC)伊拉克:(UTC + 3)阿富汗:(UTC + 4.5)

我的問題是,我真的不知道任何有關ASP.NET,因爲我自己是一個PHP人。所以我需要一種方法將serverTime作爲JavaScript可用於執行計算的變量來傳遞,以顯示正確的時區。

UPDATE:

我需要的時鐘更新爲每一秒的變化。所以它是一個現場時間,而不是靜態時間。

更新2:

這是我使用的,有什麼建議的代碼?

<script runat="server"> 
    Sub Page_Load(ByVal Sender As Object, ByVal E As EventArgs) 
    End Sub 
    Public Function dtBase() As Double 
    Dim d1 As Date = New Date(1970, 1, 1) 
    Dim d2 As Date = Date.UtcNow 
    Dim ts As TimeSpan = d2 - d1 
    Return ts.TotalMilliseconds 
    End Function 
</script> 

<html> 
<head> 

<script type="text/javascript"> 

var serverTime=<%=dtBase%> 
var clientTime = new Date().getTime(); 
var milliDiff = serverTime - clientTime; 

function tO(){ return new Date(); } 

function tN(){ x=new Date(tO().getUTCFullYear(),tO().getUTCMonth(),tO().getUTCDate(),tO().getUTCHours(),tO().getUTCMinutes(),tO().getUTCSeconds()); x.setTime(x.getTime()+milliDiff); return x; } 

function lZ(x){ return (x>9)?x:'0'+x; } 

// CST time (subtract 5 hours from UTC time) 
// function dS(){ x=new Date(tN().getUTCFullYear(),tN().getUTCMonth(),tN().getUTCDate(),tN().getUTCHours(),tN().getUTCMinutes(),tN().getUTCSeconds()); x.setTime(x.getTime()-(5*3600000)); return x; } 
// CST time (subtract 6 hours from UTC time)   
function dS(){ x=new Date(tN().getUTCFullYear(),tN().getUTCMonth(),tN().getUTCDate(),tN().getUTCHours(),tN().getUTCMinutes(),tN().getUTCSeconds()); x.setTime(x.getTime()-(6*3600000)); return x; } 
function dallasT(){ document.getElementById('DALLAS').innerHTML=eval(dT); setTimeout('dallasT()',1000); } 
var dT="lZ(dS().getHours())+':'+lZ(dS().getMinutes())+':'+lZ(dS().getSeconds())"; 

// ZULU time (UTC time) 
function zS(){ x=new Date(tN().getUTCFullYear(),tN().getUTCMonth(),tN().getUTCDate(),tN().getUTCHours(),tN().getUTCMinutes(),tN().getUTCSeconds()); x.setTime(x.getTime()); return x; } 
function zuluT(){ document.getElementById('ZULU').innerHTML=eval(zT); setTimeout('zuluT()',1000); } 
var zT="lZ(zS().getHours())+':'+lZ(zS().getMinutes())+':'+lZ(zS().getSeconds())"; 

// IRAQ time (add 3 hours to UTC time) 
function iS(){ x=new Date(tN().getUTCFullYear(),tN().getUTCMonth(),tN().getUTCDate(),tN().getUTCHours(),tN().getUTCMinutes(),tN().getUTCSeconds()); x.setTime(x.getTime()+(3*3600000)); return x; } 
function iraqT(){ document.getElementById('IRAQ').innerHTML=eval(iT); setTimeout('iraqT()',1000); } 
var iT="lZ(iS().getHours())+':'+lZ(iS().getMinutes())+':'+lZ(iS().getSeconds())"; 

// AFGN time (add 4.5 hours to UTC time) 
function aS(){ x=new Date(tN().getUTCFullYear(),tN().getUTCMonth(),tN().getUTCDate(),tN().getUTCHours(),tN().getUTCMinutes(),tN().getUTCSeconds()); x.setTime(x.getTime()+(4.5*3600000)); return x; } 
function afgnT(){ document.getElementById('AFGN').innerHTML=eval(aT); setTimeout('afgnT()',1000); } 
var aT="lZ(aS().getHours())+':'+lZ(aS().getMinutes())+':'+lZ(aS().getSeconds())"; 

</script> 
</head> 
<body onload="zuluT();dallasT();iraqT();afgnT();"> 
<table>  
    <tr> 
    <td> 
     DALLAS: <span id="DALLAS">&nbsp;</span> 
     ZULU: <span id="ZULU">&nbsp;</span> 
     IRAQ: <span id="IRAQ">&nbsp;</span> 
     AFGN: <span id="AFGN">&nbsp;</span> 
    </td> 
    </tr> 
</table> 

更新3:

還是不知道,如果代碼工作。我的SharePoint服務器拒絕了代碼塊的頁面。我絕對沒有想法如何做代碼隱藏。 JS工作,但如果客戶的時間關閉,該站點顯示不正確的時間。真的希望我能用PHP編寫這個代碼。我會在一週前完成。 ;)

UPDATE 4:

此更新適用於任何人,在未來尋找答案的問題跨越這個絆倒。上面的代碼已更新爲正常工作。唯一的問題是SharePoint默認情況下不允許使用代碼,因此要啓用它,必須修改web.config文件。 web.config文件通常位於站點的根目錄中。在該文件(這是XML)中,你會發現一個標籤。其中有些內容,你應該找到,而且在裏面,你應該找到。在該標籤的內部,你想添加:

<PageParserPath VirtualPath="/relative/path/to/your/file/here.aspx" CompilationMode="Always" AllowServerSideScript="true" /> 

我希望這可以幫助你們。

+0

我們很多人都覺得這種痛苦涉及的SharePoint。您也可以在[Sharepoint溢出](http://www.sharepointoverflow.com/)上嘗試發佈您的問題。 – DOK 2010-11-30 13:53:02

回答

0

服務器時間簡直是......

Now() 

您可以設置一個標籤控件或HiddenField控件的value屬性的文本屬性的值現在(),然後通過JavaScript訪問在OnLoad事件中。您還可以在.Net中創建一個WebService,以返回服務器的當前時間(使用JSON或XML)並通過Javascript調用該服務。

0

目前還不清楚爲什麼你想在JavaScript中做到這一點。或者JScript。請,無論你做什麼,不要使用JScript。 JScript在IE6中有很多大公司,因此也有Windows XP。 (見第4條評論here,以及其他來源。)

JavaScript在客戶端上運行,因此您正在處理客戶端本地計算機上的時間。確定客戶的時區是可能的,但更困難的一點是,根據您的計算結果進行計算。

但是,如果你使用使用ASP.Net服務器端代碼編寫的C#或VB,您將自動使用服務器的本地時間。

本地時間爲UTC +該位置的時區偏移量+夏令時的偏移量(通常爲+1)(如果有效)。

This page解釋瞭如何在C#或VB中獲得UTC(或祖魯語)時間。基本上,它是

DateTime.Now.ToUniversalTime(); 

要小時添加到:

DateTime.Now.AddHours(3); 

你可以把一個負數(-3)減去小時。

可以結合使用這些調整UTC:

DateTime.Now.AddHours(3).ToUniversalTime(); 
+0

我的錯誤,我的意思是JavaScript,沒有意識到我使用了一個無效的縮寫。它不一定是JS,我只是選擇它,因爲它看起來最簡單。而且我無法上傳任何內容到站點目錄之上的服務器。我所能修改的只是default.master。 – HasecBinUsr 2010-11-28 19:03:32

相關問題