我正在向SharePoint母版页添加自定义标题,我想在四个不同的时区显示当前时间。但是,我不想使用客户端的时间,因为无法知道客户端所处的时区,或者他们的计算机上是否有正确的时间。
理想情况下,时间应显示如下:
达拉斯:(UTC-6 w / DST支持)祖鲁:(UTC)伊拉克:(UTC + 3)阿富汗:(UTC + 4.5)我的问题是我对ASP.NET一无所知,因为我自己就是一个PHP人。因此,我需要一种方法将serverTime作为一个变量传递,JavaScript可以使用它来执行计算以显示正确的时区。
更新
我需要在每秒更改时更新时钟。所以这是一个实时时间而不是静态时间。
更新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"> </span>
ZULU: <span id="ZULU"> </span>
IRAQ: <span id="IRAQ"> </span>
AFGN: <span id="AFGN"> </span>
</td>
</tr>
</table>
更新3:
仍然不知道代码是否有效。我的SharePoint服务器拒绝了代码块的页面。我绝对不知道怎么做代码隐藏。 JS工作,但如果客户端的时间关闭,网站显示不正确的时间。真的希望我能用PHP编写代码。我会在一周前完成的。 ;)
更新4:
此更新适用于将来偶然发现问题的答案的任何人。上面的代码已更新为正常工作。唯一的问题是SharePoint默认情况下不允许代码,因此要启用它,您必须修改web.config文件。 web.config文件通常位于站点的根目录中。在该文件(XML)中,您将找到一个标记。有些内心,你应该找到,并且在内部,你应该找到。在该标记内,您要添加以下内容:
<PageParserPath VirtualPath="/relative/path/to/your/file/here.aspx" CompilationMode="Always" AllowServerSideScript="true" />
我希望这对你们有所帮助。
答案 0 :(得分:0)
服务器时间很简单......
Now()
您可以将标签控件的text属性值或HiddenField控件的value属性设置为Now(),然后通过OnLoad事件中的Javascript访问它。您还可以在.Net中创建一个返回服务器当前时间(以JSON或XML格式)的WebService,并通过Javascript调用它。
答案 1 :(得分:0)
目前尚不清楚为什么要在JavaScript中执行此操作。或JScript。不管你做什么,不要使用JScript 。 JScript有很多大公司陷入IE6,因此也是Windows XP。 (参见第4条评论here,以及其他来源。)
JavaScript在客户端上运行,因此您正在处理客户端本地计算机上的时间。确定客户的时区是可能的,但更加困难,并将计算基于此。
但是,如果你使用用C#或VB 编写的ASP.Net服务器端代码,你将自动使用服务器的本地时间。
本地时间是UTC +该位置的时区偏移量,+夏令时的偏移量(通常为+1)(如果有效)。
This page解释了如何在C#或VB中获得UTC(或Zulu)时间。基本上,它是
DateTime.Now.ToUniversalTime();
为此增加几小时:
DateTime.Now.AddHours(3);
您可以输入负数(-3)来减去小时数。
您可以将这些组合起来调整UTC:
DateTime.Now.AddHours(3).ToUniversalTime();