使用JScript在四个不同的时区中显示ASP.NET的serverTime

时间:2010-11-28 18:44:56

标签: javascript asp.net sharepoint datetime

我正在向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">&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编写代码。我会在一周前完成的。 ;)

更新4:

此更新适用于将来偶然发现问题的答案的任何人。上面的代码已更新为正常工作。唯一的问题是SharePoint默认情况下不允许代码,因此要启用它,您必须修改web.config文件。 web.config文件通常位于站点的根目录中。在该文件(XML)中,您将找到一个标记。有些内心,你应该找到,并且在内部,你应该找到。在该标记内,您要添加以下内容:

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

我希望这对你们有所帮助。

2 个答案:

答案 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();