考虑时区的客户端日期比较 - Javascript/Jquery
Date comparison in Client Side considering Timezone - Javascript/Jquery
我有一个要求,我需要将日期与当地时间进行比较。我在 EST DateTime 中的 DatetimePicker 中设置一个日期。所以我需要将它与当前时间进行比较,如果它小于当前时间,我需要显示验证警报。用户机器中的当前时间将具有不同的时区。所以我总是需要在比较之前将当前时区转换为 EST 时区。如果 EST 中用户计算机中的当前时区,则需要考虑相同的值并且转换不是 required.How 我可以在 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()
轻松完成此操作。这将 return 用户的时区以分钟为单位进行偏移,因此我们可以将这些分钟添加到用户的日期中。
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
我有一个要求,我需要将日期与当地时间进行比较。我在 EST DateTime 中的 DatetimePicker 中设置一个日期。所以我需要将它与当前时间进行比较,如果它小于当前时间,我需要显示验证警报。用户机器中的当前时间将具有不同的时区。所以我总是需要在比较之前将当前时区转换为 EST 时区。如果 EST 中用户计算机中的当前时区,则需要考虑相同的值并且转换不是 required.How 我可以在 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()
轻松完成此操作。这将 return 用户的时区以分钟为单位进行偏移,因此我们可以将这些分钟添加到用户的日期中。
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