比较服务器时间和浏览器时间
Compare Server Time and Browser Time
我的 table 有 3 列:FileName
、LastUpdateTime
和一个“重新启动”按钮。
只有在上次更新时间超过 20 分钟之前,我才需要显示重启按钮。我从服务器获取最后更新时间。 d = new Date()
给出本地浏览器时间,但 lastUpdateTime 来自服务器。服务器与客户端浏览器处于不同的时区。
如果服务器和浏览器处于同一时区,则以下代码有效。如果服务器和浏览器处于不同的时区,您对如何解决这个问题有什么建议吗?
此应用程序应该 运行 美国和欧洲的任何地方。
var lastUpdatedTime = (gridData[i].LastTimeUpdated);
var d = new Date();
//deducting 20 min from current time
var deductTwenty = d.setMinutes(d.getMinutes() - 20);
var parsedupdatetime = Date.parse(lastUpdatedTime);
// If the last update time is not 20 ago, hide it.
if (parsedupdatetime > deductTwenty) {
newrestartButton.hide();
}
服务器日期解析可能出了问题。查看 Date.parse function spec - 并确保您的服务器返回的内容可以像 ISO8601 格式的日期一样被正确解析。
在 .cshtml 文件中使用 .NET 获取服务器端的日期。假设您使用 MVC(因为您标记了这个问题 kendo-asp.net-mvc)。
@{
var deductTwenty = DateTime.Now.AddMinutes(-20);
}
<script>
var jsDeductTwenty = new Date(@deductTwenty.Year, @deductTwenty.Month-1, @deductTwenty.Day, @deductTwenty.Hour, @deductTwenty.Minute);
</script>
结果:
您必须将您的 lastUpdatedTime
转换为客户端时区,这意味着您应该在减去 20 分钟的日期时将服务器时间转换为客户端时间。您可以使用 momentjs, moment-timezone and jstimezonedetect 来实现这一点。
你的代码应该是这样的
// get current client timezone with jstimezonedetect
var currentTz = jstz.determine().name(); // e.g "Europe/London"
// parse last update time to moment object and change its timezone
var lastUpdateTime = moment(lastUpdatedTime, "M/DD/YYYY hh:mm a").tz(currentTz);
// create date using moment and deduct 20 mins from it
var deductTwenty = moment().subtract(20, 'minutes');
// now compare
if (lastUpdateTime > deductTwenty) {
newrestartButton.hide();
}
希望对您有所帮助。
我的 table 有 3 列:FileName
、LastUpdateTime
和一个“重新启动”按钮。
只有在上次更新时间超过 20 分钟之前,我才需要显示重启按钮。我从服务器获取最后更新时间。 d = new Date()
给出本地浏览器时间,但 lastUpdateTime 来自服务器。服务器与客户端浏览器处于不同的时区。
如果服务器和浏览器处于同一时区,则以下代码有效。如果服务器和浏览器处于不同的时区,您对如何解决这个问题有什么建议吗?
此应用程序应该 运行 美国和欧洲的任何地方。
var lastUpdatedTime = (gridData[i].LastTimeUpdated);
var d = new Date();
//deducting 20 min from current time
var deductTwenty = d.setMinutes(d.getMinutes() - 20);
var parsedupdatetime = Date.parse(lastUpdatedTime);
// If the last update time is not 20 ago, hide it.
if (parsedupdatetime > deductTwenty) {
newrestartButton.hide();
}
服务器日期解析可能出了问题。查看 Date.parse function spec - 并确保您的服务器返回的内容可以像 ISO8601 格式的日期一样被正确解析。
在 .cshtml 文件中使用 .NET 获取服务器端的日期。假设您使用 MVC(因为您标记了这个问题 kendo-asp.net-mvc)。
@{
var deductTwenty = DateTime.Now.AddMinutes(-20);
}
<script>
var jsDeductTwenty = new Date(@deductTwenty.Year, @deductTwenty.Month-1, @deductTwenty.Day, @deductTwenty.Hour, @deductTwenty.Minute);
</script>
结果:
您必须将您的 lastUpdatedTime
转换为客户端时区,这意味着您应该在减去 20 分钟的日期时将服务器时间转换为客户端时间。您可以使用 momentjs, moment-timezone and jstimezonedetect 来实现这一点。
你的代码应该是这样的
// get current client timezone with jstimezonedetect
var currentTz = jstz.determine().name(); // e.g "Europe/London"
// parse last update time to moment object and change its timezone
var lastUpdateTime = moment(lastUpdatedTime, "M/DD/YYYY hh:mm a").tz(currentTz);
// create date using moment and deduct 20 mins from it
var deductTwenty = moment().subtract(20, 'minutes');
// now compare
if (lastUpdateTime > deductTwenty) {
newrestartButton.hide();
}
希望对您有所帮助。