由于语言环境支持,我正在使用https://github.com/abritinthebay/datejs/进行日期格式设置。但是,无法在没有年份的情况下获得完整的日期时间?没有年份的语言环境特定日期
例
输入日期:2014/09/20 20:00:00
输出日期:09/20 20:00
而且它必须尊重区域设置!
由于语言环境支持,我正在使用https://github.com/abritinthebay/datejs/进行日期格式设置。但是,无法在没有年份的情况下获得完整的日期时间?没有年份的语言环境特定日期
例
输入日期:2014/09/20 20:00:00
输出日期:09/20 20:00
而且它必须尊重区域设置!
格式化日期为月/日小时:分钟与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
所以,你可以用较少的代码十几行更换整个库。 :-)
我不确定这是否尊重浏览器区域设置,因为此答案是硬编码到美国的日期。作者想要的东西可以在任何国家/地区使用,就像我一样。 – Simon 2017-01-20 17:49:34
@ Simon - 除了通过地理定位(这是不可靠的)之外,您无法检测到用户的区域设置,并且不一定告诉您用户的格式预计日期。你是对的,但这不是一个好的答案。希望更新使它更好。也许我应该只是说“*不要试图确定用户的位置,并使用它来格式化日期,使用明确的格式,如'20 -Jan-2016',而不是*”。 – RobG 2017-01-20 22:40:18
认为你的最后一句话对我来说是一个可以接受的答案。 – Simon 2017-07-30 17:03:35
console.log(new Date().toLocaleString('en-En',{weekday: "long", month: "long", day: "numeric"}))
您可以根据需要更改此选项。
Javascript不提供区域设置的访问权限。最好的图书馆可以做的就是猜测时区的中间和年底的时区偏移。有一个内置的[* Date.prototype.toLocaleString *](http://ecma-international.org/ecma-262/5.1/#sec-15.9.5。5),但输出完全依赖于实现,并且从主机到主机的差别很大。可能最好的做法是要求用户确定他们喜欢的格式,并记住以后使用的选择。 – RobG 2014-09-30 12:03:17