2016-04-15 4 views
0

Мне нужно проверить состояние, в котором мне нужно выяснить, есть ли две временные метки из отдельных дней.Как сравнить значения двух временных меток

Я попытался с помощью timestamp.getDate, а затем проверить

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

Проблема возникает тогда, когда эти два значения будут принадлежать двух отдельных месяцев, как я могу идти об этом в чистом JavaScript?

+0

'currentTimestamp.getMonth()> previousTimestamp.getMonth() && currentTimestamp.getDate()> previousTimestamp.getDate()'? – guest271314

+0

Каков тип и значение «currentTimestamp»? Временная метка обычно представляет собой строку, представляющую дату и время, поэтому вряд ли будет иметь метод * getDate *. Если это дата, то вы можете сравнить значения * getDate * и если 'Math.abs (date0 - date1) <(2 * 8.64e7)', то есть разница составляет менее двух дней. – RobG

+2

Попробуйте сравнить результат .toDateString() для каждой даты. Этот метод возвращает строку, которая является частью даты без времени, поэтому, если результат тот же, вы знаете, что временные метки относятся к одному и тому же дню. – nnnnnn

ответ

2

Существует несколько способов достижения этого.

Если currentTimestamp - это строка, просто введите даты (год, месяц, день) и сравните. Вы не указали формат, поэтому, как вы это делаете, зависит от вас.

Если currentTimestamp является датой, вы можете использовать NNNNNN-й предложение и сравнить даты строки:

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

Однако поскольку значение toDateString зависит от реализации, должен использоваться только в пределах хоста, строки не следует сравнивать между хостами.

Если вы не возражаете изменения значения даты, а затем:

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

также возвращает истину, если оба в тот же день. Если вы не хотите менять даты, скопируйте их первым:

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

Независимо от того, что подходит.

А как отмечает Мэтт, ваша концепция «день» должна быть уточнена в местный день или в день UTC (или в любой другой часовой пояс), так как времена, близкие к началу и концу местного дня, могут быть в разных UTC (или других часовой пояс), и наоборот.

+0

Спасибо, за ответ и жаль, что не разъяснял мой вопрос о том, в каком формате я был с помощью. Я использую UTC, чтобы сделать его согласованным во всех местах. – Bazinga777

+0

@ Bazinga777 - в этом случае вы должны сравнивать даты UTC (скажем, 'toISOString(). Slice (0,10)'). – RobG

+0

Спасибо, плохо попробуй, что – Bazinga777

0
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

0

Использование .toDateString() method должен сделать это:

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

Этот метод возвращает дату в виде строки без времени, в таком формате, как "Fri Apr 15 2016" - но конкретные формат не имеет значения, так как ваша заявленная проблема заключается в том, чтобы выяснить, находятся ли две метки времени в один и тот же день.

Смежные вопросы