首页 > 解决方案 > 西班牙语使用者的日期格式 - 返回 NaN 或无效日期

问题描述

我有一个 Angular 应用程序

目标:我希望用户能够以西班牙语格式输入日期(DD/MM/YYYY)。它应该以西班牙语格式显示给用户,但在将数据发送到数据库时将其转换回英语

问题:如果他们输入的前 2 位数字大于 12,那么 JavaScript Date 会抱怨它是 NaN。

我尝试了什么:我查找了文档并找到了方法toLocaleDateStringtoLocaleString. 但是,这用于日期。如果日期变为NaN,那么我看不出该方法将如何工作?无论如何我都试过了,但它只是说Invalid Date {} 如果重要的话,我在中央时区。

打字稿

dateEnter(data) {
    let dateSpanish = new Date(data).toLocaleDateString;
    let dobForDB = (this.localeId == "es") ? this.myMethod(new Date(dateSpanish) : data;
}

myMethod(date: any) {
    let year = date.getFullYear();
    let day = date.getDate();
    let month = date.getMonth() + 1;
    let dateString = (this.localeId == "es") ? day.toString() + "/" + month.toString() + "/" + year.toString().substring(0, 4) : month.toString() + "/" + day.toString() + "/" + year.toString().substring(0, 4);
    return dateString;
}

标签: javascripttypescriptdate

解决方案


考虑在这种情况下使用Moment.js。它可以检测用户的区域设置。使用L格式说明符来处理区域设置的短日期。

moment("01/02/2019", "L").format("YYYY-MM-DD")

// Output in en-US:  "2019-01-02"  (January 2nd)
// Output in es-MX:  "2019-02-01"  (February 1st)

请记住,决定格式的不仅仅是语言。DD/MM/YYYY有很多使用格式的英语语言环境。英国就是一个例子。主要是美国 ( en-US) 使用MM/DD/YYYY. 请参阅Wikipedia 上按国家/地区划分的日期格式


推荐阅读