标签: ecmascript-temporal

如何在没有外部库或复杂天文公式的情况下将 5 种伊斯兰(回历)日历中的任意日期转换为 18 种世界日历中的任意日期

在 StackOverflow 和 CodeReview 网站上搜索,尚未尝试过此问题/帖子中描述的方法;它将 5 个伊斯兰日历的日期转换为 Javascript 中 18 个可用日历中的任何一个,而无需使用外部日期库或使用复杂的数学/天文公式。

\n

Javascript Intl.DateTimeFormat()

\n

我们都知道 Javascript 有一个内置方法(Intl.DateTimeFormat())将公历日期转换为各种日历日期(18 个世界日历),包括输出字符串的格式。

\n

然而,Javascript并没有提供反向操作的内置方法,即将18个世界日历日期转换回公历日期(包括伊斯兰历日期)或其他日历。为此,您需要使用外部日期库来进行转换,例如“moment.js”等。

\n

这里使用的方法/代码使用外部库,而是使用Javascript Calendar Conversion by Target Approximation Method。下面的流程图总结了该方法的概念,该方法可用于将其他日历转换为剩余日历。

\n

下面的简短 Javascript 函数提供了将五 (5) 个伊斯兰 (Hijri) 日历日期(从伊斯兰教纪年 -280,803 到 +281,510 AH)中的任何一个转换为以下 18 个 Javascript 日历中的任何一个的功能,并提供格式化选项结果输出:

\n

"buddhist", "chinese", "coptic", "dangi", "ethioaa", "ethiopic", "gregory", "hebrew", "indian", "islamic", "islamic-umalqura", "islamic-tbla", "islamic-civil", "islamic-rgsa", "iso8601", "japanese", "persian", "roc", "islamicc".

\n

该方法使用外部库,也不使用复杂的数学或天文公式,仅依赖于 Javascript …

javascript calendar date hijri ecmascript-temporal

16
推荐指数
1
解决办法
3831
查看次数

如何在特定日期和时间创建“Temporal.Instant”实例?

我\xe2\x80\x99m 与 JavaScript\xe2\x80\x99s提出的新 Temporal API作斗争。我想做的事情应该是直截了当的,但我未能找到令人信服的解决方案。我肯定错过了什么。

\n

任务如下:根据年、月、日、小时和分钟变量实例化 UTC 日期时间的对象表示

\n

我的想法如下:

\n
    \n
  • 我们正在谈论 UTC,所以我需要一个Temporal.Instant;
  • \n
  • new Temporal.Instant()需要以纳秒为单位的时间戳,因此 \xe2\x80\x99 不起作用;
  • \n
  • Temporal.Instant.from()需要一个 ISO 日期时间字符串,这需要我从 \xe2\x80\x94 的五个变量生成格式正确的文本,这是可能的,但有点黑客攻击,有点违背了使用日期时间库的目的;
  • \n
  • Temporal.PlainDateTime.from(){ year, month, day, hour, minute }具有正确的设计,因为它接受像;这样的对象
  • \n
  • 那么我们需要做的就是Instant从中创建一个PlainDateTime. 但这似乎不可能?除了再次通过 \xe2\x80\x94 \xe2\x80\x94 ns\xe2\x80\xa6 中的日期时间字符串或时间戳?
  • \n
\n

这太愚蠢了!这里的用例是非常基本的,但它\xe2\x80\x99(对我来说)根本不明显如何解决它。

\n

我期望能够简单地做类似的事情: Temporal.Instant.from({ year, month, day, hour, minute });

\n

现在我能想到的最好的办法是:Temporal.Instant.from(year + \'-\' + String(month).padStart(2, \'0\') + \'-\' + String(day).padStart(2, \'0\') …

javascript datetime utc ecmascript-temporal

6
推荐指数
1
解决办法
1139
查看次数

Chrome 中的时态

我尝试在 Chrome 中使用 Temporal,但失败了:

Temporal.DateTime.from("2019-11-26T14:58:54.147Z")
Run Code Online (Sandbox Code Playgroud)

未捕获的引用错误:时间未定义于 :1:1

版本:铬78.0.3904.108

如何在 Chrome 中使用时态?

顺便提一句。上面的问题已经解决了,但是...

但我想要更多。我不想一遍又一遍地解析字符串并将它们转换为对象。我想解析 JSON 字符串并立即获取高级 DateTime 对象。

来源:https ://github.com/guettli/lets-fix-json/blob/master/README.md#add-datetime

javascript google-chrome ecmascript-temporal

3
推荐指数
1
解决办法
1290
查看次数

为什么“Temporal.Duration”实例的算术需要“relativeTo”参考日历日期?

提议的 JavaScript Temporal 日期/时间 API 不经意地提到 \xe2\x80\x9c 解释年、月或周需要参考点 \xe2\x80\x9d (来源),但我无法理解这是什么意思。

\n

更具体地说,以下情况是不可能的:

\n
let oneWeek = Temporal.Duration.from({ weeks: 1 });\nconsole.log(`one week is ${oneWeek.total(\'day\')} days`);\n
Run Code Online (Sandbox Code Playgroud)\n

它将导致以下错误:

\n
RangeError: a starting point is required for balancing calendar units\n
Run Code Online (Sandbox Code Playgroud)\n

这可以通过使用relativeTo调用参数来膨胀我的代码来解决total(),如下所示:

\n
RangeError: a starting point is required for balancing calendar units\n
Run Code Online (Sandbox Code Playgroud)\n

但有人能详细说明为什么这是必要的吗?据我所知,一周一直是并且永远是 7 天\xe2\x80\xa6?

\n

javascript datetime calendar duration ecmascript-temporal

2
推荐指数
1
解决办法
152
查看次数