【问题标题】:redefine Date() javascript重新定义 Date() javascript
【发布时间】:2021-10-03 20:41:49
【问题描述】:

我国的官方日历是jalali! Jalali 是一种与公历有数学关系的日历。 我想更改 JS 中的 Date() 以返回 jalali 值。 为此有很多 lib 或 func,但我不想使用它们。 我可以重新定义 Date() 吗? 在哪里可以查看 Date() 源代码?

【问题讨论】:

  • 日期是环境提供的内置对象。根据您运行代码的位置,它甚至可能不会在 JS 中实现。因此,要“重新定义”它的代码,例如,您需要更改 V8 本身。话虽如此,更改内置插件是一个非常糟糕的主意。你会影响使用Date 的任何其他东西,你最终可能会破坏你的整个环境。相反,您应该使用库或其他自定义实现。没有必要也没有理由更改内置插件。
  • 谢谢,使用 from lib 是标准方法!但我不想从头开始编写项目!该项目已完成且工作正常,而且非常大!我可以定义类 Date() 并包含在 html 文件中吗?

标签: javascript date calendar built-in redefine


【解决方案1】:

你可以使用 toLocaleDateString();

let today = new Date().toLocaleDateString('fa-IR');
console.log(today);

fa-IR 适用于波斯-伊朗,但所有 ISO 国家/地区代码都可以在 here 找到

您也可以将选项设置为第二个参数,例如:

let options = { year: 'numeric', month: 'long', day: 'numeric' };
new Date().toLocaleDateString('fa-IR', options);

【讨论】:

  • 我测试了,但是这个方法只返回Date字符串,我想改变Date的var!例如当使用“getFullYear()”返回 2021,但我想返回 1400(今年在 jalali 日期)
  • OP 想要使用特定的日历,而不是语言,所以最好使用带有日历选项的所需语言代码,例如英语:new Date().toLocaleString('en-GB-u-ca-persian') 今天给出类似“06/05/1400 AP,16:51:33”的内容。
  • 我不得不说这很漂亮! @RobG
【解决方案2】:

不要乱用你不拥有的物品。您可以创建自己的日期对象,称为 jDate(在“jalali date”之后,我认为它与 Intl 对象的“波斯”日历相同)并在那里实现方法。

Intl.DateTimeFormat 构造函数返回一个具有 formatToParts 方法的对象,您可以利用该方法来实现所需的 Date 方法,然后您可以使用标准 Date下面的对象,但从方法返回 Jalali 值。例如以英文获取所有当前日期部分:

let f = new Intl.DateTimeFormat('en-GB-u-ca-persian',{
  year: 'numeric',
  month: 'long',
  day: 'numeric',
  weekday: 'long',
  hour: 'numeric',
  minute: 'numeric',
  second: 'numeric',
  hour12: false,
});
console.log('Current Jalali date: ' + f.format(new Date()));

console.log('The parts:');  
f.formatToParts(new Date()).forEach(part => console.log(part.type + ': ' + part.value));

对于某些事情,您必须使用不同的选项多次运行 format 方法,例如获取月份名称和数字,因为两者都由月份选项指定:month: 'long' 用于名称,month: 'numeric' 用于数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 2020-02-18
    • 2015-03-26
    相关资源
    最近更新 更多