Отображение serverTime из ASP.NET в четырех разных часовых поясах с JScript - PullRequest
0 голосов
/ 28 ноября 2010

Я добавляю настраиваемый заголовок на главную страницу SharePoint и хотел бы отображать текущее время в четырех разных часовых поясах.Однако я не хочу использовать время клиента, так как невозможно узнать, в каком часовом поясе будет находиться клиент, или если у него правильное время на компьютере.

В идеале время должнобудет отображаться следующим образом:

Даллас: (UTC-6 с поддержкой 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 голосов
/ 28 ноября 2010

Не ясно, почему вы хотите сделать это в JavaScript.Или JScript.Пожалуйста, что бы вы ни делали, не используйте JScript .У JScript есть много крупных корпораций, застрявших в IE6 и, следовательно, в Windows XP.(См. 4-й комментарий здесь , среди других источников.)

JavaScript работает на клиенте, поэтому вы работаете со временем на локальном компьютере клиента.Можно, но сложнее, определить часовой пояс клиента и основывать свои расчеты на этом.

Однако, если вы используете серверный код ASP.Net, написанный на C # или VB , вы автоматически будете использовать местное время сервера.

Местное время - UTC + смещение часового пояса для этого местоположения + смещение (обычно +1) для летнего времени, если оно действует.

Эта страница объясняет, как получить время UTC (или зулу) в C # или VB.Как правило, это

DateTime.Now.ToUniversalTime();

Чтобы добавить к этому часы:

DateTime.Now.AddHours(3);

Вы можете поставить отрицательное число (-3), чтобы вычесть часы.

Вы можете комбинировать их для настройки UTC:

DateTime.Now.AddHours(3).ToUniversalTime();
0 голосов
/ 28 ноября 2010

Время сервера просто ...

Now()

Вы можете установить значение свойства text элемента управления label или свойства value элемента управления HiddenField на Now (), а затем получить к нему доступ черезJavascript в событии OnLoad.Вы также можете создать Web-сервис в .Net, который возвращает текущее время сервера (в формате JSON или XML) и вызывать его через Javascript.

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