簡體   English   中英

考慮時區的客戶端日期比較 - Javascript/Jquery

[英]Date comparison in Client Side considering Timezone - Javascript/Jquery

我有一個要求,我需要將日期與當地時間進行比較。 我正在 EST DateTime 中的 DatetimePicker 中設置一個日期。 所以我需要將它與當前時間進行比較,如果它小於當前時間,我需要顯示驗證警報。 用戶機器中的當前時間將具有不同的時區。 所以我總是需要在比較之前將當前時區轉換為 EST 時區。 如果當前時區在 EST 中的用戶機器中,則需要考慮相同的值並且不需要轉換。如何在 Javascript/Jquery 中實現這一點。如何修改下面的 javascript 以處理上述情況。

iam 設置 START_DATE n cshtml 頁面如下

  <div class='input-group date' id='datetimepicker1'>
                                @Html.EditorFor(model => model.START_DATE, new { htmlAttributes = new { @class = "form-control z-index-0" } })
                                <span class="input-group-addon" id="calenderStart">
                                    <span class="glyphicon glyphicon-calendar"></span>
                                </span>
                            </div>

在 Javascript 方面...

var startDate= new Date($("#START_DATE").val());
var currentDateTime= new Date();  //Convert to EST if it is in DifferentTimeZone.Doubt on this part
if(startDate < currentDateTime)
{
 alert ("StartDateTime should be greater than current EST DateTime);
}

也許最容易理解的方法是將兩個日期時間都轉換為 UTC,然后比較它們。

要將日期選擇器時間轉換為 UTC,您只需添加 5 小時,因為 EST 始終比 UTC 晚 5 小時。

var theDateAsString = "07/15/2021 12:08 PM";
var dateFromDatePicker = new Date(theDateAsString);
dateFromDatePicker.setHours(dateFromDatePicker.getHours() + 5);
console.log(dateFromDatePicker);

無論您的位置如何,控制台都會為您提供 EST 時間加 5 小時。 控制台將打印帶有時區偏移量的 UTC 日期,例如,如果您在中歐夏令時區(比 UTC 晚 2 小時),它會打印以下內容:

Date Thu Jul 15 2021 17:08:00 GMT+0200 (Central European Summer Time)

所以現在您還需要將用戶的時間轉換為 UTC 以便能夠進行比較。 您可以使用getTimezoneOffset()輕松完成此操作。 這將以分鍾為單位返回用戶的時區偏移量,因此我們可以將這些分鍾添加到用戶的日期中。

var usersDate = new Date();
console.log(usersDate); //e.g. Date Fri Jul 09 2021 12:44:39 GMT+0200 (Central European Summer Time)
console.log(usersDate.getTimezoneOffset());// e.g. -120 === -2 hours
usersDate.setMinutes(usersDate.getMinutes() + usersDate.getTimezoneOffset());
console.log(usersDate); // e.g. Date Fri Jul 09 2021 10:44:39 GMT+0200 (Central European Summer Time)

現在您可以只比較日期:

if(usersDate < dateFromDatePicker){
    alert("earlier");
}
else{
    alert("later or the same");
}

為了證明這是有效的,假設用戶處於中歐夏令時(UTC + 2 小時)並且日期時間是 7 月 9 日的 13:00。 這將打印“用戶的日期更早”,因為時區之間的差異是 7 小時(07:00 + 7 = 14:00):

var theDateAsString = "07/09/2021 07:00 AM";
var dateFromDatePicker = new Date(theDateAsString);
dateFromDatePicker.setHours(dateFromDatePicker.getHours() + 5);
console.log(dateFromDatePicker);
var usersDate = new Date();
usersDate.setMinutes(usersDate.getMinutes() + usersDate.getTimezoneOffset());
console.log(usersDate);
if(usersDate < dateFromDatePicker){
    console.log("user's date is earlier");
}
else{
    console.log("user's date is later or the same");
}

這將打印“用戶的日期晚於或相同”(05:00 + 7 小時 = 12:00):

var theDateAsString = "07/09/2021 05:00 AM";
var dateFromDatePicker = new Date(theDateAsString);
dateFromDatePicker.setHours(dateFromDatePicker.getHours() + 5);
console.log(dateFromDatePicker);
var usersDate = new Date();
usersDate.setMinutes(usersDate.getMinutes() + usersDate.getTimezoneOffset());
console.log(usersDate);
if(usersDate < dateFromDatePicker){
    console.log("user's date is earlier");
}
else{
    console.log("user's date is later or the same");
}

在 JavaScript 中,您可以使用 toLocaleString 並提供時區代碼進行轉換。

var d = new Date();
d.toLocaleString('en-GB', { timeZone: 'UTC' })
console.log(d);

More example can be found on this URL.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM