2

マスターページに非表示のフィールドがあります。そして、Javascriptを使用して、現在の日付と時刻をその「隠しフィールド」の値として設定しました。他のページのページロードメソッドでこの非表示フィールド値を取得できません。

これが私のコードです。

HiddenField hdnCurrentDate = (HiddenField)this.Master.FindControl("hdnCurrentDate");
                ClientScript.RegisterClientScriptBlock(this.GetType(), "Message", "var CurrentDate = new Date(); $('#" + hdnCurrentDate.ClientID + "').val(CurrentDate);alert($('#ctl00_hdnCurrentDate').val());", true);

マスターページでHiddenfieldを次のように定義しました

<asp:HiddenField ID="hdnCurrentDate" runat="server" />

「hdnCurrentDate」が未定義であるというアラートが表示されました。これは、ポストバックメソッドではなくページロードでコードを記述したためです。

これが私が実装した別の方法です。

コードビハインドでConvertTimeBySystemTimeZoneIdを使用しました。これが同じコードです。

DateTime ClientDateTime = DateTime.Now;
        DateTime _localTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(ClientDateTime, "Arab Standard Time");
        return _localTime;

「アラブ標準時」の代わりに宛先タイムゾーンIDを取得できませんでした。私がそれを手に入れれば、私の問題は解決されるでしょう。

私のページのいずれかで現在の日時を取得する他の方法はありますか?セッションとCookieを使用したくありません。

前もって感謝します。

4

7 に答える 7

3

以下は、クライアントの現在の日時を取得するためのjavascript関数です。

<script type="text/javascript">
function GetDate(date) {
    CurTime = new Date(date);
    var offset = (new Date().getTimezoneOffset() / 60) * (-1);
    var utc = CurTime.getTime() + (offset * 60000 * (-1));
    var serverDate = new Date(utc + (3600000 * offset));
    var dateString = (serverDate.getMonth() + 1) + "/" + serverDate.getDate() + "/" +     
serverDate.getFullYear() + " " + serverDate.toLocaleTimeString("en-US", { hour12: true });
}
</script>

以下のように、コードビハインドからオフセット時間を取得することもできます。

public static TimeSpan GetOffSetTime(string date)
    {
        DateTime d = Convert.ToDateTime(date);
        TimeZone zone = TimeZone.CurrentTimeZone;
        TimeSpan local = zone.GetUtcOffset(d);
        return local;
    }
于 2014-09-01T10:57:27.997 に答える
2

私は次の方法を使用してこれを行いました:

  1. 私はHiddenFieldそれが必要な前のページに取り込んだ:

    <asp:HiddenField ID="hdnTimeOffset" ClientIDMode="Static" runat="server" 
     Value="" />
    
  2. 次に、これによってブラウザのタイムゾーンを取得しています:

    $(document).ready(function () {
         var offset = new Date().getTimezoneOffset();
         $('#hdnTimeOffset').val(offset);
    
     });
    
  3. Sessionボタンクリックのように、次のページにリダイレクトする前に、前のページの変数にタイムゾーンを取得しています。

    protected void btn_Click(object sender, EventArgs e)
    {
        Session["TimeOffset"] = hdnTimeOffset.Value;
        Response.Redirect("~/Root/abc.aspx");
    }
    
  4. メインページで、次のコードを使用して現在の時刻を取得します。

    DateTime dtmCurrentDateTime = DateTime.Now.ToUniversalTime();
    double dblMinutes =Convert.ToDouble(Session["TimeOffset"].ToString());                
    dtmCurrentDateTime = dtmCurrentDateTime.AddMinutes(-dblMinutes);
    
于 2013-08-26T06:16:38.383 に答える
0

'私のページのいずれかで現在の日時を取得する他の方法はありますか。セッションとCookieを使用したくありません。」 その場合、JavaScriptを使用できます

また、を使用する必要はありませんRegisterStartupScript。イベントでGetDate()関数を呼び出すだけです。onLoad

<script type="text/javascript">

    window.onload = function(){
        getDate();
    };

    function GetDate() 
    {
        var dt = new Date();
        var element = document.getElementById("MainContent_FormView1_Label1");

        element.text = dt.toDateString();
    }
</script>

ただし、を使用する際のベストプラクティスとして、このSOスレッドを読むか、 jQueryやそのwindow.onloadようなフレームワークの使用を検討することをお勧めします。document.ready

于 2012-12-05T06:31:50.390 に答える
0

マスターページ

サーバー時間を設定する

<asp:hiddenfield runat="server" id="HiddenField1"></asp:hiddenfield>

protected void Page_Load(object sender, EventArgs e)
{
    HiddenField1.Value = DateTime.Now.ToString();
}

クライアントマシンの時間を設定する

 <script type="text/javascript">
        function setvalue() {
            document.getElementById('HiddenField1').value = new Date();
        }
    </script>
   <body onload="setvalue();">
    <form id="form1" runat="server">
    <div>
        <asp:HiddenField ID="HiddenField1" runat="server"/>
    </div>
    </form>
    </body>

コンテンツページ

HiddenField hdnvalue = this.Master.Master.FindControl("HiddenField1") as HiddenField;
string currenttime=hdnvalue.Value;
于 2012-12-05T06:53:42.860 に答える
0

このリンクから変更されたコード:

<script type="text/javascript">
function getDateTime()
{
    var localTime = new Date();
    var year= localTime.getYear();
    var month= localTime.getMonth() +1;
    var date = localTime.getDate();
    var hours = localTime .getHours();
    var minutes = localTime .getMinutes();
    var seconds = localTime .getSeconds();    
    //at this point you can do with your results whatever you please
}
</script>

この時点で、すべてのフィールドを連結してasp:HiddenFieldコントロールに配置し、サーバーで読み取ることができるようにします。サーバーで、HiddenFieldのText値に対してConvert.ToDateTime()を呼び出します。

マスターページを使用しない場合は、これを試してください。

HiddenField hdnFieldValue = (HiddenField)PreviousPage.FindControl("hdnField");

更新しました:

ページに非表示フィールドを配置します。

<asp:HiddenField ID="hidChild" runat="server"/>

javascript関数で

 var childHidden = document.getElementById('<%hidChild.ClientID%>');
 childHidden.value = window.opener.document.getElementById('text1').value;

次に、ページ読み込みイベントでこの非表示のコントロールにアクセスします。

Response.Write(hidChild.Value); or Session["ParentVal"]=hidChild.Value;
于 2014-01-29T03:53:40.423 に答える
0

CulturalInfo From C#を使用して取得するのはどうですか?

文字列currentFormat=CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;

これにより、クライアントの任意の形式で「dd / MM/yy」または「dd/M/YYY」が返されます。

于 2018-11-13T03:37:03.077 に答える
0

ASP.Net MVCを使用している場合は、次のコードを使用してください

クラス「GetTime」を作成します。このクラスでは、「エジプト標準時」が見つかります。このリストから標準タイムゾーンを選択できます

public class GetTime{
        public static DateTime GetCurrentTime()
        {
            DateTime serverTime = DateTime.Now;
            DateTime _localTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(serverTime, TimeZoneInfo.Local.Id, "Egypt Standard Time");
            return _localTime;
        }
    }

Global.asaxで、「Application_Start()」に行を追加します。

GetTime.GetCurrentTime();

次に、時間を確保する必要がある場合は、次のようにコードを記述できます。

var localTime = GetTime.GetCurrentTime();
var mytimeVarialbe = localTime.Hour;

クラスをインポートすることを忘れないでください

 using yourproject.Folderthatcontainclass
于 2021-09-15T09:24:27.000 に答える