Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.03.2016, 15:36
Аватар для jack3dm
Аспирант
Отправить личное сообщение для jack3dm Посмотреть профиль Найти все сообщения от jack3dm
 
Регистрация: 05.04.2015
Сообщений: 52

Как сравнить две даты?
Добрый день.
У меня есть таблица, в конце каждого 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>
Ответить с цитированием
  #2 (permalink)  
Старый 20.03.2016, 15:48
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

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>
Ответить с цитированием
  #3 (permalink)  
Старый 20.03.2016, 16:31
Аватар для jack3dm
Аспирант
Отправить личное сообщение для jack3dm Посмотреть профиль Найти все сообщения от jack3dm
 
Регистрация: 05.04.2015
Сообщений: 52

Намёк понял. Надо распарсить.
Пока что в трёх случаях показывает "yes".
Должно быть так
no
yes
yes
Ответить с цитированием
  #4 (permalink)  
Старый 20.03.2016, 16:42
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Цитата:
no
yes
yes
с чего бы?
Ответить с цитированием
  #5 (permalink)  
Старый 20.03.2016, 16:47
Аватар для jack3dm
Аспирант
Отправить личное сообщение для jack3dm Посмотреть профиль Найти все сообщения от jack3dm
 
Регистрация: 05.04.2015
Сообщений: 52

destus,
ой, пересмотрел даты. Всё верно, у меня была ошибка в датах.
Дальше мне нужно сделать так что бы к примеру если разница в * дней то делает такой то алерт. Это нужно создать переменную которая = 15 дней и от неё отталкиваться? Или есть более простой способ?
Ответить с цитированием
  #6 (permalink)  
Старый 20.03.2016, 17:02
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

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');
Ответить с цитированием
  #7 (permalink)  
Старый 20.03.2016, 17:04
Аватар для jack3dm
Аспирант
Отправить личное сообщение для jack3dm Посмотреть профиль Найти все сообщения от jack3dm
 
Регистрация: 05.04.2015
Сообщений: 52

destus,
Логику понял. Как только закончу свой код выложу сюда.
Пока не закрывайте топик пожалуйста. Спасибо.
Ответить с цитированием
  #8 (permalink)  
Старый 20.03.2016, 17:26
Аватар для jack3dm
Аспирант
Отправить личное сообщение для jack3dm Посмотреть профиль Найти все сообщения от jack3dm
 
Регистрация: 05.04.2015
Сообщений: 52

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, 20.03.2016 в 17:29.
Ответить с цитированием
  #9 (permalink)  
Старый 20.03.2016, 17:53
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

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>
Ответить с цитированием
  #10 (permalink)  
Старый 21.03.2016, 22:43
Аватар для jack3dm
Аспирант
Отправить личное сообщение для jack3dm Посмотреть профиль Найти все сообщения от jack3dm
 
Регистрация: 05.04.2015
Сообщений: 52

Спасибо огромное за помощь.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
как Вызвать две функции 131202 Элементы интерфейса 3 27.12.2012 23:09
как лучше сравнить переменную со значениями из массива ? mitiya Общие вопросы Javascript 2 19.09.2012 22:40
Как использовать sprit'ы? Hekumok Общие вопросы Javascript 17 10.08.2012 11:24
Как сравнить данные методом JQ uExpo Общие вопросы Javascript 2 25.07.2011 22:19