Как сравнить две даты?
Добрый день.
У меня есть таблица, в конце каждого 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, время: 15:08. |