toLocaleDateString()短格式

时间:2015-01-14 09:38:46

标签: javascript localization

我希望使用本地格式的Date.toLocaleDateString()的简短表示法。有很多解决方案硬编码yyyy-mm-dd格式,但我希望它依赖于托管页面的系统。这是我迄今为止的职责:

    function getDate(dateTimeString)
    {
        var date    = getDateTime(dateTimeString);
        var options = { year: "numeric", month: "numeric", day: "numeric" };        
        return date.toLocaleDateString( date.getTimezoneOffset(), options );
    }

但是这样返回它:2015年1月28日星期三,我不想要。有什么建议/想法吗?

PS:它不是浏览器,使用它的人很可能没有互联网连接;所有信息都来自本地数据库,所以我不能使用像How to get visitor's location (i.e. country) using javascript geolocation这样的任何东西。

6 个答案:

答案 0 :(得分:17)

我认为函数toLocaleDateString使用设备上的默认本地数据。

尝试使用此代码检查输出:

// America/Los_Angeles for the US
// US English uses month-day-year order
console.log(date.toLocaleDateString('en-US'));
// → "12/19/2012"

// British English uses day-month-year order
console.log(date.toLocaleDateString('en-GB'));
// → "20/12/2012"

// Korean uses year-month-day order
console.log(date.toLocaleDateString('ko-KR'));
// → "2012. 12. 20."

// Arabic in most Arabic speaking countries uses real Arabic digits
console.log(date.toLocaleDateString('ar-EG'));
// → "٢٠‏/١٢‏/٢٠١٢"

// chinese
console.log(date.toLocaleDateString('zh-Hans-CN'));
// → "2012/12/20"

答案 1 :(得分:10)

请注意,NodeJS将仅以设备的语言环境格式提供,因此,当您为LocaleDateString指定参数时,例如:

new Date("1983-March-25").toLocaleDateString('fr-CA', { year: 'numeric', month: '2-digit', day: '2-digit' })
'03/25/1983'

请注意,您希望“ fr-CA”给您YYYY-MM-DD,但没有。那是因为自从我的Node实例在美国语言环境中运行以来,它只使用美国语言环境。

实际上在Node github帐户上有一个错误报告,描述了问题和解决方案:

https://github.com/nodejs/node/issues/8500

提供的解决方案是安装full-icu模块。

答案 2 :(得分:4)

是。它很简单。您可以按如下方式使用日期对象:

var d = new Date();
var mm = d.getMonth() + 1;
var dd = d.getDate();
var yy = d.getFullYear();

然后你应该有你需要的数字来形成你需要的任何格式的字符串。

var myDateString = yy + '-' + mm + '-' + dd; //(US)

注意如果数字是单个数字,这将给出类似于2015-1-2的内容,如果您需要2015-01-02,那么您将需要进一步转换。

另请注意,这只会给'客户'日期,即。用户系统上的日期。这应该是当地时间。如果你需要服务器时间,那么你必须要有某种api来打电话。

答案 3 :(得分:3)

您可以尝试以下方式:

var date = new Date(Date.UTC(2015, 0, 28, 4, 0, 0));
console.log(date.toLocaleDateString("nl",{year:"2-digit",month:"2-digit", day:"2-digit"}));

这给了我" 28-01-15"至少在Chrome(48.0.2564.116)中。

Firefox刚刚返回" 01/28/2015",而phantomJS将返回" 28/01 / 2015"无论当地人如何。

答案 4 :(得分:1)

日期:.toLocaleDateString('en-US', {day: "numeric"})

完整月份:.toLocaleDateString('en-US', {month: "long"})

短短一个月:.toLocaleDateString('en-US', {month: "short"})

整天:.toLocaleDateString('en-US', {day: "long"})

简而言之:.toLocaleDateString('en-US', {day: "short"})

答案 5 :(得分:0)

显然,Date.prototype.toLocaleDateString()在浏览器中不一致。您可以实现短日期格式的不同变体,如下所述: How format JavaScript Date with regard to the browser culture?