【问题标题】:How to compare values of two timestamps如何比较两个时间戳的值
【发布时间】:2016-08-06 22:02:11
【问题描述】:

我需要检查一个条件,我需要找出两个时间戳是否来自不同的日子。

我尝试使用 timestamp.getDate 然后检查

if (currentTimestamp.getDate() > previousTimestamp.getDate() )

当这两个值属于两个单独的月份时,就会出现问题,我该如何在纯 Javascript 中解决这个问题?

【问题讨论】:

  • currentTimestamp.getMonth() > previousTimestamp.getMonth() && currentTimestamp.getDate() > previousTimestamp.getDate() ?
  • “currentTimestamp”的类型和值是什么?时间戳通常是表示日期和时间的字符串,因此不太可能有 getDate 方法。如果是Date,那么可以比较getDateMath.abs(date0 - date1) < (2*8.64e7)的值,即相差不到两天。
  • 尝试比较每个日期的 .toDateString() 结果。此方法返回一个字符串,它是不含时间的日期部分,因此如果结果相同,您就知道两个时间戳都来自同一天。
  • @RobG - 使用差异不起作用,因为星期一 23:59 和星期二 00:01 仅相隔两分钟,但仍然是不同的日子......(或者我误解了你的意思? )

标签: javascript date time


【解决方案1】:

有多种方法可以实现这一目标。

如果 currentTimestamp 是一个字符串,只需获取日期部分(年、月、日)并进行比较。您还没有显示格式,所以如何操作取决于您。

如果currentTimestamp是日期,可以使用nnnnnn的建议,比较日期字符串:

if (currentTimestamp.toDateString() == previousTimestamp.toDateString())

但是,由于 toDateString 的值取决于实现,因此只能在主机内使用,不应跨主机比较字符串。

如果您不介意修改 Date 值,那么:

if (currentTimestamp.setHours(0,0,0,0) == previousTimestamp.setHours(0,0,0,0))

如果两者在同一天,也将返回 true。如果您不想更改日期,请先复制它们:

if (new Date(+currentTimestamp).setHours(0,0,0,0) == new Date(+previousTimestamp).setHours(0,0,0,0))

随便吧。

正如 Matt 所指出的,您的“日”概念应澄清为当地日或 UTC 日(或任何其他时区),因为接近当地日开始和结束的时间可能在不同的 UTC(或其他时间zone) 天,反之亦然。

【讨论】:

  • 感谢您的回复,很抱歉没有明确说明我使用的是哪种格式的问题。我正在使用 UTC 使其在所有地方保持一致。
  • @Bazinga777——在这种情况下,您应该比较 UTC 日期(比如 toISOString().slice(0,10))。
  • 谢谢,我试试看
【解决方案2】:
var dateObj = currentTimestamp.getDate();
var month = dateObj.getUTCMonth() + 1;
//months from 1-12
var day = dateObj.getUTCDate();
var year = dateObj.getUTCFullYear();
var dateObjOld = previousTimestamp.getDate();
var dayOld = dateObjOld.getUTCDate();
var monthOld = dateObjOld.getUTCMonth() + 1;
var yearOld = dateObjOld.getUTCFullYear();
if(year > yearOld && month > monthOld && day > dayOld) {
    // currentTimeStamp is newer. Do stuff
}

看到这个答案https://stackoverflow.com/a/2013332/4479004

【讨论】:

    【解决方案3】:

    使用.toDateString() method 应该可以做到:

    if (currentTimestamp.toDateString() != previousTimestamp.toDateString() ) {
        // different days
    }
    

    该方法将日期作为不带时间的字符串返回,格式为"Fri Apr 15 2016" - 但具体格式无关紧要,因为您所说的问题只是要确定两个时间戳是否在同一天。

    【讨论】:

      猜你喜欢
      • 2021-04-25
      • 2012-02-04
      • 2015-01-02
      • 2020-06-18
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-07
      相关资源
      最近更新 更多