- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我想显示一个日期而不特别注意一天中的时间。日期也没有任何问题。我使用的是 MacBook Pro。
如果我在 Date 构造函数中输入数字,则会出现以下内容。
例如,我想显示 1993 年 4 月 28 日。
var objDate = new Date(1993, 3, 28),
dateString = objDate.toLocaleDateString(undefined, {
weekday: "long",
year: "numeric",
month: "long",
day: "numeric",
hour: "numeric",
timeZoneName: 'long'
});
console.log(dateString)
//Chrome Outputs: "Wednesday, April 28, 1993, 12 AM Mountain Daylight Time"
//Firefox Outpus: "Tuesday, April 27, 1993, 6 PM Mountain Daylight Time"
let nowDate = new Date(1993, 3, 28);
console.log(nowDate.toString())
//Chrome Outputs: "Wed Apr 28 1993 00:00:00 GMT-0600 (Mountain Daylight Time)"
//Firefox Outputs: "Wed Apr 28 1993 00:00:00 GMT+0000 (UTC)"
console.log(nowDate.toLocaleString())
//Chrome Outputs: "4/28/1993, 12:00:00 AM"
//Firefox Outputs: "4/27/1993, 6:00:00 PM"
所以现在日期同时显示 27 日和 28 日,尽管我希望它只显示 28 日。
但是!如果我将数字更改为字符串格式,如以下代码。它仍然不一致。
var objDate = new Date("1993-04-28"),
dateString = objDate.toLocaleDateString(undefined, {
weekday: "long",
year: "numeric",
month: "long",
day: "numeric",
hour: "numeric",
timeZoneName: 'long'
});
console.log(dateString)
//Chrome Outputs: "Wednesday, April 27, 1993, 12 AM Mountain Daylight Time"
//Firefox Outpus: "Tuesday, April 27, 1993, 6 PM Mountain Daylight Time"
let nowDate = new Date("1993-04-28");
console.log(nowDate.toString())
//Chrome Outputs: "Wed Apr 27 1993 00:00:00 GMT-0600 (Mountain Daylight Time)"
//Firefox Outputs: "Wed Apr 28 1993 00:00:00 GMT+0000 (UTC)"
console.log(nowDate.toLocaleString())
//Chrome Outputs: "4/27/1993, 12:00:00 AM"
//Firefox Outputs: "4/27/1993, 6:00:00 PM"
现在是最后一段代码。
如果我在字符串格式中输入一天中的时间,比如中午,结果会很好地显示今天是哪一天。
编辑:我刚刚在 Safari 中检查了这个方法,它输出无效日期。
var objDate = new Date("1993-04-28 12:00"),
dateString = objDate.toLocaleDateString(undefined, {
weekday: "long",
year: "numeric",
month: "long",
day: "numeric",
hour: "numeric",
timeZoneName: 'long'
});
console.log(dateString)
//Chrome Outputs: "Wednesday, April 28, 1993, 12 PM Mountain Daylight Time"
//Firefox Outpus: "Wednesday, April 28, 1993, 6 AM Mountain Daylight Time"
let nowDate = new Date("1993-04-28");
console.log(nowDate.toString())
//Chrome Outputs: "Wed Apr 28 1993 12:00:00 GMT-0600 (Mountain Daylight Time)"
//Firefox Outputs: "Wed Apr 28 1993 12:00:00 GMT+0000 (UTC)"
console.log(nowDate.toLocaleString())
//Chrome Outputs: "4/28/1993, 12:00:00 PM"
//Firefox Outputs: "4/28/1993, 6:00:00 AM"
所以现在这里是特别的问题。
为什么输入不同日期的方法有时会设置不同的日期? 在列出的每种情况下,浏览器有哪些不同之处?我认为我使用的每种方法都是基于本地的,而不是基于 UTC。
编辑:我可能只需要使用其中一个库来处理所有的不一致。尽管有一个相当小的图书馆吗?我找到了dayjs,它看起来足够小。
最佳答案
日期字符串的解析依赖于实现 - 这意味着它在浏览器之间不一致。某些字符串格式通常被视为 UTC,而不是本地格式。来自JavaScript Date docs...
Note: parsing of date strings with the
Date
constructor (andDate.parse
,they are equivalent) is strongly discouraged due to browserdifferences and inconsistencies. Support for RFC 2822 format stringsis by convention only. Support for ISO 8601 formats differs in thatdate-only strings (e.g. "1970-01-01") are treated as UTC, not local.
类似地,toString
可能不会跨浏览器生成格式相似的日期字符串。来自Date.prototype.toString docs (请注意,截至本答案发布之日,ECMAScript 2018 尚未在所有浏览器中完全实现)...
Until ECMAScript 2018 (edition 9), the format of the string returnedby Date.prototype.toString was implementation dependent. Therefore itshould not be relied upon to be in the specified format.
和toLocaleString
locales
和options
是not supported across all browsers .
正如您所注意到的,有许多库,例如 Moment.js可以帮助解决这个问题。
如果您只是尝试获取一致的日期字符串输入并重新格式化它们以供显示,使用 vanilla js 可能并不那么困难(但困难在很大程度上取决于输入值的一致性)。例如:
const formatDate = (date) => {
const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
const [y, m, d] = date.split('-');
return months[m - 1] + ' ' + d + ', ' + y;
}
const date = formatDate('1993-04-28');
console.log(date);
// April 28, 1993
关于javascript - Date.toString 和 Date.toLocaleDateString 在 Chrome 和 Firefox 之间不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52993578/
我在正确设置语言环境日期字符串格式方面遇到了问题。它突然停止为 Norwegian 工作。我试过“不-不”和“不-不”。关于可能导致此问题的任何想法?我卡住了。 例子: console.log(new
如果我运行 new Date().toLocaleDateString(),我会收到“1/16/2020。 如果日期格式为 DD/MM/YYYY (16/1/2020) 的国家/地区有人运行我的代码,
以下调用返回 24:00在最新的 Chrome 和 Opera 中,而之前返回 00:00 ,这是设计行为吗? const [, time] = new Date(2020, 1, 1, 0, 0).
我正在使用 Discord.js 在 NodeJS 中开发一个 Discord 机器人,我想解析格式为“YYYY-MM-DD”的日期并以长 fr-FR 格式显示。 我试过了: var dateSort
如何转换此意大利日期 Agosto 6, 2020 到这个 August 6, 2020 使用 JavaScript? 如果我这样做 var date = new Date('August 6, 20
为了创建一个尊重浏览器文化的字符串,我们可以这样做: var myDate = new Date(); var myDateString = myDate.toLocaleDateString(myD
我正在使用此代码: date.toLocaleDateString('pt-BR') 在我的 Chrome 浏览器中,结果是:2016 年 9 月 13 日 当我运行测试时本地:2016-09-13
我想要 Date.toLocaleDateString() 的简短表示法,但采用本地格式。有很多解决方案对 yyyy-mm-dd 格式进行硬编码,但我希望它依赖于托管页面的系统。到目前为止,这是我的功
我从 SQL 数据库中提取日期,该数据库将它们视为从午夜开始的日期。当我对它们使用 toLocaleDateString() 时,它会正确格式化它们,但不会在损失一天之前。 格式化前:2011-09-
代码: const date = new Date(2020, 05, 10) const options = { year: 'numeric', month: 'long',
我正在尝试使用 Node 和 javascript 设置我的文化 (fr-FR) 的日期。我在mozilla网站上找到了一个很好的方法: var event = new Date(); var opt
我正在做一个应用程序,我遇到了这个问题,我认为比较日期会很容易,但事实并非如此。如果日期是同一年,我在 if 中的条件运行良好,但如果值类似于下面给出的值,则结果不会变为 true 应该为 false
Date.toLocaleDateString()在我运行 nodejs (v10.15.0) 作为 discord.js 机器人服务器的 Windows 10 笔记本电脑上不起作用。它显示 mm/d
在 Chrome 控制台上运行 (new Date()).toLocaleDateString() 返回“2017-6-27”。我的浏览器语言和 PC 设置适用于英国。 在 Firefox 上它返回
情况:我想使用 JavaScript 函数 Date.toLocaleDateString() 以用户首选的语言环境显示日期。到目前为止一切顺利,但我想使用 2-digit 选项显示月份和日期。 据我
背景 在我的应用程序中,我想根据用户的语言环境设置日期格式。如果用户修改日期,我希望能够将其解析回 javascript Date 对象。 问题 我想知道是否可以使用 javascript 从本地格式
具有返回错误的简单函数: ERROR: date.toLocaleDateString is not a function TypeError: date.toLocaleDateString is
我必须用本地用户的配置来表示日期。遵循 MDN 描述: The toLocaleDateString method relies on the underlying operating system
这个问题在这里已经有了答案: Where can I find documentation on formatting a date in JavaScript? (39 个答案) 关闭 9 年前。
当我在浏览器中使用 toLocaleDateString 时,它会返回 n = new Date() n.toLocaleDateString() "2/10/2013" 但在 node.js 中格式
我是一名优秀的程序员,十分优秀!