Как сравнить две даты?
Добрый день.
У меня есть таблица, в конце каждого td есть дата такого формата 24 December 2015 10:10:10 UTC 1 January 2016 10:10:10 UTC 30 February 2016 10:10:10 UTC Я хочу их сравнить и у меня выскакивает везде "no" когда должен выскачить "yes" в последних двух алертах. Как мне его сделать правильно работать?
<!DOCTYPE html>
<html lang="en">
<head>
<script
src="https://code.jquery.com/jquery-2.2.2.min.js"
integrity="sha256-36cp2Co+/62rEAAYHLmRCPIych47CvdM+uTBJwSzWjI="
crossorigin="anonymous">
</script>
</head>
<body>
<style>
td{border: 1px solid black;}
</style>
<table>
<tr>
<td>Lorem ipsum dolor sit amet</td>
<td>Velit nesciunt explicabo nam</td>
<td>24 December 2015 10:10:10 UTC</td>
</tr>
<tr>
<td>Lorem ipsum dolor sit amet</td>
<td>Velit nesciunt explicabo nam</td>
<td>1 January 2016 10:10:10 UTC</td>
</tr>
<tr>
<td>Lorem ipsum dolor sit amet</td>
<td>Velit nesciunt explicabo nam</td>
<td>30 February 2016 10:10:10 UTC</td>
</tr>
</table>
<script>
var a = new Date("24 October 2016 11:13:00 UTC");
var b = new Date("24 October 2013 11:13:00 UTC");
var localTime = new Date();
alert(localTime > a); //false, october 2016
alert(localTime > b); //true, october 2013
$('tr td:last-child').each(function() {
if (localTime > $(this)){
alert('yes');
} else {
alert('no');
}
});
</script>
</body>
</html>
|
jack3dm,
<!DOCTYPE html>
<html lang="en">
<head>
<script src="https://code.jquery.com/jquery-2.2.2.min.js"
integrity="sha256-36cp2Co+/62rEAAYHLmRCPIych47CvdM+uTBJwSzWjI="
crossorigin="anonymous">
</script>
</head>
<body>
<style>
td {
border: 1px solid black;
}
</style>
<table>
<tr>
<td>Lorem ipsum dolor sit amet</td>
<td>Velit nesciunt explicabo nam</td>
<td>24 December 2015 10:10:10 UTC</td>
</tr>
<tr>
<td>Lorem ipsum dolor sit amet</td>
<td>Velit nesciunt explicabo nam</td>
<td>1 January 2016 10:10:10 UTC</td>
</tr>
<tr>
<td>Lorem ipsum dolor sit amet</td>
<td>Velit nesciunt explicabo nam</td>
<td>30 February 2016 10:10:10 UTC</td>
</tr>
</table>
<script>
var a = new Date("24 October 2016 11:13:00 UTC");
var b = new Date("24 October 2013 11:13:00 UTC");
var localTime = new Date();
$('tr td:last-child').each(function () {
if (localTime >Date.parse($(this).text())){
alert('yes');
} else {
alert('no');
}
});
</script>
</body>
</html>
|
Намёк понял. Надо распарсить.
Пока что в трёх случаях показывает "yes". Должно быть так no yes yes |
Цитата:
|
destus,
ой, пересмотрел даты. Всё верно, у меня была ошибка в датах. Дальше мне нужно сделать так что бы к примеру если разница в * дней то делает такой то алерт. Это нужно создать переменную которая = 15 дней и от неё отталкиваться? Или есть более простой способ? |
jack3dm,
var diff = 15,
a = new Date("17 March 2016 11:13:00 UTC");
b = new Date("17 December 2015 11:13:00 UTC");
Math.round((Date.now() - a) / (1000 * 60 * 60 * 24) > diff) ? alert('yes') : alert('no');
Math.round((Date.now() - b) / (1000 * 60 * 60 * 24) > diff) ? alert('yes') : alert('no');
|
destus,
Логику понял. Как только закончу свой код выложу сюда. Пока не закрывайте топик пожалуйста. Спасибо. |
destus,
Спасибо за помощь. Вот код. Посоветуй пожалуйста, как можно сделать его более красивым.
<!DOCTYPE html>
<html lang="en">
<head>
<script src="https://code.jquery.com/jquery-2.2.2.min.js" integrity="sha256-36cp2Co+/62rEAAYHLmRCPIych47CvdM+uTBJwSzWjI=" crossorigin="anonymous"></script>
</head>
<body>
<style>
td {
border: 1px solid black;
}
</style>
<table>
<tr>
<td>Lorem ipsum dolor sit amet</td>
<td>Velit nesciunt explicabo nam</td>
<td>19 March 2016 10:10:10 UTC</td>
</tr>
<tr>
<td>Lorem ipsum dolor sit amet</td>
<td>Velit nesciunt explicabo nam</td>
<td>1 March 2016 10:10:10 UTC</td>
</tr>
<tr>
<td>Lorem ipsum dolor sit amet</td>
<td>Velit nesciunt explicabo nam</td>
<td>30 January 2016 10:10:10 UTC</td>
</tr>
</table>
<script>
var localTime = new Date();
alert(localTime);
$('tr td:last-child').each(function() {
var days15 = 15;
var days30 = 30;
var jj = Date.parse($(this).text());
if (Math.round((localTime-jj)/(1000 * 60 * 60 * 24) < days15)) {
$(this).css({'background-color':'green'});
}
if (Math.round((localTime-jj)/(1000 * 60 * 60 * 24) > days15)) {
$(this).css({'background-color':'yellow'});
}
if (Math.round((localTime-jj)/(1000 * 60 * 60 * 24) > days30)) {
$(this).css({'background-color':'red'});
}
});
</script>
</body>
</html>
|
jack3dm,
Вместо того чтобы создавать новый экземпляр класса new Date(), лучше использовать статический метод Date.now() - быстрее. Зачем три раза вычислять одно и тоже 1000 * 60 * 60 * 24 ? Оптимальнее объявить это значение переменной и ссылаться на него дальше. Константы var days15 = 15; days30 = 30; нет смысла объявлять каждый раз при вызове функции.
<!DOCTYPE html>
<html lang="en">
<head>
<script src="https://code.jquery.com/jquery-2.2.2.min.js" integrity="sha256-36cp2Co+/62rEAAYHLmRCPIych47CvdM+uTBJwSzWjI=" crossorigin="anonymous"></script>
</head>
<body>
<style>
td {
border: 1px solid black;
}
</style>
<table>
<tr>
<td>Lorem ipsum dolor sit amet</td>
<td>Velit nesciunt explicabo nam</td>
<td>19 March 2016 10:10:10 UTC</td>
</tr>
<tr>
<td>Lorem ipsum dolor sit amet</td>
<td>Velit nesciunt explicabo nam</td>
<td>1 March 2016 10:10:10 UTC</td>
</tr>
<tr>
<td>Lorem ipsum dolor sit amet</td>
<td>Velit nesciunt explicabo nam</td>
<td>30 January 2016 10:10:10 UTC</td>
</tr>
</table>
<script>
var localTime = Date.now(),
days15 = 15,
days30 = 30,
oneday = 1000 * 60 * 60 * 24;
$('tr td:last-child').each(function() {
var jj = Date.parse($(this).text()),
day = Math.round((localTime - jj) / oneday) ;
day < days15 ? $(this).css({ 'background-color': 'green' }) : day > days30 ? $(this).css({ 'background-color': 'red' }) : $(this).css({ 'background-color': 'yellow' });
});
</script>
</body>
</html>
|
Спасибо огромное за помощь.
|
| Часовой пояс GMT +3, время: 05:27. |