2016-10-29 12 views
-1

Я пытаюсь преобразовать объект даты в UTC, а затем преобразовать его в формат yyyymmdd. Вот мой кодПреобразование UTC в формат yyyymmdd Javascript

var scheduleDate = '2016/10/29 17:00'; 
 
var d = new Date(scheduleDate); 
 
var utcdate = d.toUTCString(); 
 

 
var mm = utcdate.getUTCMonth() + 1; 
 
var dd = utcdate.getUTCDate(); 
 

 
alert([date.getUTCFullYear(), !mm[1] && '0', mm, !dd[1] && '0', dd].join(''));

Но я получаю ошибку ниже:

utcdate.getUTCMonth is not a function

Как я могу получить месяц и дату от UTC формат даты строки ?

+2

Удалить 'вар utcdate = ...'и вызовите UTC-методы на' d' напрямую – Andreas

+1

getUTCMonth() - это метод прототипа Date, ваш код пытается использовать его для строкового объекта (utcdate). Вы можете использовать его (и другие функции прогнозирования даты) для переменной d. –

ответ

1

Ваша переменная utcdate является строкой, и поэтому она не имеет getUTCMonth или getUTCDate методов.

Далее вы вызываете метод getUTCFullYear для переменной, которая не определена: date.

Наконец, как вы пытаетесь раздуть с нулями не будет работать, так как mm и dd не являются строками, и поэтому, когда вы индексировать их с [1], JavaScript будет принуждать эти числа Number объектов, но они не имеют a 1, даже если у них две цифры. Таким образом, вы всегда получите набивку 0.

Если бы исправить это первым принуждая эти числа в строки, он все равно не будет работать, так как оператор && даст false в некоторых случаях, которые будут выводиться как таковые: false.

Короче говоря, есть более простые способы получить формат UTC yyyymmdd даты. Например, извлекая его из левой части формата yyyy-mm-ddThh:nn:ss..... что toISOString возвращается:

var d = new Date('2016/10/29 17:00'); 
 

 
console.log(d.toISOString().replace(/-|T.*/g,''));

Имейте в виду, что дата UTC находится в некоторые моменты времени один выходной день по сравнению с датой в местный часовой пояс. Если вам нужно, чтобы предотвратить это, то я бы предложил использовать toLocaleDateString с локалью, которая имеет big-endian date format standard, такие как Швеция, Литва, Венгрия, Южная Корея, ...:

date.toLocaleDateString('se') 

Чтобы удалить разделители (-) это просто вопрос о замене нецифровые:

var d = new Date('2016/10/29 17:00'); 
 

 
console.log(d.toLocaleDateString('se').replace(/\D/g, ''));

1

Если известна дата для времени UTC зоны, вы можете создать объект даты, используя Date.UTC() метод, то вы можете отобразить дату локальной для клиента (браузера) часового пояса, как так:

//var scheduleDate = '2016/10/29 17:00'; 
 
// If known date is in UTC, create the date object like so: 
 
var d = new Date(Date.UTC(2016,(10 - 1),29,17,0)); 
 

 
// UTC version of the date 
 
var mmUTC = d.getUTCMonth() + 1; 
 
var ddUTC = d.getUTCDate(); 
 
var hhUTC = d.getUTCHours(); 
 
// local to the browser (client) time zone 
 
var mm = d.getMonth() + 1; 
 
var dd = d.getDate(); 
 
var hh = d.getHours(); 
 

 
// display values 
 
console.log('UTC values: hour:['+ hhUTC +'] month:['+ mmUTC +'] day:['+ ddUTC +']'); 
 
console.log('Client Time: hour:['+ hh +'] month:['+ mm +'] day:['+ dd +']'); 
 
console.log('Client yyyymmdd:['+ d.getFullYear() + ((mm < 10) ? '0'+ mm : mm) + dd +']');

Смежные вопросы