Я создаю функцию для сравнения пользовательских дат с текущими датами. Я конвертирую строку dd/MM/yyyy HH:mm:ss
в new Date()
перед тем, как сравнивать.Строка parse to Date в javascript
Вот код:
var getCurrentDateTime = function() {
\t var dt = new Date(),
\t \t dd = dt.getDate(),
\t \t MM = dt.getMonth() + 1,
\t \t yyyy = dt.getFullYear(),
\t \t HH = dt.getHours(),
\t \t mm = dt.getMinutes(),
\t \t ss = dt.getSeconds();
\t return new Date(yyyy, MM, dd, HH, mm, ss)
};
var parseTimeString = function (d) { \t
// `d` formatting: 'dd/MM/yyyy HH:mm:ss'
\t var d_d = d.split(' ')[0],
\t d_t = d.split(' ')[1],
//x = new Date(2016, 01, 14, 21, 40, 00),
\t \t x = new Date(+d_d.split('/')[2], +d_d.split('/')[1] - 1,
+d_d.split('/')[0], +d_t.split(':')[0],
+d_t.split(':')[1], +d_t.split(':')[2]),
\t \t c = getCurrentDateTime(),
\t \t z = Math.abs((c.getTime() - x.getTime())/1000); \t \t
\t if (z <= 29) {
\t \t return 'Just now'
\t }
\t if (z > 29 && z < 60) {
\t \t return '30 seconds ago'
\t }
\t if (z >= 60 && z < 120) {
\t \t return '1 minute ago'
\t }
\t if (z >= 120 && z < 3600) {
\t \t return (c.getMinutes() - x.getMinutes()) + ' minutes ago'
\t }
\t if (z >= 3600 && z < 7200) {
\t \t return '1 hour ago'
\t }
\t if (z >= 7200 && z < 86400) {
\t \t return (c.getHours() - x.getHours()) + ' hours ago'
\t }
\t if (z >= 86400 && z < 172800) {
\t \t var m = x.getMinutes();
\t \t return 'Yesterday ' + x.getHours() + ':' + (m < 10 ? '0' + m : m)
\t }
\t if (z >= 172800) {
\t \t var dd = x.getDate(),
\t \t \t MM = x.getMonth() + 1,
\t \t \t yyyy = x.getFullYear(),
\t \t \t m = x.getMinutes();
\t \t dd = dd < 10 ? '0' + dd : dd;
\t \t MM = MM < 10 ? '0' + MM : MM;
\t \t return dd + '/' + MM + '/' + yyyy + ' at ' + x.getHours() + ':' + (m < 10 ? '0' + m : m)
\t }
};
$('button').click(function() {
setInterval(function() {
var x = parseTimeString('14/01/2016 21:40:00');
$('body').html($('<p>').text(x))
}, 1000)
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Click me</button>
Моей проблема:
Линии
x = new Date(+d_d.split('/')[2], +d_d.split('/')[1] - 1,
+d_d.split('/')[0], +d_t.split(':')[0],
+d_t.split(':')[1], +d_t.split(':')[2])
не преобразуются в new Date()
правильно. Текущая дата-время: 2016/01/14 21:40:00
, но напечатанное 14/01/2016 at 21:40
вместо Just now
Чтобы снова проверить, я заменил эту строку в
x = new Date(2016, 01, 14, 21, 40, 00)
и это прекрасно работает. Итак, почему?
p/s: И мой вопрос: есть ли какие-либо проблемы, если я использую более 20 интервалов за одно и то же время? (Моя веб-страница работает медленно?)
ваш 'getCurrentDateTime()' сломана - он должен просто 'вернуть Date.now()' [не мое вниз голосование, но ИМХО вопрос плохо формируется] – Alnitak
, чтобы отладить, вывести значение 'z' и сообщить нам, что для вас делает – Burki
, он также имеет неправильный' + 1' в месяц, в результате чего ваш расчетный «сейчас» будет составлять один месяц в будущем, что, вероятно, приведет к ваша другая проблема. – Alnitak