2016-11-02 7 views
1

Я хочу, чтобы создать канал для angular2, и это код:Преобразование строки в дату выпуска

@Pipe({name: 'stringToDate'}) 
export class StringToDatePipe implements PipeTransform { 
    /** 
    * Constructor 
    */ 
    constructor() { 
    } 
    /** 
    * Transform a date that is passed as string into a date 
    * @param value The date passed as string 
    * @returns {Date} The Date object 
    */ 
    transform(value: string): Date { 
     console.log(value); 
     let d = new Date(value); 
     console.log(d); 
     return d; 
    } 
} 

Я не знаю, почему это не создает правильную дату. Это то, что печатает консоль:

2016-01-01 
Thu Dec 31 2015 21:00:00 GMT-0300 

Как это исправить?

+0

Объект дата не совпадает с датой строки – FacundoGFlores

+0

выглядит как DUP из http://stackoverflow.com/questions/17545708/parse-date-without-timezone -javascript –

+0

Что происходит, вы получаете дату как строку 'yyyy-mm-dd', а' new Date (value) 'преобразует строку даты в объект' Date'. Затем, когда объект «Дата» регистрируется на консоли, он _formatted_ в текущем часовом поясе. Поскольку исходная строка не указала часовой пояс, функция Date() 'принимала GMT. Таким образом, объект Date содержит время 2016-01-01 GMT и отображает его как время по Гринвичу-03 - это часовой пояс вашего ПК? –

ответ

3

Возможное решение:

@Pipe({name: 'stringToDate'}) 
export class StringToDatePipe implements PipeTransform { 
    /** 
    * Constructor 
    */ 
    constructor() { 
    } 
    /** 
    * Transform a date that is passed as string into a date 
    * @param value The date passed as string 
    * @returns {Date} The Date object 
    */ 
    transform(value: string): Date { 
     let reggie = /(\d{4})-(\d{2})-(\d{2})/; 
     let dateArray = reggie.exec(value); 
     let dateObject = new Date(
      (+dateArray[1]), 
      ((+dateArray[2])) - 1, // Careful, month starts at 0! 
      (+dateArray[3]) 
     ); 
     return dateObject; 
    } 
} 
Смежные вопросы