Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   многомерный массив из php (https://javascript.ru/forum/misc/51475-mnogomernyjj-massiv-iz-php.html)

Tecvid 07.11.2014 19:12

многомерный массив из php
 
доброго времени суток всем) у меня есть некий код на php, мне надо его перевести на js, впрочем я справился, весь код перевёл кроме нижеследующего участка кода:
$integ = array(
	$df < 31556926 => array('ay', 2628000),
	$df < 2629744 => array('həftə', 604800),
	$df < 604800 => array('gün', 86400),
	$df < 86400 => array('saat', 3600),
	$df < 3600 => array('dəqiqə', 60),
	$df < 60 => array('saniyə', 1)
); // переменная $df уже создана, просто не вижу смысла весь код прописать, мне главное этот массив как-то спилить под js :)


буду очень признателен если поможете и этот маленький участок тоже перевести в js :)

bes 07.11.2014 20:11

Цитата:

Сообщение от Tecvid (Сообщение 339655)
доброго времени суток всем) у меня есть некий код на php, мне надо его перевести на js, впрочем я справился, весь код перевёл кроме нижеследующего участка кода:
$integ = array(
	$df < 31556926 => array('ay', 2628000),
	$df < 2629744 => array('həftə', 604800),
	$df < 604800 => array('gün', 86400),
	$df < 86400 => array('saat', 3600),
	$df < 3600 => array('dəqiqə', 60),
	$df < 60 => array('saniyə', 1)
); // переменная $df уже создана, просто не вижу смысла весь код прописать, мне главное этот массив как-то спилить под js :)


буду очень признателен если поможете и этот маленький участок тоже перевести в js :)

в лоб
(function () {
	var df = 3601;
	var mas = [ 
		[ 31556926, ['ay', 2628000]   ], 
		[ 2629744,  ['həftə', 604800] ], 
		[ 604800,   ['gün', 86400]    ], 
		[ 86400,    ['saat', 3600]    ], 
		[ 3600,     ['dəqiqə', 60]    ], 
		[ 60,       ['saniyə', 1]     ] 
	];
	var arr = [];
	for ( var i = 0, len = mas.length; i < len; i++ ) {
		var el = mas[i][1];
		if ( df < mas[i][0]) {
			arr[1] = el;
		} else {
			arr[0] = el;
		}
	}
	console.log(arr);
})();

Tecvid 07.11.2014 20:31

спасибо большое, очень признателен, но вот теперь не могу в код встроить это, в js не так уж силён по сравнению с php :/ всмысле вставил, подправил названия переменных, но код не выполняется, в консоле тоже пусто, в целом код выглядит так

function ago(time) {
	var df = time() - time;

	if (df <= 19) {
		return 'Elə indi';
	}
	else if (df > 19 && df <= 59) {
		return 'Bir neçə saniyə əvvəl';
	}

	// тут должно быть тот кусочек, естесвенно его прописал уже без (function() { и т д
	
	var value = Math.floor(df/intg[1][1]);
	var ago = value + ' ' + intg[1][0];

	var days = new Array ('Bazar', 'Bazar ertəsi', 'Çərşənbə axşamı', 'Çərşənbə', 'Cümə axşamı', 'Cümə', 'Şənbə');
	var day = days[date('w', time)];

	var months = new Array ('', 'Yanvar', 'Fevral', 'Mart', 'Aprel', 'May', 'İyun', 'İyul', 'Avqust', 'Sentyabr', 'Oktyabr', 'Noyabr', 'Dekabr');
	var month = months[date('m', time)];

	if (ago == '1 gün') {
		return 'Dünən ' + date('H:i', time);
	}
	else if ((value == 2 || value == 3 || value == 4 || value == 5 || value == 6 || value == 7) && intg[1][0] == 'gün') {
		return day + ' günü ' + date('H:i', time);
	}
	else if (value <= 59 && intg[1][0] == 'dəqiqə' ||  intg[1][0] == 'saat') {
		return ago + ' əvvəl';
	}
	else {
		return date('d', time) + ' ' + month + ' ' + date('Y H:i', time);
	}
}


как поступить? :(

кстати вот оригинальный код php

function ago($time) {
	$df = time() - (int)$time;

	if ($df <= 19) {
		return 'Elə indi';
	}
	elseif ($df > 19 && $df <= 59) {
		return 'Bir neçə saniyə əvvəl';
	}

	$int = array(
		$df < 31556926 => array('ay', 2628000),
		$df < 2629744 => array('həftə', 604800),
		$df < 604800 => array('gün', 86400),
		$df < 86400 => array('saat', 3600),
		$df < 3600 => array('dəqiqə', 60),
		$df < 60 => array('saniyə', 1)
	);

	$value = floor($df/$int[1][1]);
	$ago = $value.' '.$int[1][0];

	$days = array('Bazar', 'Bazar ertəsi', 'Çərşənbə axşamı', 'Çərşənbə', 'Cümə axşamı', 'Cümə', 'Şənbə');
	$day = $days[date('w', $time)];

	$months = array('', 'Yanvar', 'Fevral', 'Mart', 'Aprel', 'May', 'İyun', 'İyul', 'Avqust', 'Sentyabr', 'Oktyabr', 'Noyabr', 'Dekabr');
	$month = $months[(int)date('m', $time)];

	if ($ago == '1 gün') {
		return 'Dünən '.date('H:i', $time);
	}
	elseif (($value == 2 || $value == 3 || $value == 4 || $value == 5 || $value == 6 || $value == 7) && $int[1][0] == 'gün') {
		return $day.' günü '.date('H:i', $time);
	}
	elseif ($value <= 59 && $int[1][0] == 'dəqiqə' ||  $int[1][0] == 'saat') {
		return $ago.' əvvəl';
	}
	else {
		return (int)date('d', $time).' '.$month.' '.date('Y H:i', $time);
	}
}

bes 07.11.2014 21:03

почитай про return
и сделай полный тестовый пример, для запуска [html run

Tecvid 07.11.2014 21:07

прочту, но разве return в js чем то отличается от того что в php? если нет, то я его знаю) или вы имеете ввиду что тот участок кода в функцию обернуть как это сделали вы и вернуть результат?

bes 07.11.2014 21:28

Цитата:

Сообщение от Tecvid
прочту, но разве return в js чем то отличается от того что в php? если нет, то я его знаю) или вы имеете ввиду что тот участок кода в функцию обернуть как это сделали вы и вернуть результат?

ты не привёл полного тестового примера, поэтому остаётся лишь гадать, что там у тебя не получается: return сработал, функцию забыл вызвать, ...

Tecvid 07.11.2014 21:42

полный код такой:

function time() {
     // бла бла.. p.s: выполняет аналогичную функию из php
}

function date(format, timestamp) {
     // бла бла.. p.s: выполняет аналогичную функию из php
}

function ago(time) {
	var df = time() - time;

	if (df <= 19) {
		return 'Elə indi';
	}
	else if (df > 19 && df <= 59) {
		return 'Bir neçə saniyə əvvəl';
	}

	var mas = [ 
		[ 31556926, ['ay', 2628000]   ], 
		[ 2629744,  ['həftə', 604800] ], 
		[ 604800,   ['gün', 86400]    ], 
		[ 86400,    ['saat', 3600]    ], 
		[ 3600,     ['dəqiqə', 60]    ], 
		[ 60,       ['saniyə', 1]     ] 
	];
	var intg = [];
	for ( var i = 0, len = mas.length; i < len; i++ ) {
		var el = mas[i][1];
		if ( df < mas[i][0]) {
			intg[1] = el;
		} else {
			intg[0] = el;
		}
	}

	var value = Math.floor(df/intg[1][1]);
	var ago = value + ' ' + intg[1][0];

	var days = new Array ('Bazar', 'Bazar ertəsi', 'Çərşənbə axşamı', 'Çərşənbə', 'Cümə axşamı', 'Cümə', 'Şənbə');
	var day = days[date('w', time)];

	var months = new Array ('', 'Yanvar', 'Fevral', 'Mart', 'Aprel', 'May', 'İyun', 'İyul', 'Avqust', 'Sentyabr', 'Oktyabr', 'Noyabr', 'Dekabr');
	var month = months[date('m', time)];

	if (ago == '1 gün') {
		return 'Dünən ' + date('H:i', time);
	}
	else if ((value == 2 || value == 3 || value == 4 || value == 5 || value == 6 || value == 7) && intg[1][0] == 'gün') {
		return day + ' günü ' + date('H:i', time);
	}
	else if (value <= 59 && intg[1][0] == 'dəqiqə' ||  intg[1][0] == 'saat') {
		return ago + ' əvvəl';
	}
	else {
		return date('d', time) + ' ' + month + ' ' + date('Y H:i', time);
	}
}

// == ОТЛАДКА ==

var t = time();
alert(ago(t));

bes 07.11.2014 21:43

где кнопка run

Tecvid 07.11.2014 21:47

а как его добавить?) на форуме редко приходится быть, не знаю что где тут подробно, поискал не нашёл в редакторе

bes 07.11.2014 21:51

Цитата:

Сообщение от Tecvid
а как его добавить?) на форуме редко приходится быть, не знаю что где тут подробно, поискал не нашёл в редакторе

Цитата:

Сообщение от bes
для запуска [html run


попутно верни в time что-нибудь типа 3601 и проверь эти строки
Цитата:

function ago(time) {
var df = time() - time;
в общем доведи пример до ума, чтобы хотя бы в консоли не было ошибок

Tecvid 07.11.2014 21:57

sorry не заметил)

function time(){return Math.floor((new Date).getTime()/1E3)}
function date(k,l){var d,a,h="Sun Mon Tues Wednes Thurs Fri Satur January February March April May June July August September October November December".split(" "),f=/\\?(.?)/gi,g=function(b,c){return a[b]?a[b]():c},e=function(b,a){for(b=String(b);b.length<a;)b="0"+b;return b};a={d:function(){return e(a.j(),2)},D:function(){return a.l().slice(0,3)},j:function(){return d.getDate()},l:function(){return h[a.w()]+"day"},N:function(){return a.w()||7},S:function(){var b=a.j(),c=b%10;3>=c&&1==parseInt(b%
100/10,10)&&(c=0);return["st","nd","rd"][c-1]||"th"},w:function(){return d.getDay()},z:function(){var b=new Date(a.Y(),a.n()-1,a.j()),c=new Date(a.Y(),0,1);return Math.round((b-c)/864E5)},W:function(){var b=new Date(a.Y(),a.n()-1,a.j()-a.N()+3),c=new Date(b.getFullYear(),0,4);return e(1+Math.round((b-c)/864E5/7),2)},F:function(){return h[6+a.n()]},m:function(){return e(a.n(),2)},M:function(){return a.F().slice(0,3)},n:function(){return d.getMonth()+1},t:function(){return(new Date(a.Y(),a.n(),0)).getDate()},
L:function(){var b=a.Y();return 0===b%4&0!==b%100|0===b%400},o:function(){var b=a.n(),c=a.W();return a.Y()+(12===b&&9>c?1:1===b&&9<c?-1:0)},Y:function(){return d.getFullYear()},y:function(){return a.Y().toString().slice(-2)},a:function(){return 11<d.getHours()?"pm":"am"},A:function(){return a.a().toUpperCase()},B:function(){var a=3600*d.getUTCHours(),c=60*d.getUTCMinutes(),f=d.getUTCSeconds();return e(Math.floor((a+c+f+3600)/86.4)%1E3,3)},g:function(){return a.G()%12||12},G:function(){return d.getHours()},
h:function(){return e(a.g(),2)},H:function(){return e(a.G(),2)},i:function(){return e(d.getMinutes(),2)},s:function(){return e(d.getSeconds(),2)},u:function(){return e(1E3*d.getMilliseconds(),6)},e:function(){throw"Not supported (see source code of date() for timezone on how to add support)";},I:function(){var b=new Date(a.Y(),0),c=Date.UTC(a.Y(),0),d=new Date(a.Y(),6),e=Date.UTC(a.Y(),6);return b-c!==d-e?1:0},O:function(){var a=d.getTimezoneOffset(),c=Math.abs(a);return(0<a?"-":"+")+e(100*Math.floor(c/
60)+c%60,4)},P:function(){var b=a.O();return b.substr(0,3)+":"+b.substr(3,2)},T:function(){return"UTC"},Z:function(){return 60*-d.getTimezoneOffset()},c:function(){return"Y-m-d\\TH:i:sP".replace(f,g)},r:function(){return"D, d M Y H:i:s O".replace(f,g)},U:function(){return d/1E3|0}};this.date=function(a,c){d=void 0===c?new Date:c instanceof Date?new Date(c):new Date(1E3*c);return a.replace(f,g)};return this.date(k,l)};

function ago(time) {
	var df = time() - time;

	if (df <= 19) {
		return 'Elə indi';
	}
	else if (df > 19 && df <= 59) {
		return 'Bir neçə saniyə əvvəl';
	}

	var mas = [ 
		[ 31556926, ['ay', 2628000]   ], 
		[ 2629744,  ['həftə', 604800] ], 
		[ 604800,   ['gün', 86400]    ], 
		[ 86400,    ['saat', 3600]    ], 
		[ 3600,     ['dəqiqə', 60]    ], 
		[ 60,       ['saniyə', 1]     ] 
	];
	var intg = [];
	for ( var i = 0, len = mas.length; i < len; i++ ) {
		var el = mas[i][1];
		if ( df < mas[i][0]) {
			intg[1] = el;
		} else {
			intg[0] = el;
		}
	}

	var value = Math.floor(df/intg[1][1]);
	var ago = value + ' ' + intg[1][0];

	var days = new Array ('Bazar', 'Bazar ertəsi', 'Çərşənbə axşamı', 'Çərşənbə', 'Cümə axşamı', 'Cümə', 'Şənbə');
	var day = days[date('w', time)];

	var months = new Array ('', 'Yanvar', 'Fevral', 'Mart', 'Aprel', 'May', 'İyun', 'İyul', 'Avqust', 'Sentyabr', 'Oktyabr', 'Noyabr', 'Dekabr');
	var month = months[date('m', time)];

	if (ago == '1 gün') {
		return 'Dünən ' + date('H:i', time);
	}
	else if ((value == 2 || value == 3 || value == 4 || value == 5 || value == 6 || value == 7) && intg[1][0] == 'gün') {
		return day + ' günü ' + date('H:i', time);
	}
	else if (value <= 59 && intg[1][0] == 'dəqiqə' ||  intg[1][0] == 'saat') {
		return ago + ' əvvəl';
	}
	else {
		return date('d', time) + ' ' + month + ' ' + date('Y H:i', time);
	}
}

// == ОТЛАДКА ==

var t = time();
alert(ago(t));

[html run
я всё проверял, построчно даже, всё прекрасно функционирует, кроме массива

Tecvid 07.11.2014 22:01

нет, не получилось у меня это [html run :/

bes 07.11.2014 22:09

надо было сделать так
function time() {
     // бла бла.. p.s: выполняет аналогичную функию из php
	 return 3601;
}


Цитата:

Сообщение от Tecvid
нет, не получилось у меня это [html run :/

:D
вот тебе пару полезных ссылок
http://javascript.ru/formatting
http://javascript.ru/forum/misc/3706-kak-sprosit-chtoby-vam-otvetili.html

Tecvid 07.11.2014 22:29

теперь дошло :D

вот, пожалуйста)

function time(){
        return 3601;
}
function date(k,l){var d,a,h="Sun Mon Tues Wednes Thurs Fri Satur January February March April May June July August September October November December".split(" "),f=/\\?(.?)/gi,g=function(b,c){return a[b]?a[b]():c},e=function(b,a){for(b=String(b);b.length<a;)b="0"+b;return b};a={d:function(){return e(a.j(),2)},D:function(){return a.l().slice(0,3)},j:function(){return d.getDate()},l:function(){return h[a.w()]+"day"},N:function(){return a.w()||7},S:function(){var b=a.j(),c=b%10;3>=c&&1==parseInt(b%
100/10,10)&&(c=0);return["st","nd","rd"][c-1]||"th"},w:function(){return d.getDay()},z:function(){var b=new Date(a.Y(),a.n()-1,a.j()),c=new Date(a.Y(),0,1);return Math.round((b-c)/864E5)},W:function(){var b=new Date(a.Y(),a.n()-1,a.j()-a.N()+3),c=new Date(b.getFullYear(),0,4);return e(1+Math.round((b-c)/864E5/7),2)},F:function(){return h[6+a.n()]},m:function(){return e(a.n(),2)},M:function(){return a.F().slice(0,3)},n:function(){return d.getMonth()+1},t:function(){return(new Date(a.Y(),a.n(),0)).getDate()},
L:function(){var b=a.Y();return 0===b%4&0!==b%100|0===b%400},o:function(){var b=a.n(),c=a.W();return a.Y()+(12===b&&9>c?1:1===b&&9<c?-1:0)},Y:function(){return d.getFullYear()},y:function(){return a.Y().toString().slice(-2)},a:function(){return 11<d.getHours()?"pm":"am"},A:function(){return a.a().toUpperCase()},B:function(){var a=3600*d.getUTCHours(),c=60*d.getUTCMinutes(),f=d.getUTCSeconds();return e(Math.floor((a+c+f+3600)/86.4)%1E3,3)},g:function(){return a.G()%12||12},G:function(){return d.getHours()},
h:function(){return e(a.g(),2)},H:function(){return e(a.G(),2)},i:function(){return e(d.getMinutes(),2)},s:function(){return e(d.getSeconds(),2)},u:function(){return e(1E3*d.getMilliseconds(),6)},e:function(){throw"Not supported (see source code of date() for timezone on how to add support)";},I:function(){var b=new Date(a.Y(),0),c=Date.UTC(a.Y(),0),d=new Date(a.Y(),6),e=Date.UTC(a.Y(),6);return b-c!==d-e?1:0},O:function(){var a=d.getTimezoneOffset(),c=Math.abs(a);return(0<a?"-":"+")+e(100*Math.floor(c/
60)+c%60,4)},P:function(){var b=a.O();return b.substr(0,3)+":"+b.substr(3,2)},T:function(){return"UTC"},Z:function(){return 60*-d.getTimezoneOffset()},c:function(){return"Y-m-d\\TH:i:sP".replace(f,g)},r:function(){return"D, d M Y H:i:s O".replace(f,g)},U:function(){return d/1E3|0}};this.date=function(a,c){d=void 0===c?new Date:c instanceof Date?new Date(c):new Date(1E3*c);return a.replace(f,g)};return this.date(k,l)};

function ago(time) {
	var df = time() - time;

	if (df <= 19) {
		return 'Elə indi';
	}
	else if (df > 19 && df <= 59) {
		return 'Bir neçə saniyə əvvəl';
	}

	var mas = [ 
		[ 31556926, ['ay', 2628000]   ], 
		[ 2629744,  ['həftə', 604800] ], 
		[ 604800,   ['gün', 86400]    ], 
		[ 86400,    ['saat', 3600]    ], 
		[ 3600,     ['dəqiqə', 60]    ], 
		[ 60,       ['saniyə', 1]     ] 
	];
	var intg = [];
	for ( var i = 0, len = mas.length; i < len; i++ ) {
		var el = mas[i][1];
		if ( df < mas[i][0]) {
			intg[1] = el;
		} else {
			intg[0] = el;
		}
	}

	var value = Math.floor(df/intg[1][1]);
	var ago = value + ' ' + intg[1][0];

	var days = new Array ('Bazar', 'Bazar ertəsi', 'Çərşənbə axşamı', 'Çərşənbə', 'Cümə axşamı', 'Cümə', 'Şənbə');
	var day = days[date('w', time)];

	var months = new Array ('', 'Yanvar', 'Fevral', 'Mart', 'Aprel', 'May', 'İyun', 'İyul', 'Avqust', 'Sentyabr', 'Oktyabr', 'Noyabr', 'Dekabr');
	var month = months[date('m', time)];

	if (ago == '1 gün') {
		return 'Dünən ' + date('H:i', time);
	}
	else if ((value == 2 || value == 3 || value == 4 || value == 5 || value == 6 || value == 7) && intg[1][0] == 'gün') {
		return day + ' günü ' + date('H:i', time);
	}
	else if (value <= 59 && intg[1][0] == 'dəqiqə' ||  intg[1][0] == 'saat') {
		return ago + ' əvvəl';
	}
	else {
		return date('d', time) + ' ' + month + ' ' + date('Y H:i', time);
	}
}

// == ОТЛАДКА ==

var t = time();
alert(ago(t));

bes 07.11.2014 22:46

Цитата:

Сообщение от Tecvid
вот, пожалуйста)

теперь осталось
Цитата:

Сообщение от bes
и проверь эти строки
Цитата:
function ago(time) {
var df = time() - time;
в общем доведи пример до ума, чтобы хотя бы в консоли не было ошибок


Tecvid 07.11.2014 23:02

function time() {
     return 3601;
}
function ago(time) {
    var df = time() - time;
    return df;
}

var t = time();
alert(ago(t));

bes 07.11.2014 23:10

и какой вывод?

Tecvid 07.11.2014 23:16

Цитата:

Сообщение от Tecvid
и какой вывод?

никакой :/ либо у нас уже полночь и от этого так, либо у меня деградация, либо js не любит массивы так, как их любит php, вобщем тут на форуме не знаю что к чему, но у себя при отладке всё прекрасно пашет без массива, а с ним нет, но без него нельзя, так как надо в переменную поместить значение не от руки, а то что из базы придёт, надеюсь ясно выразился

bes 07.11.2014 23:34

Цитата:

Сообщение от Tecvid
никакой :/ либо у нас уже полночь и от этого так, либо у меня деградация, либо js не любит массивы так, как их любит php, вобщем тут на форуме не знаю что к чему, но у себя при отладке всё прекрасно пашет без массива, а с ним нет, но без него нельзя, так как надо в переменную поместить значение не от руки, а то что из базы придёт, надеюсь ясно выразился

причём тут массив, ты сделал тест, который локализует ошибку
Uncaught TypeError: number is not a function
ни смотря никуда, тест показывает, что time внутри твоей функции воспринимается ни как имя функции, а как имя параметра, отсюда и ошибка вызова time()

Tecvid 07.11.2014 23:44

Цитата:

Сообщение от Tecvid
причём тут массив, ты сделал тест, который локализует ошибку
Uncaught TypeError: number is not a function
ни смотря никуда, тест показывает, что time внутри твоей функции воспринимается ни как имя функции, а как имя параметра, отсюда и ошибка вызова time()

во я дурак :/ изменил на tim, е убрал просто и заработало, надо же, спасибо огромное, извини тебя тоже помучил, а я то думал что в массиве дело кроется, потому что как ни странно без массива time внутри моей функции нормально воспринимался, ну фиг с ним) ещё раз спасибо, очень очень признателен

kostyanet 08.11.2014 11:14

Цитата:

Сообщение от Tecvid
кстати вот оригинальный код php

В 100500 раз проще перевести основные слова функции strtotime на свой язык, чем мудохаться пытаться ее нарисовать всю заново.

kostyanet 08.11.2014 11:22

Поправка, не strtotime(), а strftime() применительно к задаче. И strftime() локализуется на системном уровне. Свой словарь подключаете на сервере и set_locale() правильную.

off.

Цитата:

var days = new Array ('Bazar', 'Bazar ertəsi',
Нам тоже пора переименовать воскресенье в Ашан, а субботу в Леруа Мерлен. :)

Tecvid 08.11.2014 12:43

Цитата:

Сообщение от kostyanet
В 100500 раз проще перевести основные слова функции strtotime на свой язык, чем мудохаться пытаться ее нарисовать всю заново.

а так намного проще по-моему, пару строк и всё)
Цитата:

Сообщение от kostyanet
Нам тоже пора переименовать воскресенье в Ашан, а субботу в Леруа Мерлен.

да я ничего никуда не переименовал) это дни недели на моём родном языке :) сайт будет на оффициальном гос. языке, хотя планирую перевод как минимум на русский и английский)

kostyanet 08.11.2014 14:03

Цитата:

Сообщение от Tecvid
да я ничего никуда не переименовал)

Учите неродной чтобы понимать такие шутки.

Это не пара строк, конечно, но да, есть такое явление графомании, особенно когда задача сводится к простым подсчетам.

Tecvid 08.11.2014 14:15

Цитата:

Сообщение от kostyanet
Учите неродной чтобы понимать такие шутки.

знать то не родной я знаю, но вот далеко не все шутки могу понять, каждый язык имеет свои шутки которых с каждым днём всё больше и больше) не смогу же я успеть за этим)

Цитата:

Сообщение от kostyanet
Это не пара строк, конечно

знаете, относительно этой задачи этот вариант для меня лучше чем то что вы предлагаете, даже в какой-то мере ваш вариант ограничивает в некоторых местах, как-то так


Часовой пояс GMT +3, время: 18:40.