2016-11-02 63 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

貌似http://stackoverflow.com/questions/17545708/parse-date-without-timezone的DUP -javascript –

+0

会发生什么是,你得到一个日期为'yyyy-mm-dd'字符串,'new Date(value)'将日期字符串转换为Date对象。然后,当Date对象记录到控制台时,它在当前时区为_formatted_。由于原始字符串没有指定时区,所以'Date()'函数假定GMT。因此Date对象包含2016-01-01 GMT时间,并将其显示为GMT-03时间 - 是您PC的时区? –

回答

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; 
    } 
}