date.toLocaleDateString不是函数

时间:2017-08-17 00:41:29

标签: javascript node.js string date botframework

具有返回错误的简单函数:

  

错误:date.toLocaleDateString不是函数

TypeError: date.toLocaleDateString is not a function
    at FormatTime (../Src/rootdialog.js:87:58)

功能定义:

function FormatTime(time, prefix = "") {
    var date = Date.parse(time);
    return ((typeof time != "undefined") ? prefix + date.toLocaleDateString()  : "");
}

函数接收Date个对象作为输入,但即使使用Date显式转换为Date.parse()也无济于事。使用Node.js 8.x.任何解决方案?

  

P.S。问题是由BotBuilder architecture造成的。

5 个答案:

答案 0 :(得分:9)

Date.parse会返回一个数字。您正在寻找new Date。或者,如果time已经是一个Date实例,只需使用time.toLocaleDateString()(并确保它确实在每次调用函数时)!

function formatTime(time, prefix = "") {
    return typeof time == "object" ? prefix + time.toLocaleDateString() : "";
}

答案 1 :(得分:3)

您可以使用

Using MultiResourceItemReader, assigning multiple file reasources.
Using custom file reader as delegate, reading a file completely 
For reading file completely, come up with a logic


@Bean
    public MultiResourceItemReader<SimpleFileBean> simpleReader() 
    {
        Resource[]  resourceList  = getFileResources();
        
        if(resourceList == null) {
            System.out.println("No input files available");
        }
        
        MultiResourceItemReader<SimpleFileBean> resourceItemReader = new MultiResourceItemReader<SimpleFileBean>();
        resourceItemReader.setResources(resourceList);
        resourceItemReader.setDelegate(simpleFileReader());
        return resourceItemReader;
    }


    @Bean
    SimpleInboundReader simpleFileReader() {
        
        return new SimpleInboundReader(customSimpleFileReader());
    }

    @Bean 
    public FlatFileItemReader customSimpleFileReader() {    
    
        return new FlatFileItemReaderBuilder()            
                .name("customFileItemReader")            
                .lineMapper(new PassThroughLineMapper())            
                .build(); 
        }


    public class SimpleInboundReader implements ResourceAwareItemReaderItemStream{

    private Object currentItem = null;
    private FileModel fileModel = null;
    private String fileName = null;
    private boolean fileRead = false;
    
    
    
    private ResourceAwareItemReaderItemStream<String> delegate;
    
    public SimpleInboundReader(ResourceAwareItemReaderItemStream<String> delegate) {        
        this.delegate = delegate;
    }

    @Override
    public void open(ExecutionContext executionContext) throws ItemStreamException {

        delegate.open(executionContext);
    }

    @Override
    public void update(ExecutionContext executionContext) throws ItemStreamException {
        delegate.update(executionContext);
    }

    @Override
    public void close() throws ItemStreamException {
        delegate.close();
    }


    @Override
    public void setResource(Resource resource) {
        fileName = resource.getFilename();
        this.delegate.setResource(resource);
    }
    

    
    String getNextLine() throws UnexpectedInputException, ParseException, NonTransientResourceException, Exception {
        
        return delegate.read();
    }


        @Override
    public SimpleFileBean read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
        
        SimpleFileBean simpleFileBean = null;
    
        String currentLine = null;
        
        currentLine=delegate.read();
        
        if(currentLine != null) {
            
            simpleFileBean = new SimpleFileBean();
            simpleFileBean.getLines().add(currentLine);
            
            while ((currentLine  = getNextLine()) != null) {
                simpleFileBean.getLines().add(currentLine);
            }
            
            return simpleFileBean;
        }
      return null;
     }
  }

答案 2 :(得分:0)

NaN来电最有可能获得Date.parse(time)。 如果您认为您的时间参数应该有效,请查看Date.parse上的MDN文章,了解它接受的输入字符串类型。

您可能希望修改return语句,以便检查失败的解析而不是仅仅未定义,例如:

function FormatTime(time, prefix = "") {
    var date = Date.parse(time); // returns NaN if it can't parse
    return Number.isNaN(date) ? "" : prefix + date.toLocaleDateString();
}

答案 3 :(得分:0)

在 React 应用程序中遇到此错误,解决方法如下:

{ (item.created instanceof Date) ? item.created.toLocaleDateString() : new Date(item.created).toLocaleDateString() }

答案 4 :(得分:-1)

… </dev/null