2014-09-30 46 views
0

由于语言环境支持,我正在使用https://github.com/abritinthebay/datejs/进行日期格式设置。但是,无法在没有年份的情况下获得完整的日期时间?没有年份的语言环境特定日期

输入日期:2014/09/20 20:00:00

输出日期:09/20 20:00

而且它必须尊重区域设置!

+0

Javascript不提供区域设置的访问权限。最好的图书馆可以做的就是猜测时区的中间和年底的时区偏移。有一个内置的[* Date.prototype.toLocaleString *](http://ecma-international.org/ecma-262/5.1/#sec-15.9.5。5),但输出完全依赖于实现,并且从主机到主机的差别很大。可能最好的做法是要求用户确定他们喜欢的格式,并记住以后使用的选择。 – RobG 2014-09-30 12:03:17

回答

-1

格式化日期为月/日小时:分钟与Date.js你会打电话的toString格式为“MM/DD HH:MM”得到两位数的所有值,例如:

console.log(new Date().toString('MM/dd HH:mm'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/datejs/1.0/date.min.js"></script>

试图确定用户期望看到的格式是非常有问题的,无论是被称为“文化”,“区域”或只是“偏爱”。 Javascript无法访问系统设置,浏览器不会显示它们。您可以尝试基于Date.prototype.toLocaleString的输出进行猜测,但这完全取决于实现,并不一定符合用户首选项。

一种常见的方法是使用明确的格式,因此用户偏好无关紧要,例如,

console.log(new Date().toString('dd-MMM HH:mm'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/datejs/1.0/date.min.js"></script>

另一种方法是有一个明确的默认格式,则允许用户从几个支持的格式选择和存储的偏好。

还有内置Date.prototype.toLocaleString,这是相当不可靠的,但一些浏览器支持可选​​。作为一个格式化程序,它非常普通,所以当存在能够使这项工作变得更好的库时,我们不能推荐它。

var options = { 
 
    month: 'short', 
 
    day : '2-digit', 
 
    hour : '2-digit', 
 
    minute:'2-digit' 
 
}; 
 

 
// Browser dependent, something like en-us: Jan 21, 8:39 AM 
 
console.log('en-us: ' + new Date().toLocaleString('en-us',options)) 
 

 
// Browser dependent, something like en-gb: 21 Jan, 08:39 
 
console.log('en-gb: ' + new Date().toLocaleString('en-gb',options))

另一种方法是写自己的解析器和格式化已经做了你需要的东西。如果您只需要支持一种或两种格式,则非常简单,例如

// input format yyyy/mm/dd hh:mm:ss 
 
function parseDateString(ds) { 
 
    var d = ds.split(/\D+/); 
 
    return new Date(d[0], --d[1], d[2], d[3], d[4], d[5]); 
 
} 
 

 
// Return date string as mm/dd hh:mm 
 
function formatDate(d) { 
 
    function z(n) { 
 
    return (n < 10 ? '0' : '') + n 
 
    } 
 
    return z(d.getMonth() + 1) + '/' + z(d.getDate()) + 
 
    ' ' + z(d.getHours()) + ':' + z(d.getMinutes()); 
 
} 
 

 
console.log(formatDate(parseDateString('2014/09/20 20:00:00'))); // 09/20 20:00

所以,你可以用较少的代码十几行更换整个库。 :-)

+0

我不确定这是否尊重浏览器区域设置,因为此答案是硬编码到美国的日期。作者想要的东西可以在任何国家/地区使用,就像我一样。 – Simon 2017-01-20 17:49:34

+1

@ Simon - 除了通过地理定位(这是不可靠的)之外,您无法检测到用户的区域设置,并且不一定告诉您用户的格式预计日期。你是对的,但这不是一个好的答案。希望更新使它更好。也许我应该只是说“*不要试图确定用户的位置,并使用它来格式化日期,使用明确的格式,如'20 -Jan-2016',而不是*”。 – RobG 2017-01-20 22:40:18

+0

认为你的最后一句话对我来说是一个可以接受的答案。 – Simon 2017-07-30 17:03:35

0
console.log(new Date().toLocaleString('en-En',{weekday: "long", month: "long", day: "numeric"})) 

您可以根据需要更改此选项。

相关问题