27.08.2016, 20:23
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,513
|
|
Проверять наличие плюсика?)
Сама по себе просто задача непонятная.
__________________
29375, 35
|
|
28.08.2016, 00:42
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от Rise
|
что предлагаешь?
|
если источник задающий это время подконтролен, то не допускать такой каши в представлении времени, в противном случае, зная о разных представлениях дата/время, разбирать рег. выражением.
|
|
28.08.2016, 12:57
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от рони
|
и как это поможет?
|
тогда, если я правильно понял вопрос, так:
let arr = [
'2000-01-05T23:59:59.000Z',
'2000-01-05T23:59:59.000-03:30',
'2000-01-05T23:59:59.000+04:15',
'Sat Jan 05 2000 23:59:59 GMT-0400',
'Sat Jan 05 2000 23:59:59 GMT+0000',
'Sat Jan 05 2000 23:59:59 GMT+0400',
'Sat Jan 05 2000 23:59:59'
];
for(let str of arr) {
console.log(getTimeZoneOffset(str));
}
/**
* @see [url]https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset[/url]
* @param {String} ds1 a date as string
* @returns {Number}
*/
function getTimeZoneOffset(ds1) {
let isUTC = ds1.slice(-1) === 'Z';
if (isUTC) {
return 0;
}
let ds2 = ds1.replace(/[-+]\d\d:?\d\d/, '');
if (ds1 !== ds2) {
let d1 = Date.parse(ds1);
let d2 = Date.parse(ds2);
return (d2 - d1) / 1000 / 60;
} else {
return new Date().getTimezoneOffset();
}
}
UPD: http://momentjs.com/guides/#/lib-con...mezone-offset/
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Последний раз редактировалось nerv_, 28.08.2016 в 13:27.
|
|
28.08.2016, 13:14
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от laimas
|
если источник задающий это время подконтролен, то не допускать такой каши в представлении времени
|
это не каша, это стандарты представления времени
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
28.08.2016, 13:26
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от nerv_
|
это не каша, это стандарты представления времени
|
Каша не в смысле напридумывали кучу, а отдавать в одном формате, а не в разнобой, в том случае если источник свой.
|
|
29.08.2016, 03:54
|
Профессор
|
|
Регистрация: 04.10.2010
Сообщений: 571
|
|
nerv_,
Цитата:
|
тогда, если я правильно понял вопрос, так: ... getTimeZoneOffset ...
|
Ну да, что-то типа того. Как понимаю, средствами языка смещение никак не вычислить. Только парсить.
laimas, в том-то и дело, что источник не свой. В общем виде, нужно написать функцию, сравнивающую две даты, которая будет принимать аргументы в пяти распространенных форматах: JS Date, time (кол-во мс с 1970), ISO8601, IETF RFC 2822 и moment.js date. Причем даты могут быть в разных форматах.
P.S. Вопрос на засыпку для извращенцев, что вернут выражения :-)
new Date(/14/)
new Date(/33/)
Последний раз редактировалось Shitbox2, 29.08.2016 в 03:59.
|
|
29.08.2016, 07:50
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от Shitbox2
|
что вернут выражения
|
Invalid Date.
Сообщение от Shitbox2
|
нужно написать функцию, сравнивающую две даты, которая будет принимать аргументы в пяти распространенных форматах
|
Если бы речь шла об едином мгновении времени и времени конкретного клиента, то хватило бы Date.parse().
Разбирать рег. выражением учитывая все форматы. На сервере, к примеру в РНР есть готовая функция date_parse(), возвращающая всю информацию о заданной дате/времени. Например для таких форматов 2000-01-05T23:59:59.000Z, 2000-01-05T23:59:59.000+04:15, Sat Jan 05 2000 23:59:59 GMT-0400 будет возвращено соответсвенно:
Код:
|
Array
(
[year] => 2000
[month] => 1
[day] => 5
[hour] => 23
[minute] => 59
[second] => 59
[fraction] => 0
[warning_count] => 0
[warnings] => Array
(
)
[error_count] => 0
[errors] => Array
(
)
[is_localtime] => 1
[zone_type] => 2
[zone] => 0
[is_dst] =>
[tz_abbr] => Z
)
Array
(
[year] => 2000
[month] => 1
[day] => 5
[hour] => 23
[minute] => 59
[second] => 59
[fraction] => 0
[warning_count] => 0
[warnings] => Array
(
)
[error_count] => 0
[errors] => Array
(
)
[is_localtime] => 1
[zone_type] => 1
[zone] => -255
[is_dst] =>
)
Array
(
[year] => 2000
[month] => 1
[day] => 5
[hour] => 23
[minute] => 59
[second] => 59
[fraction] => 0
[warning_count] => 0
[warnings] => Array
(
)
[error_count] => 0
[errors] => Array
(
)
[is_localtime] => 1
[zone_type] => 1
[zone] => 240
[is_dst] =>
[relative] => Array
(
[year] => 0
[month] => 0
[day] => 0
[hour] => 0
[minute] => 0
[second] => 0
[weekday] => 6
)
) |
|
|
29.08.2016, 10:19
|
Профессор
|
|
Регистрация: 04.10.2010
Сообщений: 571
|
|
|
|
29.08.2016, 12:30
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от Shitbox2
|
На 100% уверен?)
|
Как не извращенец да. Где изврат то? )
Что это такое - '\v'=='v', изврат или нет?
|
|
29.08.2016, 12:42
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от Shitbox2
|
Как понимаю, средствами языка смещение никак не вычислить
|
А я как по твоему сделал?)
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
|
|