diff --git a/files/en-us/learn_web_development/core/scripting/functions/index.md b/files/en-us/learn_web_development/core/scripting/functions/index.md
index de9bb13e58fd42f..bcf8de7975872bf 100644
--- a/files/en-us/learn_web_development/core/scripting/functions/index.md
+++ b/files/en-us/learn_web_development/core/scripting/functions/index.md
@@ -356,7 +356,9 @@ function greeting() {
}
```
-Both functions you want to call are called `greeting()`, but you can only ever access the `first.js` file's `greeting()` function (the second one is ignored). In addition, an error results when attempting (in the `second.js` file) to assign a new value to the `name` variable — because it was already declared with `const`, and so can't be reassigned.
+You will see that the second script does not load and run at all, and an error is printed in the console: `Uncaught SyntaxError: Identifier 'name' has already been declared`. This is because the `name` constant is already declared in `first.js`, and you can't declare the same constant twice in the same scope. Because the second script did not load, the `greeting()` function from `second.js` is not available to be called. Therefore, you will see an alert box displaying `Hello Chris: welcome to our company.`.
+
+Try removing the second `const name = "Zaptec";` line from `second.js` and reloading the page. Now both scripts execute, and the alert box says `Our company is called Chris.`. Functions are allowed to be redeclared, and the last declaration gets used. The previous declarations are effectively overwritten.
> [!NOTE]
> You can see this example [running live on GitHub](https://mdn.github.io/learning-area/javascript/building-blocks/functions/conflict.html) (see also the [source code](https://github.com/mdn/learning-area/tree/main/javascript/building-blocks/functions)).
diff --git a/files/en-us/learn_web_development/core/scripting/index.md b/files/en-us/learn_web_development/core/scripting/index.md
index 356a33666ad4a13..7122a2b90620b08 100644
--- a/files/en-us/learn_web_development/core/scripting/index.md
+++ b/files/en-us/learn_web_development/core/scripting/index.md
@@ -12,7 +12,7 @@ JavaScript is a huge topic, with so many different features, styles, and techniq
## Prerequisites
-Before starting this module, you don't need any previous JavaScript knowledge, but you should have worked through the previous modules in the course. You should have at least know [HTML](/en-US/docs/Learn_web_development/Core/Structuring_content) and the [basic fundamentals of CSS](/en-US/docs/Learn_web_development/Core/Styling_basics).
+Before starting this module, you don't need any previous JavaScript knowledge, but you should have worked through the previous modules in the course. You should at least know [HTML](/en-US/docs/Learn_web_development/Core/Structuring_content) and the [basic fundamentals of CSS](/en-US/docs/Learn_web_development/Core/Styling_basics).
> [!NOTE]
> If you are working on a computer/tablet/other device where you don't have the ability to create your own files, you could try out (most of) the code examples in an online coding program such as [JSBin](https://jsbin.com/) or [Glitch](https://glitch.com/).
diff --git a/files/en-us/learn_web_development/core/scripting/what_went_wrong/index.md b/files/en-us/learn_web_development/core/scripting/what_went_wrong/index.md
index 1ef1a9a2ae1cfbe..b62bb416046297d 100644
--- a/files/en-us/learn_web_development/core/scripting/what_went_wrong/index.md
+++ b/files/en-us/learn_web_development/core/scripting/what_went_wrong/index.md
@@ -34,7 +34,7 @@ When you built up the "Guess the number" game in the previous article, you may h
Generally speaking, when you do something wrong in code, there are two main types of error that you'll come across:
-- **Syntax errors**: These are spelling errors in your code that actually cause the program not to run at all, or stop working part way through — you will usually be provided with some error messages too. These are usually okay to fix, as long as you are familiar with the right tools and know what the error messages mean!
+- **Syntax errors**: These are spelling errors in your code that actually cause the program not to run at all, or stop working part way through — you will usually be provided with some error messages too. These are usually not too hard to fix, as long as you are familiar with the right tools and know what the error messages mean!
- **Logic errors**: These are errors where the syntax is actually correct but the code is not what you intended it to be, meaning that program runs successfully but gives incorrect results. These are often harder to fix than syntax errors, as there usually isn't an error message to direct you to the source of the error.
Okay, so it's not quite _that_ simple — there are some other differentiators as you drill down deeper. But the above classifications will do at this early stage in your career. We'll look at both of these types going forward.
diff --git a/files/en-us/learn_web_development/extensions/server-side/django/development_environment/index.md b/files/en-us/learn_web_development/extensions/server-side/django/development_environment/index.md
index 94392fb9ee045e5..0436dcd9942771e 100644
--- a/files/en-us/learn_web_development/extensions/server-side/django/development_environment/index.md
+++ b/files/en-us/learn_web_development/extensions/server-side/django/development_environment/index.md
@@ -426,8 +426,7 @@ In addition to branches, it is possible to create `tags` on any branch and later
### Create an account and repository on GitHub
-First we will create a free account on GitHub.
-With a free account you can't create private repos, but you can create as many _public_ repositories ("repos") as you like.
+First we will create an account on GitHub (this is free).
Then we create and configure a repository named "django_local_library" for storing the [Local library website](/en-US/docs/Learn_web_development/Extensions/Server-side/Django/Tutorial_local_library_website) as we evolve it in the rest of this tutorial.
The steps are:
diff --git a/files/en-us/learn_web_development/getting_started/environment_setup/browsing_the_web/index.md b/files/en-us/learn_web_development/getting_started/environment_setup/browsing_the_web/index.md
index b5f77efc4962c13..62c37f3bc54d5a3 100644
--- a/files/en-us/learn_web_development/getting_started/environment_setup/browsing_the_web/index.md
+++ b/files/en-us/learn_web_development/getting_started/environment_setup/browsing_the_web/index.md
@@ -144,7 +144,7 @@ When you access the web, quite a lot happens between your first interaction (for
2. When that file is received by the browser, it will start to parse it, and will probably find instructions to make more requests. As discussed above, these might be for files to embed such as images, style information, scripts, and so on.
4. When all of the resources have been requested, the web browser parses and renders them as required, before displaying the result to the user.
-This description of how the web works is heavily simplified, but it is all you really need to know at this point. You will find a more detailed account of how web pages and requested and rendered by a web browser in our [Web standards](/en-US/docs/Learn_web_development/Getting_started/Web_standards) module, slightly later on.
+This description of how the web works is heavily simplified, but it is all you really need to know at this point. You will find a more detailed account of how web pages are requested and rendered by a web browser in our [Web standards](/en-US/docs/Learn_web_development/Getting_started/Web_standards) module, slightly later on.
For now, try opening a web browser and loading up a couple of your favorite sites, thinking about the above steps as you do so.
@@ -208,7 +208,7 @@ As a result, you need to be careful to check the answers they give you, and not
- Typing in `"ant fish cheese"` (with the quotes) will only return results that contain that exact phrase.
- `"ant cheese" -fish` will return results that contain `ant` and/or `cheese` but not `fish`.
- - `and OR cheese` will only return results with one term or the other, not both. From our testing, this one only seemed to work effectively in Google.
+ - `ant OR cheese` will only return results with one term or the other, not both. From our testing, this one only seemed to work effectively in Google.
- `intitle:cheese` will only return results that have "cheese" in the main title of the page.
> [!NOTE]
diff --git a/files/en-us/web/api/animation/index.md b/files/en-us/web/api/animation/index.md
index 94b574321cc42ca..148b052a41d069a 100644
--- a/files/en-us/web/api/animation/index.md
+++ b/files/en-us/web/api/animation/index.md
@@ -26,6 +26,8 @@ The **`Animation`** interface of the [Web Animations API](/en-US/docs/Web/API/We
- : Returns the current finished Promise for this animation.
- {{domxref("Animation.id")}}
- : Gets and sets the `String` used to identify the animation.
+- {{domxref("Animation.overallProgress")}} {{ReadOnlyInline}} {{experimental_inline}}
+ - : Returns a number between `0` and `1` indicating the animation's overall progress towards its finished state.
- {{domxref("Animation.pending")}} {{ReadOnlyInline}}
- : Indicates whether the animation is currently waiting for an asynchronous operation such as initiating playback or pausing a running animation.
- {{domxref("Animation.playState")}} {{ReadOnlyInline}}
diff --git a/files/en-us/web/api/animation/overallprogress/index.md b/files/en-us/web/api/animation/overallprogress/index.md
new file mode 100644
index 000000000000000..bf7214bbf8f8ee2
--- /dev/null
+++ b/files/en-us/web/api/animation/overallprogress/index.md
@@ -0,0 +1,149 @@
+---
+title: "Animation: overallProgress property"
+short-title: overallProgress
+slug: Web/API/Animation/overallProgress
+page-type: web-api-instance-property
+status:
+ - experimental
+browser-compat: api.Animation.overallProgress
+---
+
+{{APIRef("Web Animations")}}{{seecompattable}}
+
+The **`overallProgress`** read-only property of the {{domxref("Animation")}} interface returns a number between `0` and `1` indicating the animation's overall progress towards its finished state. This is the overall progress across all of the animation's iterations, not each individual iteration.
+
+`overallProgress` works consistently across all animations, regardless of the type of {{domxref("AnimationTimeline", "timeline")}}.
+
+## Value
+
+A number between `0` and `1`, or `null` if the animation lacks a timeline, is inactive or hasn't been played yet, or if its {{domxref("Animation/currentTime", "currentTime")}} is set to a non-time value.
+
+If the animation's [`iterations`](/en-US/docs/Web/API/KeyframeEffect/KeyframeEffect#iterations) property is set to `Infinity`, or if its {{domxref("Animation/currentTime", "currentTime")}} is set to a negative value, `overallProgress` will return `0`.
+
+If the animation's [`duration`](/en-US/docs/Web/API/KeyframeEffect/KeyframeEffect#duration) is set to `0`, `overallProgress` will return `1`.
+
+## Examples
+
+### Displaying a percentage progress
+
+This demo uses `overallProgress` to create a "percentage progress" readout, which is displayed to the screen while an animation runs.
+
+### HTML
+
+The HTML contains a {{htmlelement("button")}} to press to start the animation, a {{htmlelement("p")}} element in which to display the percentage progress, and a {{htmlelement("div")}} that will be animated.
+
+```html
+Run animation
+
` via [`addEventListener()`](/en-US/docs/Web/API/EventTarget/addEventListener) so that, when pressed, it:
+
+1. Starts the animation running using {{domxref("Element.animate()")}}, passing it the keyframes and options defined earlier and assigning the returned {{domxref("Animation")}} instance to the `animation` variable.
+2. Runs a function called `updateProgress()` via the {{domxref("Window.requestAnimationFrame", "requestAnimationFrame()")}} method, which handles updating the percentage process display.
+
+```js
+btn.addEventListener("click", () => {
+ // Animate the box
+ animation = box.animate(keyframes, timingProps);
+ // Start updating the progress percentage via rAF()
+ requestAnimationFrame(updateProgress);
+});
+```
+
+Now let's define the `updateProgress()` function. This queries {{domxref("Animation.playState")}} to see if the animation is not finished. If it isn't finished, we grab the current value of `overallProgress`, multiplying it by 100 and rounding the result down to convert it to a whole percentage number, then update the `` element's {{domxref("Node.textContent", "textContent")}} value with it. We then call `requestAnimationFrame(updateProgress)` again to re-run the progress percentage update.
+
+If the animation is finished, we replace the percentage progress with a "Finished!" message, and don't call `requestAnimationFrame(updateProgress)`, so the progress percentage updates stop.
+
+```js
+function updateProgress() {
+ // Check if the animation is finished
+ if (animation.playState !== "finished") {
+ // Convert overallProgress to a whole number percentage
+ const progressPercentage = Math.floor(animation.overallProgress * 100);
+ // Update the progress paragraph with the percentage
+ progress.textContent = `Progress: ${progressPercentage}%`;
+ // Only request the next frame if the animation is not finished
+ requestAnimationFrame(updateProgress);
+ } else {
+ progress.textContent = "Finished!";
+ }
+}
+```
+
+### Result
+
+The output looks like this. Try pressing the button to see the animation and associated progress indicator run.
+
+{{ EmbedLiveSample("Displaying a percentage progress", "100%", 250) }}
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{domxref("Animation")}} for other methods and properties you can use to control web page animation.
+- [Web Animations API](/en-US/docs/Web/API/Web_Animations_API)
diff --git a/files/en-us/web/api/cdatasection/index.md b/files/en-us/web/api/cdatasection/index.md
index cf9be80ca0bade0..1420a16e5cac005 100644
--- a/files/en-us/web/api/cdatasection/index.md
+++ b/files/en-us/web/api/cdatasection/index.md
@@ -30,7 +30,7 @@ The only sequence which is not allowed within a CDATA section is the closing seq
of a CDATA section itself, `]]>`.
> [!NOTE]
-> CDATA sections should not be used within HTML they are considered as comments and not displayed.
+> CDATA sections should not be used within HTML. They are considered comments and are not displayed.
{{InheritanceDiagram}}
diff --git a/files/en-us/web/api/rtcinboundrtpstreamstats/index.md b/files/en-us/web/api/rtcinboundrtpstreamstats/index.md
index f7cdecaa84f62a5..4a07e77a072cd9c 100644
--- a/files/en-us/web/api/rtcinboundrtpstreamstats/index.md
+++ b/files/en-us/web/api/rtcinboundrtpstreamstats/index.md
@@ -26,6 +26,9 @@ The statistics can be obtained by iterating the {{domxref("RTCStatsReport")}} re
- {{domxref("RTCInboundRtpStreamStats.lastPacketReceivedTimestamp", "lastPacketReceivedTimestamp")}}
- : A {{domxref("DOMHighResTimeStamp")}} indicating the time at which the last packet was received for this source.
The [`timestamp`](#timestamp) property, on the other hand, indicates the time at which the statistics object was generated.
+- {{domxref("RTCInboundRtpStreamStats.mid", "mid")}}
+ - : A string that uniquely identifies the pairing of source and destination of the transceiver's stream.
+ This is the value of the corresponding {{domxref("RTCRtpTransceiver.mid")}} unless that is null, in which case the statistic property is not present.
- {{domxref("RTCInboundRtpStreamStats.nackCount", "nackCount")}}
- : An integer value indicating the total number of Negative ACKnowledgement (NACK) packets this receiver has sent.
- {{domxref("RTCInboundRtpStreamStats.packetsDuplicated", "packetsDuplicated")}}
diff --git a/files/en-us/web/api/rtcinboundrtpstreamstats/mid/index.md b/files/en-us/web/api/rtcinboundrtpstreamstats/mid/index.md
new file mode 100644
index 000000000000000..6ed4e6ff7128f2f
--- /dev/null
+++ b/files/en-us/web/api/rtcinboundrtpstreamstats/mid/index.md
@@ -0,0 +1,24 @@
+---
+title: "RTCInboundRtpStreamStats: mid property"
+short-title: mid
+slug: Web/API/RTCInboundRtpStreamStats/mid
+page-type: web-api-instance-property
+browser-compat: api.RTCStatsReport.type_inbound-rtp.mid
+---
+
+{{APIRef("WebRTC")}}
+
+The **`mid`** property of the {{domxref("RTCInboundRtpStreamStats")}} dictionary is a string that contains the media id negotiated between the local and remote peers.
+This uniquely identifies the pairing of source and destination for the transceiver's stream.
+
+## Value
+
+The value of the corresponding {{domxref("RTCRtpTransceiver.mid")}}, unless that value is null, in which case this statistic property is not present.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
diff --git a/files/en-us/web/css/@font-face/index.md b/files/en-us/web/css/@font-face/index.md
index a2cc498998123a5..d1d430bd1c6e05a 100644
--- a/files/en-us/web/css/@font-face/index.md
+++ b/files/en-us/web/css/@font-face/index.md
@@ -31,23 +31,23 @@ The **`@font-face`** [CSS](/en-US/docs/Web/CSS) [at-rule](/en-US/docs/Web/CSS/At
- {{cssxref("@font-face/font-display", "font-display")}}
- : Determines how a font face is displayed based on whether and when it is downloaded and ready to use.
- {{cssxref("@font-face/font-family", "font-family")}}
- - : Specifies a name that will be used as the font face value for font properties.
+ - : Specifies a name that will be used as the font face value for font properties. A `font-family` name is required for the `@font-face` rule to be valid.
- {{cssxref("@font-face/font-stretch", "font-stretch")}}
- - : A {{cssxref("font-stretch")}} value. Accepts two values to specify a range that is supported by a font-face, for example `font-stretch: 50% 200%;`
+ - : A {{cssxref("font-stretch")}} value. Accepts two values to specify a range that is supported by a font face, for example `font-stretch: 50% 200%;`
- {{cssxref("@font-face/font-style", "font-style")}}
- - : A {{cssxref("font-style")}} value. Accepts two values to specify a range that is supported by a font-face, for example `font-style: oblique 20deg 50deg;`
+ - : A {{cssxref("font-style")}} value. Accepts two values to specify a range that is supported by a font face, for example `font-style: oblique 20deg 50deg;`
- {{cssxref("@font-face/font-weight", "font-weight")}}
- - : A {{cssxref("font-weight")}} value. Accepts two values to specify a range that is supported by a font-face, for example `font-weight: 100 400;`
+ - : A {{cssxref("font-weight")}} value. Accepts two values to specify a range that is supported by a font face, for example `font-weight: 100 400;`
- {{cssxref("@font-face/font-feature-settings", "font-feature-settings")}}
- : Allows control over advanced typographic features in OpenType fonts.
- {{cssxref("@font-face/font-variation-settings", "font-variation-settings")}}
- - : Allows low-level control over OpenType or TrueType font variations, by specifying the four letter axis names of the features to vary, along with their variation values.
+ - : Allows low-level control over OpenType or TrueType font variations, by specifying the four-letter axis names of the features to vary, along with their variation values.
- {{cssxref("@font-face/line-gap-override", "line-gap-override")}}
- : Defines the line gap metric for the font.
- {{cssxref("@font-face/size-adjust", "size-adjust")}}
- : Defines a multiplier for glyph outlines and metrics associated with this font. This makes it easier to harmonize the designs of various fonts when rendered at the same font size.
- {{cssxref("@font-face/src", "src")}}
- - : Specifies references to font resources including hints about the font format and technology. It is required for the @font-face rule to be valid.
+ - : Specifies references to font resources including hints about the font format and technology. A `src` is required for the `@font-face` rule to be valid.
- {{cssxref("@font-face/unicode-range", "unicode-range")}}
- : The range of Unicode code points to be used from the font.
@@ -58,9 +58,9 @@ It's common to use both `url()` and `local()` together, so that the user's insta
If the `local()` function is provided, specifying a font name to look for on the user's device, and if the {{Glossary("user agent")}} finds a match, that local font is used. Otherwise, the font resource specified using the `url()` function is downloaded and used.
Browsers attempt to load resources in their list declaration order, so usually `local()` should be written before `url()`. Both functions are optional, so a rule block containing only one or more `local()` without `url()` is possible.
-If a more specific fonts with `format()` or `tech()` values are desired, these should be listed _before_ versions that don't have these values, as the less-specific variant would otherwise be tried and used first.
+If more specific fonts with `format()` or `tech()` values are desired, these should be listed _before_ versions that don't have these values, as the less specific variant would otherwise be tried and used first.
-By allowing authors to provide their own fonts, `@font-face` makes it possible to design content without being limited to the so-called "web-safe" fonts (that is, the fonts which are so common that they're considered to be universally available). The ability to specify the name of a locally-installed font to look for and use makes it possible to customize the font beyond the basics while making it possible to do so without relying on an internet connection.
+By allowing authors to provide their own fonts, `@font-face` makes it possible to design content without being limited to the so-called "web-safe" fonts (that is, the fonts that are so common that they're considered to be universally available). The ability to specify the name of a locally-installed font to look for and use makes it possible to customize the font beyond the basics while making it possible to do so without relying on an internet connection.
> [!NOTE]
> Fallback strategies for loading fonts on older browsers are described in the [`src` descriptor page](/en-US/docs/Web/CSS/@font-face/src#specifying_fallbacks_for_older_browsers).
diff --git a/files/en-us/web/css/css_grid_layout/basic_concepts_of_grid_layout/index.md b/files/en-us/web/css/css_grid_layout/basic_concepts_of_grid_layout/index.md
index 929807521258323..a2dfa522f8e0844 100644
--- a/files/en-us/web/css/css_grid_layout/basic_concepts_of_grid_layout/index.md
+++ b/files/en-us/web/css/css_grid_layout/basic_concepts_of_grid_layout/index.md
@@ -10,7 +10,7 @@ page-type: guide
## What is a grid?
-A grid is a set of intersecting horizontal and vertical lines defining columns and rows. Elements can be placed onto the grid within these column and row lines. CSS grid layout has the following features:
+A grid is a set of intersecting horizontal and vertical lines defining rows and columns. Elements can be placed onto the grid within these column and row lines. CSS grid layout has the following features:
### Fixed and flexible track sizes
diff --git a/files/en-us/web/html/element/input/submit/index.md b/files/en-us/web/html/element/input/submit/index.md
index 0c51a87c7df5300..1f6abc9ca68bb6b 100644
--- a/files/en-us/web/html/element/input/submit/index.md
+++ b/files/en-us/web/html/element/input/submit/index.md
@@ -52,7 +52,7 @@ A string that identifies the encoding method to use when submitting the form dat
- `text/plain`
- : Plain text; mostly useful only for debugging, so you can easily see the data that's to be submitted.
-If specified, the value of the `formenctype` attribute overrides the owning form's [`action`](/en-US/docs/Web/HTML/Element/form#action) attribute.
+If specified, the value of the `formenctype` attribute overrides the owning form's [`enctype`](/en-US/docs/Web/HTML/Element/form#enctype) attribute.
This attribute is also available on [` `](/en-US/docs/Web/HTML/Element/input/image) and {{HTMLElement("button")}} elements.
diff --git a/files/en-us/web/html/element/input/time/index.md b/files/en-us/web/html/element/input/time/index.md
index 9a0669844bef623..8f37eabaa5dee24 100644
--- a/files/en-us/web/html/element/input/time/index.md
+++ b/files/en-us/web/html/element/input/time/index.md
@@ -284,7 +284,7 @@ In this example, we create an interface element for choosing time using the nati
### CSS
```css
-input[type="number"] {
+input[type="time"] {
width: 100px;
}
diff --git a/files/en-us/web/javascript/data_structures/index.md b/files/en-us/web/javascript/data_structures/index.md
index 266b7f8ad49cc62..14555fbee8c7da0 100644
--- a/files/en-us/web/javascript/data_structures/index.md
+++ b/files/en-us/web/javascript/data_structures/index.md
@@ -197,7 +197,7 @@ Objects are ad-hoc key-value pairs, so they are often used as maps. However, the
### Dates
-When representing dates, the best choice is to use the built-in [`Date`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) utility in JavaScript.
+JavaScript provides two sets of APIs for representing dates: the legacy {{jsxref("Date")}} object and the modern {{jsxref("Temporal")}} object. `Date` has many undesirable design choices and should be avoided in new code if possible.
### Indexed collections: Arrays and typed Arrays
diff --git a/files/en-us/web/javascript/guide/expressions_and_operators/index.md b/files/en-us/web/javascript/guide/expressions_and_operators/index.md
index 79c98be3db2753f..28436b950b8569c 100644
--- a/files/en-us/web/javascript/guide/expressions_and_operators/index.md
+++ b/files/en-us/web/javascript/guide/expressions_and_operators/index.md
@@ -1038,16 +1038,16 @@ if the specified object is of the specified object type. The syntax is:
object instanceof objectType
```
-where `object` is the object to test against `objectType`, and `objectType` is a constructor representing a type, such as {{jsxref("Date")}} or {{jsxref("Array")}}.
+where `object` is the object to test against `objectType`, and `objectType` is a constructor representing a type, such as {{jsxref("Map")}} or {{jsxref("Array")}}.
Use `instanceof` when you need to confirm the type of an object at runtime.
For example, when catching exceptions, you can branch to different exception-handling code depending on the type of exception thrown.
-For example, the following code uses `instanceof` to determine whether `theDay` is a `Date` object. Because `theDay` is a `Date` object, the statements in the `if` statement execute.
+For example, the following code uses `instanceof` to determine whether `obj` is a `Map` object. Because `obj` is a `Map` object, the statements inside the `if` block execute.
```js
-const theDay = new Date(1995, 12, 17);
-if (theDay instanceof Date) {
+const obj = new Map();
+if (obj instanceof Map) {
// statements to execute
}
```
diff --git a/files/en-us/web/javascript/guide/introduction/index.md b/files/en-us/web/javascript/guide/introduction/index.md
index 03774af06de7e99..78ada46ed2e8454 100644
--- a/files/en-us/web/javascript/guide/introduction/index.md
+++ b/files/en-us/web/javascript/guide/introduction/index.md
@@ -28,7 +28,7 @@ The JavaScript documentation on MDN includes the following:
JavaScript is a cross-platform, object-oriented scripting language used to make webpages interactive (e.g., having complex animations, clickable buttons, popup menus, etc.). There are also more advanced server side versions of JavaScript such as Node.js, which allow you to add more functionality to a website than downloading files (such as realtime collaboration between multiple computers). Inside a host environment (for example, a web browser), JavaScript can be connected to the objects of its environment to provide programmatic control over them.
-JavaScript contains a standard library of objects, such as `Array`, `Date`, and `Math`, and a core set of language elements such as operators, control structures, and statements. Core JavaScript can be extended for a variety of purposes by supplementing it with additional objects; for example:
+JavaScript contains a standard library of objects, such as `Array`, `Map`, and `Math`, and a core set of language elements such as operators, control structures, and statements. Core JavaScript can be extended for a variety of purposes by supplementing it with additional objects; for example:
- _Client-side JavaScript_ extends the core language by supplying objects to control a browser and its _Document Object Model_ (DOM). For example, client-side extensions allow an application to place elements on an HTML form and respond to user events such as mouse clicks, form input, and page navigation.
- _Server-side JavaScript_ extends the core language by supplying objects relevant to running JavaScript on a server. For example, server-side extensions allow an application to communicate with a database, provide continuity of information from one invocation to another of the application, or perform file manipulations on a server.
diff --git a/files/en-us/web/javascript/guide/representing_dates_times/index.md b/files/en-us/web/javascript/guide/representing_dates_times/index.md
index 6626d35653cdc2c..ee14cc0053a3286 100644
--- a/files/en-us/web/javascript/guide/representing_dates_times/index.md
+++ b/files/en-us/web/javascript/guide/representing_dates_times/index.md
@@ -6,6 +6,9 @@ page-type: guide
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Numbers_and_strings", "Web/JavaScript/Guide/Regular_expressions")}}
+> [!NOTE]
+> The `Date` object is now considered legacy and should be avoided in new code. We will update this page with modern alternatives soon.
+
## Date object
JavaScript does not have a date data type. However, you can use the {{jsxref("Date")}} object and its methods to work with dates and times in your applications. The `Date` object has a large number of methods for setting, getting, and manipulating dates. It does not have any properties.
diff --git a/files/en-us/web/javascript/index.md b/files/en-us/web/javascript/index.md
index 27d4180a6cf2f14..8eb66ce4904f71e 100644
--- a/files/en-us/web/javascript/index.md
+++ b/files/en-us/web/javascript/index.md
@@ -74,7 +74,7 @@ Learn how to program in JavaScript from the ground up with our beginner's tutori
Browse the complete [JavaScript reference](/en-US/docs/Web/JavaScript/Reference) documentation.
- [Standard objects](/en-US/docs/Web/JavaScript/Reference/Global_Objects)
- - : Get to know standard built-in objects {{jsxref("Array")}}, {{jsxref("Boolean")}}, {{jsxref("Date")}}, {{jsxref("Error")}}, {{jsxref("Function")}}, {{jsxref("JSON")}}, {{jsxref("Math")}}, {{jsxref("Number")}}, {{jsxref("Object")}}, {{jsxref("RegExp")}}, {{jsxref("String")}}, {{jsxref("Map")}}, {{jsxref("Set")}}, {{jsxref("WeakMap")}}, {{jsxref("WeakSet")}}, and others.
+ - : Get to know standard built-in objects: {{jsxref("Array")}}, {{jsxref("Boolean")}}, {{jsxref("Error")}}, {{jsxref("Function")}}, {{jsxref("JSON")}}, {{jsxref("Math")}}, {{jsxref("Number")}}, {{jsxref("Object")}}, {{jsxref("RegExp")}}, {{jsxref("String")}}, {{jsxref("Map")}}, {{jsxref("Set")}}, {{jsxref("WeakMap")}}, {{jsxref("WeakSet")}}, and others.
- [Expressions and operators](/en-US/docs/Web/JavaScript/Reference/Operators)
- : Learn more about the behavior of JavaScript's operators {{jsxref("Operators/instanceof", "instanceof")}}, {{jsxref("Operators/typeof", "typeof")}}, {{jsxref("Operators/new", "new")}}, {{jsxref("Operators/this", "this")}}, the [operator precedence](/en-US/docs/Web/JavaScript/Reference/Operators/Operator_precedence), and more.
- [Statements and declarations](/en-US/docs/Web/JavaScript/Reference/Statements)
diff --git a/files/en-us/web/javascript/language_overview/index.md b/files/en-us/web/javascript/language_overview/index.md
index 423a1ade6b3e2da..4a61a7c4db0834f 100644
--- a/files/en-us/web/javascript/language_overview/index.md
+++ b/files/en-us/web/javascript/language_overview/index.md
@@ -26,7 +26,7 @@ Everything else is known as an [Object](/en-US/docs/Web/JavaScript/Data_structur
- {{jsxref("Function")}}
- {{jsxref("Array")}}
-- {{jsxref("Date")}}
+- {{jsxref("Map")}}
- {{jsxref("RegExp")}}
- {{jsxref("Error")}}
diff --git a/files/en-us/web/javascript/reference/classes/public_class_fields/index.md b/files/en-us/web/javascript/reference/classes/public_class_fields/index.md
index 8eb69d9599f550f..4db72aca2439121 100644
--- a/files/en-us/web/javascript/reference/classes/public_class_fields/index.md
+++ b/files/en-us/web/javascript/reference/classes/public_class_fields/index.md
@@ -177,7 +177,7 @@ const instance2 = new DerivedWithConstructor(); // Logs 1
### Using class fields
-Class fields cannot depend on arguments of the constructor, so field initializers usually evaluate to the same value for each instance (unless the same expression can evaluate to different values each time, such as {{jsxref("Date.now()")}} or object initializers).
+Class fields cannot depend on arguments of the constructor, so field initializers usually evaluate to the same value for each instance (unless the same expression can evaluate to different values each time, such as {{jsxref("Math.random()")}} or object initializers).
```js example-bad
class Person {
diff --git a/files/en-us/web/javascript/reference/global_objects/array/find/index.md b/files/en-us/web/javascript/reference/global_objects/array/find/index.md
index 7857b6fc9543dae..33f1af624771ae4 100644
--- a/files/en-us/web/javascript/reference/global_objects/array/find/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/array/find/index.md
@@ -86,9 +86,9 @@ const result = inventory.find(({ name }) => name === "cherries");
console.log(result); // { name: 'cherries', quantity: 5 }
```
-### Find a prime number in an array
+### Find the first prime number in an array
-The following example finds an element in the array that is a prime number (or returns {{jsxref("undefined")}} if there is no prime number):
+The following example returns the first element in the array that is a prime number, or {{jsxref("undefined")}} if there is no prime number.
```js
function isPrime(element, index, array) {
diff --git a/files/en-us/web/javascript/reference/global_objects/array/findindex/index.md b/files/en-us/web/javascript/reference/global_objects/array/findindex/index.md
index d182016756f7205..0b01a1b63e6d3ec 100644
--- a/files/en-us/web/javascript/reference/global_objects/array/findindex/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/array/findindex/index.md
@@ -48,7 +48,7 @@ The `findIndex()` method is [generic](/en-US/docs/Web/JavaScript/Reference/Globa
## Examples
-### Find the index of a prime number in an array
+### Find the index of the first prime number in an array
The following example returns the index of the first element in the array that is a prime number, or `-1` if there is no prime number.
diff --git a/files/en-us/web/javascript/reference/global_objects/array/tolocalestring/index.md b/files/en-us/web/javascript/reference/global_objects/array/tolocalestring/index.md
index b6bec81d1d68740..335e063886c9340 100644
--- a/files/en-us/web/javascript/reference/global_objects/array/tolocalestring/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/array/tolocalestring/index.md
@@ -27,7 +27,7 @@ toLocaleString(locales, options)
- `locales` {{optional_inline}}
- : A string with a BCP 47 language tag, or an array of such strings. For the general form and interpretation of the `locales` argument, see [the parameter description on the `Intl` main page](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#locales_argument).
- `options` {{optional_inline}}
- - : An object with configuration properties. For numbers, see {{jsxref("Number.prototype.toLocaleString()")}}; for dates, see {{jsxref("Date.prototype.toLocaleString()")}}.
+ - : An object with configuration properties. What you can pass here depends on what elements are being converted. For example, for numbers, see {{jsxref("Number.prototype.toLocaleString()")}}.
### Return value
@@ -47,15 +47,7 @@ The `toLocaleString()` method is [generic](/en-US/docs/Web/JavaScript/Reference/
### Using locales and options
-The elements of the array are converted to strings using their
-`toLocaleString` methods.
-
-- `Object`: {{jsxref("Object.prototype.toLocaleString()")}}
-- `Number`: {{jsxref("Number.prototype.toLocaleString()")}}
-- `Date`: {{jsxref("Date.prototype.toLocaleString()")}}
-
-Always display the currency for the strings and numbers in the `prices`
-array:
+The elements of the array are converted to strings using their `toLocaleString` methods. For example, this snippet implicitly calls the {{jsxref("Number.prototype.toLocaleString()")}} method to display the currency for the strings and numbers in the `prices` array:
```js
const prices = ["¥7", 500, 8123, 12];
@@ -64,8 +56,6 @@ prices.toLocaleString("ja-JP", { style: "currency", currency: "JPY" });
// "¥7,¥500,¥8,123,¥12"
```
-For more examples, see also the [`Intl.NumberFormat`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat) and [`Intl.DateTimeFormat`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat) pages.
-
### Using toLocaleString() on sparse arrays
`toLocaleString()` treats empty slots the same as `undefined` and produces an extra separator:
@@ -108,4 +98,4 @@ console.log(Array.prototype.toLocaleString.call(arrayLike));
- {{jsxref("Intl.ListFormat")}}
- {{jsxref("Object.prototype.toLocaleString()")}}
- {{jsxref("Number.prototype.toLocaleString()")}}
-- {{jsxref("Date.prototype.toLocaleString()")}}
+- {{jsxref("Temporal/PlainDate/toLocaleString", "Temporal.PlainDate.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/bigint/tolocalestring/index.md b/files/en-us/web/javascript/reference/global_objects/bigint/tolocalestring/index.md
index 17c2730f718b872..527b21baec1c088 100644
--- a/files/en-us/web/javascript/reference/global_objects/bigint/tolocalestring/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/bigint/tolocalestring/index.md
@@ -7,7 +7,7 @@ browser-compat: javascript.builtins.BigInt.toLocaleString
{{JSRef}}
-The **`toLocaleString()`** method of {{jsxref("BigInt")}} values returns a string with a language-sensitive representation of this BigInt. In implementations with [`Intl.NumberFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat) support, this method simply calls `Intl.NumberFormat`.
+The **`toLocaleString()`** method of {{jsxref("BigInt")}} values returns a string with a language-sensitive representation of this BigInt. In implementations with [`Intl.NumberFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat) support, this method delegates to `Intl.NumberFormat`.
Every time `toLocaleString` is called, it has to perform a search in a big database of localization strings, which is potentially inefficient. When the method is called many times with the same arguments, it is better to create a {{jsxref("Intl.NumberFormat")}} object and use its {{jsxref("Intl/NumberFormat/format", "format()")}} method, because a `NumberFormat` object remembers the arguments passed to it and may decide to cache a slice of the database, so future `format` calls can search for localization strings within a more constrained context.
diff --git a/files/en-us/web/javascript/reference/global_objects/date/index.md b/files/en-us/web/javascript/reference/global_objects/date/index.md
index f296369a003378d..2ddc299bfc4a39e 100644
--- a/files/en-us/web/javascript/reference/global_objects/date/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/date/index.md
@@ -10,7 +10,7 @@ browser-compat: javascript.builtins.Date
JavaScript **`Date`** objects represent a single moment in time in a platform-independent format. `Date` objects encapsulate an integral number that represents milliseconds since the midnight at the beginning of January 1, 1970, UTC (the _epoch_).
> [!NOTE]
-> TC39 is working on [Temporal](https://tc39.es/proposal-temporal/docs/index.html), a new Date/Time API. Read more about it on the [Igalia blog](https://blogs.igalia.com/compilers/2020/06/23/dates-and-times-in-javascript/). It is not yet ready for production use!
+> With the introduction of the {{jsxref("Temporal")}} API, the `Date` object is considered a legacy feature. Consider using `Temporal` for new code and migrate existing code over to it if possible (check the [browser compatibility](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#browser_compatibility). We will be writing a usage guide soon!
## Description
@@ -275,7 +275,7 @@ These properties are defined on `Date.prototype` and shared by all `Date` instan
- {{jsxref("Date.prototype.toISOString()")}}
- : Converts a date to a string following the ISO 8601 Extended Format.
- {{jsxref("Date.prototype.toJSON()")}}
- - : Returns a string representing the `Date` using {{jsxref("Date/toISOString", "toISOString()")}}. Intended for use by {{jsxref("JSON.stringify()")}}.
+ - : Returns a string representing the `Date` using {{jsxref("Date/toISOString", "toISOString()")}}. Intended to be implicitly called by {{jsxref("JSON.stringify()")}}.
- {{jsxref("Date.prototype.toLocaleDateString()")}}
- : Returns a string with a locality sensitive representation of the date portion of this date based on system settings.
- {{jsxref("Date.prototype.toLocaleString()")}}
@@ -284,6 +284,8 @@ These properties are defined on `Date.prototype` and shared by all `Date` instan
- : Returns a string with a locality-sensitive representation of the time portion of this date, based on system settings.
- {{jsxref("Date.prototype.toString()")}}
- : Returns a string representing the specified `Date` object. Overrides the {{jsxref("Object.prototype.toString()")}} method.
+- {{jsxref("Date.prototype.toTemporalInstant()")}}
+ - : Returns a new {{jsxref("Temporal.Instant")}} object with the same {{jsxref("Temporal/Instant/epochMilliseconds", "epochMilliseconds")}} value as this date's [timestamp](#the_epoch_timestamps_and_invalid_date).
- {{jsxref("Date.prototype.toTimeString()")}}
- : Returns the "time" portion of the `Date` as a human-readable string.
- {{jsxref("Date.prototype.toUTCString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/date/tolocaledatestring/index.md b/files/en-us/web/javascript/reference/global_objects/date/tolocaledatestring/index.md
index e0cafc2310ff220..e842f57bddac281 100644
--- a/files/en-us/web/javascript/reference/global_objects/date/tolocaledatestring/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/date/tolocaledatestring/index.md
@@ -7,7 +7,7 @@ browser-compat: javascript.builtins.Date.toLocaleDateString
{{JSRef}}
-The **`toLocaleDateString()`** method of {{jsxref("Date")}} instances returns a string with a language-sensitive representation of the date portion of this date in the local timezone. In implementations with [`Intl.DateTimeFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat) support, this method simply calls `Intl.DateTimeFormat`.
+The **`toLocaleDateString()`** method of {{jsxref("Date")}} instances returns a string with a language-sensitive representation of the date portion of this date in the local timezone. In implementations with [`Intl.DateTimeFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat) support, this method delegates to `Intl.DateTimeFormat`.
Every time `toLocaleString` is called, it has to perform a search in a big database of localization strings, which is potentially inefficient. When the method is called many times with the same arguments, it is better to create a {{jsxref("Intl.DateTimeFormat")}} object and use its {{jsxref("Intl/DateTimeFormat/format", "format()")}} method, because a `DateTimeFormat` object remembers the arguments passed to it and may decide to cache a slice of the database, so future `format` calls can search for localization strings within a more constrained context.
diff --git a/files/en-us/web/javascript/reference/global_objects/date/tolocalestring/index.md b/files/en-us/web/javascript/reference/global_objects/date/tolocalestring/index.md
index fafc7e069b86eb8..06f1693de776b7d 100644
--- a/files/en-us/web/javascript/reference/global_objects/date/tolocalestring/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/date/tolocalestring/index.md
@@ -7,7 +7,7 @@ browser-compat: javascript.builtins.Date.toLocaleString
{{JSRef}}
-The **`toLocaleString()`** method of {{jsxref("Date")}} instances returns a string with a language-sensitive representation of this date in the local timezone. In implementations with [`Intl.DateTimeFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat) support, this method simply calls `Intl.DateTimeFormat`.
+The **`toLocaleString()`** method of {{jsxref("Date")}} instances returns a string with a language-sensitive representation of this date in the local timezone. In implementations with [`Intl.DateTimeFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat) support, this method delegates to `Intl.DateTimeFormat`.
Every time `toLocaleString` is called, it has to perform a search in a big database of localization strings, which is potentially inefficient. When the method is called many times with the same arguments, it is better to create a {{jsxref("Intl.DateTimeFormat")}} object and use its {{jsxref("Intl/DateTimeFormat/format", "format()")}} method, because a `DateTimeFormat` object remembers the arguments passed to it and may decide to cache a slice of the database, so future `format` calls can search for localization strings within a more constrained context.
diff --git a/files/en-us/web/javascript/reference/global_objects/date/tolocaletimestring/index.md b/files/en-us/web/javascript/reference/global_objects/date/tolocaletimestring/index.md
index 8e23159d839150d..232301895eb9ee9 100644
--- a/files/en-us/web/javascript/reference/global_objects/date/tolocaletimestring/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/date/tolocaletimestring/index.md
@@ -7,7 +7,7 @@ browser-compat: javascript.builtins.Date.toLocaleTimeString
{{JSRef}}
-The **`toLocaleTimeString()`** method of {{jsxref("Date")}} instances returns a string with a language-sensitive representation of the time portion of this date in the local timezone. In implementations with [`Intl.DateTimeFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat) support, this method simply calls `Intl.DateTimeFormat`.
+The **`toLocaleTimeString()`** method of {{jsxref("Date")}} instances returns a string with a language-sensitive representation of the time portion of this date in the local timezone. In implementations with [`Intl.DateTimeFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat) support, this method delegates to `Intl.DateTimeFormat`.
Every time `toLocaleTimeString` is called, it has to perform a search in a big database of localization strings, which is potentially inefficient. When the method is called many times with the same arguments, it is better to create a {{jsxref("Intl.DateTimeFormat")}} object and use its {{jsxref("Intl/DateTimeFormat/format", "format()")}} method, because a `DateTimeFormat` object remembers the arguments passed to it and may decide to cache a slice of the database, so future `format` calls can search for localization strings within a more constrained context.
diff --git a/files/en-us/web/javascript/reference/global_objects/date/totemporalinstant/index.md b/files/en-us/web/javascript/reference/global_objects/date/totemporalinstant/index.md
new file mode 100644
index 000000000000000..808fe18f9b6cfed
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/date/totemporalinstant/index.md
@@ -0,0 +1,59 @@
+---
+title: Date.prototype.toTemporalInstant()
+slug: Web/JavaScript/Reference/Global_Objects/Date/toTemporalInstant
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Date.toTemporalInstant
+---
+
+{{JSRef}}
+
+The **`toTemporalInstant()`** method of {{jsxref("Date")}} instances returns a new {{jsxref("Temporal.Instant")}} object with the same {{jsxref("Temporal/Instant/epochMilliseconds", "epochMilliseconds")}} value as this date's [timestamp](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#the_epoch_timestamps_and_invalid_date).
+
+Use this method to convert legacy `Date` values to the `Temporal` API, then further convert it to other {{jsxref("Temporal")}} classes as necessary.
+
+## Syntax
+
+```js-nolint
+toTemporalInstant()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A new {{jsxref("Temporal.Instant")}} object with the same {{jsxref("Temporal/Instant/epochMilliseconds", "epochMilliseconds")}} value as this date's timestamp. Its microsecond and nanosecond components are always `0`.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if the date is [invalid](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#the_epoch_timestamps_and_invalid_date) (it has a timestamp of `NaN`).
+
+## Examples
+
+### Using toTemporalInstant()
+
+```js
+const legacyDate = new Date("2021-07-01T12:34:56.789Z");
+const instant = legacyDate.toTemporalInstant();
+
+// Further convert it to other objects
+const zdt = instant.toZonedDateTimeISO("UTC");
+const date = zdt.toPlainDate();
+console.log(date.toString()); // 2021-07-01
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Instant")}}
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/Instant/fromEpochMilliseconds", "Temporal.Instant.fromEpochMilliseconds()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/eval/index.md b/files/en-us/web/javascript/reference/global_objects/eval/index.md
index d05bc71853619fb..a29bece55fcdf7c 100644
--- a/files/en-us/web/javascript/reference/global_objects/eval/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/eval/index.md
@@ -192,7 +192,7 @@ Consider this code:
function looseJsonParse(obj) {
return eval(`(${obj})`);
}
-console.log(looseJsonParse("{ a: 4 - 1, b: function () {}, c: new Date() }"));
+console.log(looseJsonParse("{ a: 4 - 1, b: function () {}, c: new Map() }"));
```
Simply using indirect eval and forcing strict mode can make the code much better:
@@ -201,22 +201,22 @@ Simply using indirect eval and forcing strict mode can make the code much better
function looseJsonParse(obj) {
return eval?.(`"use strict";(${obj})`);
}
-console.log(looseJsonParse("{ a: 4 - 1, b: function () {}, c: new Date() }"));
+console.log(looseJsonParse("{ a: 4 - 1, b: function () {}, c: new Map() }"));
```
The two code snippets above may seem to work the same way, but they do not; the first one using direct eval suffers from multiple problems.
-- It is a great deal slower, due to more scope inspections. Notice `c: new Date()` in the evaluated string. In the indirect eval version, the object is being evaluated in the global scope, so it is safe for the interpreter to assume that `Date` refers to the global `Date()` constructor instead of a local variable called `Date`. However, in the code using direct eval, the interpreter cannot assume this. For example, in the following code, `Date` in the evaluated string doesn't refer to `window.Date()`.
+- It is a great deal slower, due to more scope inspections. Notice `c: new Map()` in the evaluated string. In the indirect eval version, the object is being evaluated in the global scope, so it is safe for the interpreter to assume that `Map` refers to the global `Map()` constructor instead of a local variable called `Map`. However, in the code using direct eval, the interpreter cannot assume this. For example, in the following code, `Map` in the evaluated string doesn't refer to `window.Map()`.
```js
function looseJsonParse(obj) {
- function Date() {}
+ class Map {}
return eval(`(${obj})`);
}
- console.log(looseJsonParse(`{ a: 4 - 1, b: function () {}, c: new Date() }`));
+ console.log(looseJsonParse(`{ a: 4 - 1, b: function () {}, c: new Map() }`));
```
- Thus, in the `eval()` version of the code, the browser is forced to make the expensive lookup call to check to see if there are any local variables called `Date()`.
+ Thus, in the `eval()` version of the code, the browser is forced to make the expensive lookup call to check to see if there are any local variables called `Map()`.
- If not using strict mode, `var` declarations within the `eval()` source becomes variables in the surrounding scope. This leads to hard-to-debug issues if the string is acquired from external input, especially if there's an existing variable with the same name.
- Direct eval can read and mutate bindings in the surrounding scope, which may lead to external input corrupting local data.
@@ -233,21 +233,13 @@ The difference between `eval()` and `Function()` is that the source string passe
The `Function()` constructor is useful if you wish to create local bindings within your eval source, by passing the variables as parameter bindings.
```js
-function Date(n) {
- return [
- "Monday",
- "Tuesday",
- "Wednesday",
- "Thursday",
- "Friday",
- "Saturday",
- "Sunday",
- ][n % 7 || 0];
+function add(a, b) {
+ return a + b;
}
-function runCodeWithDateFunction(obj) {
- return Function("Date", `"use strict";return (${obj});`)(Date);
+function runCodeWithAddFunction(obj) {
+ return Function("add", `"use strict";return (${obj});`)(add);
}
-console.log(runCodeWithDateFunction("Date(5)")); // Saturday
+console.log(runCodeWithAddFunction("add(5, 7)")); // 12
```
Both `eval()` and `Function()` implicitly evaluate arbitrary code, and are forbidden in strict [CSP](/en-US/docs/Web/HTTP/CSP) settings. There are also additional safer (and faster!) alternatives to `eval()` or `Function()` for common use-cases.
diff --git a/files/en-us/web/javascript/reference/global_objects/index.md b/files/en-us/web/javascript/reference/global_objects/index.md
index bd8819add21d8c9..5dd36ec400b14ff 100644
--- a/files/en-us/web/javascript/reference/global_objects/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/index.md
@@ -74,6 +74,7 @@ These are the base objects representing numbers, dates, and mathematical calcula
- {{jsxref("BigInt")}}
- {{jsxref("Math")}}
- {{jsxref("Date")}}
+- {{jsxref("Temporal")}}
### Text processing
diff --git a/files/en-us/web/javascript/reference/global_objects/intl/collator/index.md b/files/en-us/web/javascript/reference/global_objects/intl/collator/index.md
index 43ce7b0ce3d026a..75a17861b177057 100644
--- a/files/en-us/web/javascript/reference/global_objects/intl/collator/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/intl/collator/index.md
@@ -90,3 +90,4 @@ console.log(new Intl.Collator("sv", { sensitivity: "base" }).compare("ä", "a"))
## See also
- {{jsxref("Intl")}}
+- {{jsxref("String.prototype.localeCompare()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/datetimeformat/index.md b/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/datetimeformat/index.md
index c646588331233ac..189d6b52c2a755e 100644
--- a/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/datetimeformat/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/datetimeformat/index.md
@@ -131,31 +131,48 @@ Intl.DateTimeFormat(locales, options)
> [!NOTE]
> Timezone display may fall back to another format if a required string is unavailable. For example, the non-location formats should display the timezone without a specific country/city location like "Pacific Time", but may fall back to a timezone like "Los Angeles Time".
-The default value for each date-time component option is {{jsxref("undefined")}}, but if all component properties are {{jsxref("undefined")}}, then `year`, `month`, and `day` default to `"numeric"`. If any of the date-time component options is specified, then `dateStyle` and `timeStyle` must be `undefined`.
+##### Date-time component default values
-- `formatMatcher`
+If any of the date-time component options are specified, then `dateStyle` and `timeStyle` must be `undefined`. If all date-time component options and `dateStyle`/`timeStyle` are `undefined`, some default options for date-time components are set, which depend on the object that the formatting method was called with:
+
+- When formatting {{jsxref("Temporal.PlainDate")}} and {{jsxref("Date")}}, `year`, `month`, and `day` default to `"numeric"`.
+- When formatting {{jsxref("Temporal.PlainTime")}}, `hour`, `minute`, and `second` default to `"numeric"`.
+- When formatting {{jsxref("Temporal.PlainYearMonth")}}, `year` and `month` default to `"numeric"`.
+- When formatting {{jsxref("Temporal.PlainMonthDay")}}, `month` and `day` default to `"numeric"`.
+- When formatting {{jsxref("Temporal.PlainDateTime")}} and {{jsxref("Temporal.Instant")}}, `year`, `month`, `day`, `hour`, `minute`, and `second` default to `"numeric"`.
- - : The format matching algorithm to use. Possible values are `"basic"` and `"best fit"`; the default is `"best fit"`. Implementations are required to support displaying at least the following subsets of date-time components:
+##### Format matching
- - `weekday`, `year`, `month`, `day`, `hour`, `minute`, `second`
- - `weekday`, `year`, `month`, `day`
- - `year`, `month`, `day`
- - `year`, `month`
- - `month`, `day`
- - `hour`, `minute`, `second`
- - `hour`, `minute`
+Implementations are required to support displaying at least the following subsets of date-time components:
- Implementations may support other subsets, and requests will be negotiated against all available subset-representation combinations to find the best match. The algorithm for `"best fit"` is implementation-defined, and `"basic"` is [defined by the spec](https://tc39.es/ecma402/#sec-basicformatmatcher). This option is only used when both `dateStyle` and `timeStyle` are `undefined` (so that each date-time component's format is individually customizable).
+- `weekday`, `year`, `month`, `day`, `hour`, `minute`, `second`
+- `weekday`, `year`, `month`, `day`
+- `year`, `month`, `day`
+- `year`, `month`
+- `month`, `day`
+- `hour`, `minute`, `second`
+- `hour`, `minute`
+
+The date-time component styles requested might not directly correspond to a valid format supported by the locale, so the format matcher allows you to specify how to match the requested styles to the closest supported format.
+
+- `formatMatcher`
+ - : The format matching algorithm to use. Possible values are `"basic"` and `"best fit"`; the default is `"best fit"`. The algorithm for `"best fit"` is implementation-defined, and `"basic"` is [defined by the spec](https://tc39.es/ecma402/#sec-basicformatmatcher). This option is only used when both `dateStyle` and `timeStyle` are `undefined` (so that each date-time component's format is individually customizable).
#### Style shortcuts
- `dateStyle`
- - : The [date formatting style](https://cldr.unicode.org/translation/date-time/date-time-patterns#h.aa5zjyepm6vh) to use. Possible values are `"full"`, `"long"`, `"medium"`, and `"short"`. It expands to styles for `weekday`, `day`, `month`, `year`, and `era`, with the exact combination of values depending on the locale.
+ - : The [date formatting style](https://cldr.unicode.org/translation/date-time/date-time-patterns#h.aa5zjyepm6vh) to use. Possible values are `"full"`, `"long"`, `"medium"`, and `"short"`. It expands to styles for `weekday`, `day`, `month`, `year`, and `era`, with the exact combination of values depending on the locale. When formatting objects such as {{jsxref("Temporal.PlainDate")}}, {{jsxref("Temporal.PlainYearMonth")}}, and {{jsxref("Temporal.PlainMonthDay")}}, `dateStyle` will resolve to only those fields relevant to the object.
- `timeStyle`
- : The [time formatting style](https://cldr.unicode.org/translation/date-time/date-time-patterns#h.588vo3awdscu) to use. Possible values are `"full"`, `"long"`, `"medium"`, and `"short"`. It expands to styles for `hour`, `minute`, `second`, and `timeZoneName`, with the exact combination of values depending on the locale.
> **Note:** `dateStyle` and `timeStyle` can be used with each other, but not with other date-time component options (e.g. `weekday`, `hour`, `month`, etc.).
+You can format different object types depending on which of the style shortcut options you include:
+
+- If the `dateStyle` is specified, then you can format {{jsxref("Temporal.PlainDate")}}, {{jsxref("Temporal.PlainYearMonth")}}, and {{jsxref("Temporal.PlainMonthDay")}} objects.
+- If the `timeStyle` is specified, then you can format {{jsxref("Temporal.PlainTime")}} objects.
+- If either `dateStyle` or `timeStyle` is specified, then you can format {{jsxref("Temporal.PlainDateTime")}} and {{jsxref("Date")}} objects.
+
### Return value
A new `Intl.DateTimeFormat` object.
diff --git a/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/format/index.md b/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/format/index.md
index fa1fc8db7b71dec..d306013d875fb25 100644
--- a/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/format/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/format/index.md
@@ -20,7 +20,13 @@ format(date)
### Parameters
- `date`
- - : The date to format. Omitting it results in formatting the current date (as returned by {{jsxref("Date.now()")}}), which could be slightly confusing, so it is advisable to always explicitly pass a date.
+
+ - : The date to format. Can be a {{jsxref("Date")}} or {{jsxref("Temporal.PlainDateTime")}} object. Additionally can be a {{jsxref("Temporal.PlainTime")}}, {{jsxref("Temporal.PlainDate")}}, {{jsxref("Temporal.PlainYearMonth")}}, or {{jsxref("Temporal.PlainMonthDay")}} object if the `DateTimeFormat` object was configured to print at least one relevant part of the date.
+
+ > [!NOTE]
+ > A {{jsxref("Temporal.ZonedDateTime")}} object will always throw a `TypeError`; use {{jsxref("Temporal/ZonedDateTime/toLocaleString", "Temporal.ZonedDateTime.prototype.toLocaleString()")}} or convert it to a {{jsxref("Temporal.PlainDateTime")}} object instead.
+
+ Omitting it results in formatting the current date (as returned by {{jsxref("Date.now()")}}), which could be slightly confusing, so it is advisable to always explicitly pass a date.
### Return value
@@ -75,6 +81,3 @@ console.log(formatted.join("; "));
## See also
- {{jsxref("Intl.DateTimeFormat")}}
-- {{jsxref("Date.prototype.toLocaleString()")}}
-- {{jsxref("Date.prototype.toLocaleDateString()")}}
-- {{jsxref("Date.prototype.toLocaleTimeString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/formatrange/index.md b/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/formatrange/index.md
index 0afc112a3b4ccf9..57cd7a96cd5b969 100644
--- a/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/formatrange/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/formatrange/index.md
@@ -23,9 +23,11 @@ formatRange(startDate, endDate)
### Parameters
- `startDate`
- - : A {{jsxref("Date")}} object representing the start of the date range.
+ - : The start of the date range. Can be a {{jsxref("Date")}} or {{jsxref("Temporal.PlainDateTime")}} object. Additionally can be a {{jsxref("Temporal.PlainTime")}}, {{jsxref("Temporal.PlainDate")}}, {{jsxref("Temporal.PlainYearMonth")}}, or {{jsxref("Temporal.PlainMonthDay")}} object if the `DateTimeFormat` object was configured to print at least one relevant part of the date.
+ > [!NOTE]
+ > A {{jsxref("Temporal.ZonedDateTime")}} object will always throw a `TypeError`; use {{jsxref("Temporal/ZonedDateTime/toLocaleString", "Temporal.ZonedDateTime.prototype.toLocaleString()")}} or convert it to a {{jsxref("Temporal.PlainDateTime")}} object instead.
- `endDate`
- - : A {{jsxref("Date")}} object representing the end of the date range.
+ - : The end of the date range. Must have the same type as `startDate`.
### Return value
diff --git a/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/formatrangetoparts/index.md b/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/formatrangetoparts/index.md
index a8563c1f51227e7..a6de8ca406443af 100644
--- a/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/formatrangetoparts/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/formatrangetoparts/index.md
@@ -20,9 +20,11 @@ formatRangeToParts(startDate, endDate)
### Parameters
- `startDate`
- - : A {{jsxref("Date")}} object representing the start of the date range.
+ - : The start of the date range. Can be a {{jsxref("Date")}} or {{jsxref("Temporal.PlainDateTime")}} object. Additionally can be a {{jsxref("Temporal.PlainTime")}}, {{jsxref("Temporal.PlainDate")}}, {{jsxref("Temporal.PlainYearMonth")}}, or {{jsxref("Temporal.PlainMonthDay")}} object if the `DateTimeFormat` object was configured to print at least one relevant part of the date.
+ > [!NOTE]
+ > A {{jsxref("Temporal.ZonedDateTime")}} object will always throw a `TypeError`; use {{jsxref("Temporal/ZonedDateTime/toLocaleString", "Temporal.ZonedDateTime.prototype.toLocaleString()")}} or convert it to a {{jsxref("Temporal.PlainDateTime")}} object instead.
- `endDate`
- - : A {{jsxref("Date")}} object representing the end of the date range.
+ - : The end of the date range. Must have the same type as `startDate`.
### Return value
diff --git a/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/formattoparts/index.md b/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/formattoparts/index.md
index ffdb72cc6aa8fcd..354d48c94821c9d 100644
--- a/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/formattoparts/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/formattoparts/index.md
@@ -19,8 +19,14 @@ formatToParts(date)
### Parameters
-- `date`
- - : The date to format. Omitting it results in formatting the current date (as returned by {{jsxref("Date.now()")}}), which could be slightly confusing, so it is advisable to always explicitly pass a date.
+- `date` {{optional_inline}}
+
+ - : The date to format. Can be a {{jsxref("Date")}} or {{jsxref("Temporal.PlainDateTime")}} object. Additionally can be a {{jsxref("Temporal.PlainTime")}}, {{jsxref("Temporal.PlainDate")}}, {{jsxref("Temporal.PlainYearMonth")}}, or {{jsxref("Temporal.PlainMonthDay")}} object if the `DateTimeFormat` object was configured to print at least one relevant part of the date.
+
+ > [!NOTE]
+ > A {{jsxref("Temporal.ZonedDateTime")}} object will always throw a `TypeError`; use {{jsxref("Temporal/ZonedDateTime/toLocaleString", "Temporal.ZonedDateTime.prototype.toLocaleString()")}} or convert it to a {{jsxref("Temporal.PlainDateTime")}} object instead.
+
+ Omitting it results in formatting the current date (as returned by {{jsxref("Date.now()")}}), which could be slightly confusing, so it is advisable to always explicitly pass a date.
### Return value
diff --git a/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/index.md b/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/index.md
index 80f972ef026ec54..97c5198f98606f7 100644
--- a/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/index.md
@@ -186,3 +186,13 @@ console.log(usedOptions.timeZone);
- [Polyfill of `Intl.DateTimeFormat` in FormatJS](https://formatjs.github.io/docs/polyfills/intl-datetimeformat/)
- {{jsxref("Intl")}}
+- {{jsxref("Date.prototype.toLocaleString()")}}
+- {{jsxref("Date.prototype.toLocaleDateString()")}}
+- {{jsxref("Date.prototype.toLocaleTimeString()")}}
+- {{jsxref("Temporal/Instant/toLocaleString", "Temporal.Instant.prototype.toLocaleString()")}}
+- {{jsxref("Temporal/PlainDate/toLocaleString", "Temporal.PlainDate.prototype.toLocaleString()")}}
+- {{jsxref("Temporal/PlainDateTime/toLocaleString", "Temporal.PlainDateTime.prototype.toLocaleString()")}}
+- {{jsxref("Temporal/PlainTime/toLocaleString", "Temporal.PlainTime.prototype.toLocaleString()")}}
+- {{jsxref("Temporal/PlainYearMonth/toLocaleString", "Temporal.PlainYearMonth.prototype.toLocaleString()")}}
+- {{jsxref("Temporal/PlainMonthDay/toLocaleString", "Temporal.PlainMonthDay.prototype.toLocaleString()")}}
+- {{jsxref("Temporal/ZonedDateTime/toLocaleString", "Temporal.ZonedDateTime.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/resolvedoptions/index.md b/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/resolvedoptions/index.md
index e78b7f64ce155a0..c87381b7220f754 100644
--- a/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/resolvedoptions/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/intl/datetimeformat/resolvedoptions/index.md
@@ -33,10 +33,10 @@ A new object with properties reflecting the options computed during the initiali
- : The value provided for this property in the `options` argument, or using the Unicode extension key `"nu"`, with default filled in as needed. It is a supported [numbering system](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/getNumberingSystems#supported_numbering_system_types) for this locale. The default is locale dependent.
- `timeZone`
- - : The value provided for this property in the `options` argument, with default filled in as needed. It is a canonicalized [IANA time zone name](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/getTimeZones). The default is the runtime's default time zone.
+ - : The value provided for this property in the `options` argument, with default filled in as needed. It is an [IANA time zone name](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets). The default is the runtime's default time zone.
> [!NOTE]
- > While the IANA database changes from time to time, the Unicode CLDR database (which browsers use) keeps old time zone names for stability purposes. All browsers canonicalize time zone names, but in different directions. For example, `new Intl.DateTimeFormat("en-US", { timeZone: "Europe/Kiev" }).resolvedOptions().timeZone` and `new Intl.DateTimeFormat("en-US", { timeZone: "Europe/Kyiv" }).resolvedOptions().timeZone` will return the same string in the same browser, but maybe different strings in different browsers. See {{jsxref("Intl/Locale/getTimeZones", "Intl.Locale.prototype.getTimeZones")}} for more information.
+ > The standardization of `Temporal` requires browsers to use the same identifier as originally specified, without canonicalization to a different alias. See [time zones and offsets](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets) for more information.
- `hourCycle` {{optional_inline}}
- : The value provided for this property in the `options` argument, or using the Unicode extension key `"hc"`, with default filled in as needed. If `hour12` was provided in the `options`, then that overrides other `hourCycle` settings. It is only present if the resolved options also include `hour` or `timeStyle`. It is either `"h11"`, `"h12"`, `"h23"`, or `"h24"`. The default is locale dependent, although `"h24"` is never a default.
diff --git a/files/en-us/web/javascript/reference/global_objects/intl/durationformat/format/index.md b/files/en-us/web/javascript/reference/global_objects/intl/durationformat/format/index.md
index 703694c7d55bcbd..8ee2bda11222262 100644
--- a/files/en-us/web/javascript/reference/global_objects/intl/durationformat/format/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/intl/durationformat/format/index.md
@@ -18,7 +18,7 @@ format(duration)
### Parameters
- `duration`
- - : The duration object to be formatted. It should include some or all of the following properties: `months`, `weeks`, `days`, `hours`, `minutes`, `seconds`, `milliseconds`, `microseconds`, `nanoseconds`.
+ - : The duration object to be formatted. It should include some or all of the following properties: `years`, `months`, `weeks`, `days`, `hours`, `minutes`, `seconds`, `milliseconds`, `microseconds`, `nanoseconds`. Can be a {{jsxref("Temporal.Duration")}} object.
### Return value
@@ -128,5 +128,4 @@ new Intl.DurationFormat("en", { style: "digital", fractionalDigits: 3 }).format(
## See also
- {{jsxref("Intl.DurationFormat")}}
-- {{jsxref("Intl.supportedValuesOf()")}}
-- {{jsxref("Intl")}}
+- {{jsxref("Temporal.Duration")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/intl/durationformat/formattoparts/index.md b/files/en-us/web/javascript/reference/global_objects/intl/durationformat/formattoparts/index.md
index a5d080739180693..635ef7443a4b2af 100644
--- a/files/en-us/web/javascript/reference/global_objects/intl/durationformat/formattoparts/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/intl/durationformat/formattoparts/index.md
@@ -18,7 +18,7 @@ formatToParts(duration)
### Parameters
- `duration` {{optional_inline}}
- - : The duration object to be formatted. It should include some or all of the following properties: `"months"`, `"weeks"`, `"days"`, `"hours"`, `"minutes"`, `"seconds"`, `"milliseconds"`, `"microseconds"`, `"nanoseconds"`.
+ - : The duration object to be formatted. It should include some or all of the following properties: `years`, `months`, `weeks`, `days`, `hours`, `minutes`, `seconds`, `milliseconds`, `microseconds`, `nanoseconds`. Can be a {{jsxref("Temporal.Duration")}} object.
### Return value
@@ -80,3 +80,4 @@ new Intl.DurationFormat("en", { style: "long" }).formatToParts(duration);
- {{jsxref("Intl.DurationFormat")}}
- {{jsxref("Intl/DurationFormat/format", "Intl.DurationFormat.prototype.format()")}}
+- {{jsxref("Temporal.Duration")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/intl/durationformat/index.md b/files/en-us/web/javascript/reference/global_objects/intl/durationformat/index.md
index 6c9a0ac3b31e913..f0c426a3bc1699d 100644
--- a/files/en-us/web/javascript/reference/global_objects/intl/durationformat/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/intl/durationformat/index.md
@@ -75,3 +75,4 @@ new Intl.DurationFormat("pt", { style: "narrow" }).format(duration);
- [Polyfill of `Intl.DurationFormat` in FormatJS](https://formatjs.github.io/docs/polyfills/intl-durationformat/)
- {{jsxref("Intl")}}
+- {{jsxref("Temporal/Duration/toLocaleString", "Temporal.Duration.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/intl/index.md b/files/en-us/web/javascript/reference/global_objects/intl/index.md
index c7647ce3fdbebcc..711bfb82ceffff2 100644
--- a/files/en-us/web/javascript/reference/global_objects/intl/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/intl/index.md
@@ -151,11 +151,6 @@ const formattedCount = new Intl.NumberFormat(navigator.languages).format(count);
## See also
-- {{jsxref("String.prototype.localeCompare()")}}
-- {{jsxref("Number.prototype.toLocaleString()")}}
-- {{jsxref("Date.prototype.toLocaleString()")}}
-- {{jsxref("Date.prototype.toLocaleDateString()")}}
-- {{jsxref("Date.prototype.toLocaleTimeString()")}}
- {{domxref("Keyboard.getLayoutMap()")}}
- {{domxref("navigator.language")}}
- {{domxref("navigator.languages")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/intl/locale/getcalendars/index.md b/files/en-us/web/javascript/reference/global_objects/intl/locale/getcalendars/index.md
index ae017560db3f82c..6dd3496a44424cf 100644
--- a/files/en-us/web/javascript/reference/global_objects/intl/locale/getcalendars/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/intl/locale/getcalendars/index.md
@@ -65,7 +65,7 @@ Below is a list of the supported calendar era types.
- `persian`
- : Persian calendar
- `roc`
- - : Civil (algorithmic) Arabic calendar
+ - : Republic of China (Minguo) calendar
- `islamicc`
- : Civil (algorithmic) Arabic calendar
> [!WARNING]
diff --git a/files/en-us/web/javascript/reference/global_objects/intl/locale/gettimezones/index.md b/files/en-us/web/javascript/reference/global_objects/intl/locale/gettimezones/index.md
index 9fb96f25a7d5de4..cf4bc871bf88bbb 100644
--- a/files/en-us/web/javascript/reference/global_objects/intl/locale/gettimezones/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/intl/locale/gettimezones/index.md
@@ -24,18 +24,10 @@ None.
### Return value
-An array of strings representing supported time zones for the associated `Locale`, where each value is an [IANA time zone canonical name](https://en.wikipedia.org/wiki/Daylight_saving_time#IANA_time_zone_database), sorted in alphabetical order. If the locale identifier does not contain a region subtag, the returned value is `undefined`.
+An array of strings representing supported time zones for the associated `Locale`, where each value is an [IANA time zone canonical name](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets), sorted in alphabetical order. If the locale identifier does not contain a region subtag, the returned value is `undefined`.
-Note that while the IANA database changes from time to time, [the Unicode CLDR database (which browsers use) keeps old time zone names for stability purposes](https://unicode.org/reports/tr35/#Time_Zone_Identifiers). For example, here are a few notable name changes:
-
-| Current IANA name | CLDR database |
-| -------------------------------- | ---------------------- |
-| `America/Argentina/Buenos_Aires` | `America/Buenos_Aires` |
-| `Asia/Kolkata` | `Asia/Calcutta` |
-| `Asia/Ho_Chi_Minh` | `Asia/Saigon` |
-| `Europe/Kyiv` | `Europe/Kiev` |
-
-Some browsers (Firefox) override these legacy names, while others don't (Safari and Chrome). For more information, check the [CLDR database](https://github.com/unicode-org/cldr-json/blob/main/cldr-json/cldr-bcp47/bcp47/timezone.json). (IANA names are marked with `"_iana"`, if different.) There is [an effort in TC39 to properly handle these canonical identifiers](https://github.com/tc39/proposal-canonical-tz), which also contains links to related CLDR issues.
+> [!NOTE]
+> The standardization of `Temporal` requires browsers to always return the primary identifier in the IANA database, which may change over time. See [time zones and offsets](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets) for more information.
## Examples
diff --git a/files/en-us/web/javascript/reference/global_objects/intl/numberformat/index.md b/files/en-us/web/javascript/reference/global_objects/intl/numberformat/index.md
index 7fec244a3dcb401..e420ecfc8c94091 100644
--- a/files/en-us/web/javascript/reference/global_objects/intl/numberformat/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/intl/numberformat/index.md
@@ -149,3 +149,4 @@ For an exhaustive list of options, see the [`Intl.NumberFormat()` constructor](/
- [Polyfill of `Intl.NumberFormat` in FormatJS](https://formatjs.github.io/docs/polyfills/intl-numberformat/)
- {{jsxref("Intl")}}
+- {{jsxref("Number.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/intl/supportedvaluesof/index.md b/files/en-us/web/javascript/reference/global_objects/intl/supportedvaluesof/index.md
index ce779a1647bdb88..57920c0f4d51361 100644
--- a/files/en-us/web/javascript/reference/global_objects/intl/supportedvaluesof/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/intl/supportedvaluesof/index.md
@@ -32,7 +32,7 @@ Intl.supportedValuesOf(key)
A sorted array of unique string values indicating the values supported by the implementation for the given key.
> [!NOTE]
-> While the IANA database changes from time to time, the Unicode CLDR database (which browsers use) keeps old time zone names for stability purposes. Some browsers may use the legacy name, while others override it with the new name. See {{jsxref("Intl/Locale/getTimeZones", "Intl.Locale.prototype.getTimeZones")}} for more information.
+> The standardization of `Temporal` requires browsers to always return the primary identifier in the IANA database, which may change over time. See [time zones and offsets](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets) for more information.
### Exceptions
diff --git a/files/en-us/web/javascript/reference/global_objects/json/index.md b/files/en-us/web/javascript/reference/global_objects/json/index.md
index c451bfb42e1d7b2..cacf30da78a9662 100644
--- a/files/en-us/web/javascript/reference/global_objects/json/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/json/index.md
@@ -240,7 +240,6 @@ const parsedData = JSON.parse(str, (key, value, context) => {
## See also
-- {{jsxref("Date.prototype.toJSON()")}}
- [JSON Diff](https://json-diff.com/)
- [JSON Beautifier/editor](https://jsonbeautifier.org/)
- [JSON Parser](https://jsonparser.org/)
diff --git a/files/en-us/web/javascript/reference/global_objects/json/stringify/index.md b/files/en-us/web/javascript/reference/global_objects/json/stringify/index.md
index 638398fac11c1c8..5bb4cd969ee87b7 100644
--- a/files/en-us/web/javascript/reference/global_objects/json/stringify/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/json/stringify/index.md
@@ -66,7 +66,7 @@ A JSON string representing the given value, or undefined.
- if it is in an array, the index in the array, as a string
- if `JSON.stringify()` was directly called on this object, an empty string
- {{jsxref("Date")}} objects implement the [`toJSON()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON) method which returns a string (the same as [`date.toISOString()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)). Thus, they will be stringified as strings.
+ All {{jsxref("Temporal")}} objects implement the `toJSON()` method, which returns a string (the same as calling `toString()`). Thus, they will be serialized as strings. Similarly, {{jsxref("Date")}} objects implement `toJSON()`, which returns the same as [`toISOString()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString).
- Only [enumerable own properties](/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties) are visited. This means {{jsxref("Map")}}, {{jsxref("Set")}}, etc. will become `"{}"`. You can use the [`replacer`](#the_replacer_parameter) parameter to serialize them to something more useful.
diff --git a/files/en-us/web/javascript/reference/global_objects/number/tolocalestring/index.md b/files/en-us/web/javascript/reference/global_objects/number/tolocalestring/index.md
index c58ae50259850eb..44afe9a57fb825f 100644
--- a/files/en-us/web/javascript/reference/global_objects/number/tolocalestring/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/number/tolocalestring/index.md
@@ -7,7 +7,7 @@ browser-compat: javascript.builtins.Number.toLocaleString
{{JSRef}}
-The **`toLocaleString()`** method of {{jsxref("Number")}} values returns a string with a language-sensitive representation of this number. In implementations with [`Intl.NumberFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat) support, this method simply calls `Intl.NumberFormat`.
+The **`toLocaleString()`** method of {{jsxref("Number")}} values returns a string with a language-sensitive representation of this number. In implementations with [`Intl.NumberFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat) support, this method delegates to `Intl.NumberFormat`.
Every time `toLocaleString` is called, it has to perform a search in a big database of localization strings, which is potentially inefficient. When the method is called many times with the same arguments, it is better to create a {{jsxref("Intl.NumberFormat")}} object and use its {{jsxref("Intl/NumberFormat/format", "format()")}} method, because a `NumberFormat` object remembers the arguments passed to it and may decide to cache a slice of the database, so future `format` calls can search for localization strings within a more constrained context.
diff --git a/files/en-us/web/javascript/reference/global_objects/object/tolocalestring/index.md b/files/en-us/web/javascript/reference/global_objects/object/tolocalestring/index.md
index f2a1304fd74ae4a..fdb18ba9d1fcb08 100644
--- a/files/en-us/web/javascript/reference/global_objects/object/tolocalestring/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/object/tolocalestring/index.md
@@ -19,7 +19,7 @@ toLocaleString()
### Parameters
-None. However, all objects that override this method are expected to accept at most two parameters, corresponding to `locales` and `options`, such as {{jsxref("Date.prototype.toLocaleString")}}. The parameter positions should not be used for any other purpose.
+None. However, all objects that override this method are expected to accept at most two parameters, corresponding to `locales` and `options`, such as {{jsxref("Number.prototype.toLocaleString")}}. The parameter positions should not be used for any other purpose.
### Return value
diff --git a/files/en-us/web/javascript/reference/global_objects/string/localecompare/index.md b/files/en-us/web/javascript/reference/global_objects/string/localecompare/index.md
index 645db602eaebe59..27b77169bb6e526 100644
--- a/files/en-us/web/javascript/reference/global_objects/string/localecompare/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/string/localecompare/index.md
@@ -7,7 +7,7 @@ browser-compat: javascript.builtins.String.localeCompare
{{JSRef}}
-The **`localeCompare()`** method of {{jsxref("String")}} values returns a number indicating whether this string comes before, or after, or is the same as the given string in sort order. In implementations with [`Intl.Collator` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Collator) support, this method simply calls `Intl.Collator`.
+The **`localeCompare()`** method of {{jsxref("String")}} values returns a number indicating whether this string comes before, or after, or is the same as the given string in sort order. In implementations with [`Intl.Collator` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Collator) support, this method delegates to `Intl.Collator`.
When comparing large numbers of strings, such as in sorting large arrays, it is better to create an {{jsxref("Intl.Collator")}} object and use the function provided by its {{jsxref("Intl/Collator/compare", "compare()")}} method.
diff --git a/files/en-us/web/javascript/reference/global_objects/string/match/index.md b/files/en-us/web/javascript/reference/global_objects/string/match/index.md
index 64cf5ee76bf8f95..05b6831017bcdc8 100644
--- a/files/en-us/web/javascript/reference/global_objects/string/match/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/string/match/index.md
@@ -163,6 +163,7 @@ console.log("123".match("1\\.3")); // null
## See also
- [Polyfill of `String.prototype.match` in `core-js` with fixes and implementation of modern behavior like `Symbol.match` support](https://github.com/zloirock/core-js#ecmascript-string-and-regexp)
+- [Regular expressions](/en-US/docs/Web/JavaScript/Guide/Regular_expressions) guide
- {{jsxref("String.prototype.matchAll()")}}
- {{jsxref("RegExp")}}
- {{jsxref("RegExp.prototype.exec()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/string/matchall/index.md b/files/en-us/web/javascript/reference/global_objects/string/matchall/index.md
index fded89dbb16971b..47f16070a5d0916 100644
--- a/files/en-us/web/javascript/reference/global_objects/string/matchall/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/string/matchall/index.md
@@ -153,9 +153,9 @@ str.matchAll({
## See also
- [Polyfill of `String.prototype.matchAll` in `core-js`](https://github.com/zloirock/core-js#ecmascript-string-and-regexp)
-- {{jsxref("String.prototype.match()")}}
- [Regular expressions](/en-US/docs/Web/JavaScript/Guide/Regular_expressions) guide
- [Groups and backreferences](/en-US/docs/Web/JavaScript/Guide/Regular_expressions/Groups_and_backreferences) guide
+- {{jsxref("String.prototype.match()")}}
- {{jsxref("RegExp")}}
- {{jsxref("RegExp.prototype.exec()")}}
- {{jsxref("RegExp.prototype.test()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/string/replace/index.md b/files/en-us/web/javascript/reference/global_objects/string/replace/index.md
index 779abb4e4d228ef..3561a4429de9132 100644
--- a/files/en-us/web/javascript/reference/global_objects/string/replace/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/string/replace/index.md
@@ -248,6 +248,7 @@ console.log("abcd".replace(/(?bc)/, addOffset)); // "abc (1) d"
## See also
- [Polyfill of `String.prototype.replace` in `core-js` with fixes and implementation of modern behavior like `Symbol.replace` support](https://github.com/zloirock/core-js#ecmascript-string-and-regexp)
+- [Regular expressions](/en-US/docs/Web/JavaScript/Guide/Regular_expressions) guide
- {{jsxref("String.prototype.replaceAll()")}}
- {{jsxref("String.prototype.match()")}}
- {{jsxref("RegExp.prototype.exec()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/string/replaceall/index.md b/files/en-us/web/javascript/reference/global_objects/string/replaceall/index.md
index 4b9aa7795b4e49e..321bbb326ebfc11 100644
--- a/files/en-us/web/javascript/reference/global_objects/string/replaceall/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/string/replaceall/index.md
@@ -104,6 +104,7 @@ This will work:
## See also
- [Polyfill of `String.prototype.replaceAll` in `core-js`](https://github.com/zloirock/core-js#ecmascript-string-and-regexp)
+- [Regular expressions](/en-US/docs/Web/JavaScript/Guide/Regular_expressions) guide
- {{jsxref("String.prototype.replace()")}}
- {{jsxref("String.prototype.match()")}}
- {{jsxref("RegExp.prototype.exec()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/string/split/index.md b/files/en-us/web/javascript/reference/global_objects/string/split/index.md
index 75991dc636d9018..8761f95edbcd4cc 100644
--- a/files/en-us/web/javascript/reference/global_objects/string/split/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/string/split/index.md
@@ -292,8 +292,8 @@ console.log(commands.split(splitCommands, 3)); // ["light on", "brightness up",
## See also
- [Polyfill of `String.prototype.split` in `core-js` with fixes and implementation of modern behavior like `Symbol.split` support](https://github.com/zloirock/core-js#ecmascript-string-and-regexp)
+- [Regular expressions](/en-US/docs/Web/JavaScript/Guide/Regular_expressions) guide
- {{jsxref("String.prototype.charAt()")}}
- {{jsxref("String.prototype.indexOf()")}}
- {{jsxref("String.prototype.lastIndexOf()")}}
- {{jsxref("Array.prototype.join()")}}
-- [Regular expressions](/en-US/docs/Web/JavaScript/Guide/Regular_expressions) guide
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/abs/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/abs/index.md
new file mode 100644
index 000000000000000..7cb9b859710c417
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/abs/index.md
@@ -0,0 +1,50 @@
+---
+title: Temporal.Duration.prototype.abs()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/abs
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.Duration.abs
+---
+
+{{JSRef}}
+
+The **`abs()`** method of {{jsxref("Temporal.Duration")}} instances returns a new `Temporal.Duration` object with the absolute value of this duration (all fields have the same magnitude, but sign becomes positive).
+
+## Syntax
+
+```js-nolint
+abs()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A new `Temporal.Duration` object with the absolute value of this duration, which is either the same as this duration if it is already positive, or its [negation](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/negated) if it is negative.
+
+## Examples
+
+### Using abs()
+
+```js
+const d1 = Temporal.Duration.from({ hours: 1, minutes: 30 });
+const d2 = Temporal.Duration.from({ hours: -1, minutes: -30 });
+
+console.log(d1.abs().toString()); // "PT1H30M"
+console.log(d2.abs().toString()); // "PT1H30M"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/negated", "Temporal.Duration.prototype.negated()")}}
+- {{jsxref("Temporal/Duration/sign", "Temporal.Duration.prototype.sign")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/add/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/add/index.md
new file mode 100644
index 000000000000000..602672a1f90d7cd
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/add/index.md
@@ -0,0 +1,78 @@
+---
+title: Temporal.Duration.prototype.add()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/add
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.Duration.add
+---
+
+{{JSRef}}
+
+The **`add()`** method of {{jsxref("Temporal.Duration")}} instances returns a new `Temporal.Duration` object with the sum of this duration and a given duration. The result is [balanced](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#duration_balancing).
+
+## Syntax
+
+```js-nolint
+add(other)
+```
+
+### Parameters
+
+- `other`
+ - : A string, an object, or a {{jsxref("Temporal.Duration")}} instance representing a duration to add to this duration. It is converted to a `Temporal.Duration` object using the same algorithm as {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}.
+
+### Return value
+
+A new `Temporal.Duration` object representing the sum of this duration and `other`.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - Either `this` or `other` is a [calendar duration](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#calendar_durations) (it has a non-zero `years`, `months`, or `weeks`), because calendar durations are ambiguous without a calendar and time reference.
+ - The sum of `this` and `other` overflows the maximum or underflows the minimum representable duration, which is ±253 seconds.
+
+## Description
+
+Non-calendar durations unambiguously represent a fixed amount of time. Internally, `this` and `other` are both converted to nanoseconds (assuming 24-hour days) and added together. The result is then converted back to a `Temporal.Duration` object, so the result is always [balanced](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#duration_balancing) with the largest possible unit being `days`.
+
+If you want to perform addition or subtraction with a calendar duration, you can add both durations to a starting point and then figure out the difference between the two resulting instants; that is, `dur1 + dur2` is equivalent to `(start + dur1 + dur2) - start`.
+
+To add a duration to a date or time, use the `add()` method of the date or time object instead.
+
+## Examples
+
+### Using add()
+
+```js
+const d1 = Temporal.Duration.from({ hours: 1, minutes: 30 });
+const d2 = Temporal.Duration.from({ hours: -1, minutes: -20 });
+
+const d3 = d1.add(d2);
+console.log(d3.toString()); // "PT10M"
+```
+
+### Adding calendar durations
+
+```js
+const d1 = Temporal.Duration.from({ days: 1 });
+const d2 = Temporal.Duration.from({ months: 1 });
+
+d1.add(d2); // RangeError: can't compare durations when "relativeTo" is undefined
+
+const start = Temporal.PlainDateTime.from("2022-01-01T00:00"); // ISO 8601 calendar
+const result = start.add(d1).add(d2).since(start);
+console.log(result.toString()); // "P32D"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/subtract", "Temporal.Duration.prototype.subtract()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/blank/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/blank/index.md
new file mode 100644
index 000000000000000..3c3c59228af7164
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/blank/index.md
@@ -0,0 +1,37 @@
+---
+title: Temporal.Duration.prototype.blank
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/blank
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.Duration.blank
+---
+
+{{JSRef}}
+
+The **`blank`** accessor property of {{jsxref("Temporal.Duration")}} instances returns a boolean that is `true` if this duration represents a zero duration, and `false` otherwise. It is equivalent to `duration.sign === 0`.
+
+## Examples
+
+### Using blank
+
+```js
+const d1 = Temporal.Duration.from({ hours: 1, minutes: 30 });
+const d2 = Temporal.Duration.from({ hours: -1, minutes: -30 });
+const d3 = Temporal.Duration.from({ hours: 0 });
+
+console.log(d1.blank); // false
+console.log(d2.blank); // false
+console.log(d3.blank); // true
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/sign", "Temporal.Duration.prototype.sign")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/compare/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/compare/index.md
new file mode 100644
index 000000000000000..ee905290256abef
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/compare/index.md
@@ -0,0 +1,135 @@
+---
+title: Temporal.Duration.compare()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/compare
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.Duration.compare
+---
+
+{{JSRef}}
+
+The **`Temporal.Duration.compare()`** static method returns a number (-1, 0, or 1) indicating whether the first duration is shorter, equal to, or longer than the second duration.
+
+## Syntax
+
+```js-nolint
+Temporal.Duration.compare(duration1, duration2)
+Temporal.Duration.compare(duration1, duration2, options)
+```
+
+### Parameters
+
+- `duration1`
+ - : A string, an object, or a {{jsxref("Temporal.Duration")}} instance representing the first duration to compare. It is converted to a `Temporal.Duration` object using the same algorithm as {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}.
+- `duration2`
+ - : The second duration to compare, converted to a `Temporal.Duration` object using the same algorithm as `duration1`.
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `relativeTo` {{optional_inline}}
+ - : A zoned or plain date(time) that provides the time and calendar information to resolve [calendar durations](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#calendar_durations) (see the link for the general interpretation of this option). Required if either `duration1` or `duration2` is a calendar duration (unless they are equal component-wise, in which case `0` is returned without computations).
+
+### Return value
+
+Returns `-1` if `duration1` is shorter than `duration2`, `0` if they are equal, and `1` if `duration1` is longer.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if either `duration1` or `duration2` is a [calendar duration](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#calendar_durations) (it has a non-zero `years`, `months`, or `weeks`), and `relativeTo` is not provided.
+
+## Description
+
+If `relativeTo` is a zoned date-time, and either `duration1` or `duration2` is a calendar duration, the result is calculated by adding the durations to the starting point, and then comparing the resulting instants. Otherwise, the comparison is done by converting both of them to nanoseconds (assuming 24-hour days, and using the calendar of `relativeTo` if necessary) and comparing the results.
+
+## Examples
+
+### Using Temporal.Duration.compare()
+
+```js
+const d1 = Temporal.Duration.from({ hours: 1, minutes: 30 });
+const d2 = Temporal.Duration.from({ minutes: 100 });
+console.log(Temporal.Duration.compare(d1, d2)); // -1
+
+const d3 = Temporal.Duration.from({ hours: 2 });
+const d4 = Temporal.Duration.from({ minutes: 110 });
+console.log(Temporal.Duration.compare(d3, d4)); // 1
+
+const d5 = Temporal.Duration.from({ hours: 1, minutes: 30 });
+const d6 = Temporal.Duration.from({ seconds: 5400 });
+console.log(Temporal.Duration.compare(d5, d6)); // 0
+```
+
+### Comparing calendar durations
+
+```js
+const d1 = Temporal.Duration.from({ days: 31 });
+const d2 = Temporal.Duration.from({ months: 1 });
+
+console.log(
+ Temporal.Duration.compare(d1, d2, {
+ relativeTo: Temporal.PlainDate.from("2021-01-01"), // ISO 8601 calendar
+ }),
+); // 0
+
+console.log(
+ Temporal.Duration.compare(d1, d2, {
+ relativeTo: Temporal.PlainDate.from("2021-02-01"), // ISO 8601 calendar
+ }),
+); // 1; February has 28 days
+```
+
+### Using zoned relativeTo
+
+Using a zoned `relativeTo`, you can even take into account daylight saving time changes. On `2024-11-03`, the US shifts from daylight saving time to standard time, so that day has 25 hours because the clock is set back by 1 hour.
+
+```js
+const d1 = Temporal.Duration.from({ days: 1 });
+const d2 = Temporal.Duration.from({ hours: 24 });
+
+console.log(
+ Temporal.Duration.compare(d1, d2, {
+ relativeTo: Temporal.ZonedDateTime.from(
+ "2024-11-03T01:00-04:00[America/New_York]",
+ ),
+ }),
+); // 1
+```
+
+### Sorting an array of durations
+
+The purpose of this `compare()` function is to act as a comparator to be passed to {{jsxref("Array.prototype.sort()")}} and related functions.
+
+```js
+const durations = [
+ Temporal.Duration.from({ hours: 1 }),
+ Temporal.Duration.from({ hours: 2 }),
+ Temporal.Duration.from({ hours: 1, minutes: 30 }),
+ Temporal.Duration.from({ hours: 1, minutes: 45 }),
+];
+
+durations.sort(Temporal.Duration.compare);
+console.log(durations.map((d) => d.toString()));
+// [ 'PT1H', 'PT1H30M', 'PT1H45M', 'PT2H' ]
+```
+
+Pass options like this:
+
+```js
+durations.sort((a, b) =>
+ Temporal.Duration.compare(a, b, {
+ relativeTo: Temporal.Now.zonedDateTimeISO(),
+ }),
+);
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/subtract", "Temporal.Duration.prototype.subtract()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/days/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/days/index.md
new file mode 100644
index 000000000000000..d479cbd45da1c57
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/days/index.md
@@ -0,0 +1,59 @@
+---
+title: Temporal.Duration.prototype.days
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/days
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.Duration.days
+---
+
+{{JSRef}}
+
+The **`days`** accessor property of {{jsxref("Temporal.Duration")}} instances returns an integer representing the number of days in the duration.
+
+Unless the duration is [balanced](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#duration_balancing), you cannot assume the range of this value, but you can know its sign by checking the duration's [`sign`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/sign) property. If it is balanced to a unit above days, the `days` absolute value's range depends on the calendar (how many days are in a week or month).
+
+The set accessor of `days` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/Duration/with", "with()")}} method to create a new `Temporal.Duration` object with the desired new value.
+
+## Examples
+
+### Using days
+
+```js
+const d1 = Temporal.Duration.from({ weeks: 1, days: 1 });
+const d2 = Temporal.Duration.from({ weeks: -1, days: -1 });
+const d3 = Temporal.Duration.from({ weeks: 1 });
+const d4 = Temporal.Duration.from({ days: 7 });
+
+console.log(d1.days); // 1
+console.log(d2.days); // -1
+console.log(d3.days); // 0
+console.log(d4.days); // 7
+
+// Balance d4
+const d4Balanced = d4.round({
+ largestUnit: "week",
+ relativeTo: Temporal.PlainDate.from("2021-01-01"), // ISO 8601 calendar
+});
+console.log(d4Balanced.days); // 0
+console.log(d4Balanced.weeks); // 1
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/years", "Temporal.Duration.prototype.years")}}
+- {{jsxref("Temporal/Duration/months", "Temporal.Duration.prototype.months")}}
+- {{jsxref("Temporal/Duration/weeks", "Temporal.Duration.prototype.weeks")}}
+- {{jsxref("Temporal/Duration/hours", "Temporal.Duration.prototype.hours")}}
+- {{jsxref("Temporal/Duration/minutes", "Temporal.Duration.prototype.minutes")}}
+- {{jsxref("Temporal/Duration/seconds", "Temporal.Duration.prototype.seconds")}}
+- {{jsxref("Temporal/Duration/milliseconds", "Temporal.Duration.prototype.milliseconds")}}
+- {{jsxref("Temporal/Duration/microseconds", "Temporal.Duration.prototype.microseconds")}}
+- {{jsxref("Temporal/Duration/nanoseconds", "Temporal.Duration.prototype.nanoseconds")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/duration/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/duration/index.md
new file mode 100644
index 000000000000000..14ea602634fc0df
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/duration/index.md
@@ -0,0 +1,87 @@
+---
+title: Temporal.Duration()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/Duration
+page-type: javascript-constructor
+browser-compat: javascript.builtins.Temporal.Duration.Duration
+---
+
+{{JSRef}}
+
+The **`Temporal.Duration()`** constructor creates {{jsxref("Temporal.Duration")}} objects.
+
+This constructor allows you to create instances by directly supplying the underlying data. Like all other `Temporal` classes, you should usually construct `Temporal.Duration` objects using the {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}} static method, which can handle a variety of input types.
+
+## Syntax
+
+```js-nolint
+new Temporal.Duration()
+new Temporal.Duration(years)
+new Temporal.Duration(years, months)
+new Temporal.Duration(years, months, weeks)
+new Temporal.Duration(years, months, weeks, days)
+new Temporal.Duration(years, months, weeks, days, hours)
+new Temporal.Duration(years, months, weeks, days, hours, minutes)
+new Temporal.Duration(years, months, weeks, days, hours, minutes, seconds)
+new Temporal.Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds)
+new Temporal.Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds)
+new Temporal.Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds)
+```
+
+> **Note:** `Temporal.Duration()` can only be constructed with [`new`](/en-US/docs/Web/JavaScript/Reference/Operators/new). Attempting to call it without `new` throws a {{jsxref("TypeError")}}.
+
+### Parameters
+
+- `years` {{optional_inline}}
+ - : Number of years, or `undefined` (which is treated as `0`).
+- `months` {{optional_inline}}
+ - : Number of months, or `undefined` (which is treated as `0`).
+- `weeks` {{optional_inline}}
+ - : Number of weeks, or `undefined` (which is treated as `0`).
+- `days` {{optional_inline}}
+ - : Number of days, or `undefined` (which is treated as `0`).
+- `hours` {{optional_inline}}
+ - : Number of hours, or `undefined` (which is treated as `0`).
+- `minutes` {{optional_inline}}
+ - : Number of minutes, or `undefined` (which is treated as `0`).
+- `seconds` {{optional_inline}}
+ - : Number of seconds, or `undefined` (which is treated as `0`).
+- `milliseconds` {{optional_inline}}
+ - : Number of milliseconds, or `undefined` (which is treated as `0`).
+- `microseconds` {{optional_inline}}
+ - : Number of microseconds, or `undefined` (which is treated as `0`).
+- `nanoseconds` {{optional_inline}}
+ - : Number of nanoseconds, or `undefined` (which is treated as `0`).
+
+### Return value
+
+A new `Temporal.Duration` object, possibly [unbalanced](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#duration_balancing), with the specified components.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - Any of the parameters is not an integer (including non-finite values).
+ - A [calendar unit](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#calendar_durations) (years, months, weeks) has an absolute value ≥ 232 .
+ - The non-calendar part of the duration (days and below), when expressed in seconds, has an absolute value ≥ 253 .
+
+## Examples
+
+### Using Temporal.Duration()
+
+```js
+const d = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
+console.log(d.toString()); // "P1Y2M3W4DT5H6M7.00800901S"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/from/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/from/index.md
new file mode 100644
index 000000000000000..e62daecb1d74ffb
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/from/index.md
@@ -0,0 +1,107 @@
+---
+title: Temporal.Duration.from()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/from
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.Duration.from
+---
+
+{{JSRef}}
+
+The **`Temporal.Duration.from()`** static method creates a new `Temporal.Duration` object from another `Temporal.Duration` object, an object with duration properties, or an ISO 8601 string.
+
+## Syntax
+
+```js-nolint
+Temporal.Duration.from(info)
+```
+
+### Parameters
+
+- `info`
+
+ - : One of the following:
+
+ - A {{jsxref("Temporal.Duration")}} instance, which creates a copy of the instance.
+ - An [ISO 8601](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#iso_8601_duration_format) string representing a duration.
+ - An object containing at least one of the following properties (in the order they are retrieved and validated):
+
+ - {{jsxref("Temporal/Duration/days", "days")}}
+ - {{jsxref("Temporal/Duration/hours", "hours")}}
+ - {{jsxref("Temporal/Duration/microseconds", "microseconds")}}
+ - {{jsxref("Temporal/Duration/milliseconds", "milliseconds")}}
+ - {{jsxref("Temporal/Duration/minutes", "minutes")}}
+ - {{jsxref("Temporal/Duration/months", "months")}}
+ - {{jsxref("Temporal/Duration/nanoseconds", "nanoseconds")}}
+ - {{jsxref("Temporal/Duration/seconds", "seconds")}}
+ - {{jsxref("Temporal/Duration/weeks", "weeks")}}
+ - {{jsxref("Temporal/Duration/years", "years")}}
+
+ Each property should contain an integer number value. The resulting duration must not have [mixed signs](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#duration_sign), so all of these properties must have the same sign (or zero). Missing properties are treated as zero.
+
+### Return value
+
+A new `Temporal.Duration` object, possibly [unbalanced](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#duration_balancing), with the specified components.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - Any of the recognized properties in the `info` object is not an integer (including non-finite values).
+ - A [calendar unit](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#calendar_durations) (years, months, weeks) has an absolute value ≥ 232 .
+ - The non-calendar part of the duration (days and below), when expressed in seconds, has an absolute value ≥ 253 .
+- {{jsxref("TypeError")}}
+ - : Thrown in one of the following cases:
+ - `info` is not an object or a string.
+ - All of the recognized properties in the `info` object are `undefined`.
+
+## Examples
+
+### Creating a duration from an object
+
+```js
+const d1 = Temporal.Duration.from({ hours: 1, minutes: 30 });
+console.log(d1.toString()); // "PT1H30M"
+
+const d2 = Temporal.Duration.from({ months: 1, days: 2 });
+console.log(d2.toString()); // "P1M2D"
+
+// Uncommon because unbalanced, but valid
+const unbalanced = Temporal.Duration.from({
+ hours: 100,
+ minutes: 100,
+ seconds: 100,
+});
+console.log(unbalanced.toString()); // "PT100H100M100S"
+
+const neg = Temporal.Duration.from({ hours: -1, minutes: -30 });
+console.log(neg.toString()); // "-PT1H30M"
+```
+
+### Creating a duration from a string
+
+```js
+const d = Temporal.Duration.from("P1Y2M3W4DT5H6M7.00800901S");
+console.log(d.hours); // 5
+```
+
+### Creating a duration from another duration
+
+```js
+const d1 = Temporal.Duration.from({ hours: 1, minutes: 30 });
+const d2 = Temporal.Duration.from(d1);
+console.log(d2.toString()); // "PT1H30M"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/Duration", "Temporal.Duration()")}}
+- {{jsxref("Temporal/Duration/with", "Temporal.Duration.prototype.with()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/hours/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/hours/index.md
new file mode 100644
index 000000000000000..d81bd9a40023384
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/hours/index.md
@@ -0,0 +1,56 @@
+---
+title: Temporal.Duration.prototype.hours
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/hours
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.Duration.hours
+---
+
+{{JSRef}}
+
+The **`hours`** accessor property of {{jsxref("Temporal.Duration")}} instances returns an integer representing the number of hours in the duration.
+
+Unless the duration is [balanced](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#duration_balancing), you cannot assume the range of this value, but you can know its sign by checking the duration's [`sign`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/sign) property. If it is balanced to a unit above hours, the `hours` absolute value will be between 0 and 23, inclusive.
+
+The set accessor of `hours` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/Duration/with", "with()")}} method to create a new `Temporal.Duration` object with the desired new value.
+
+## Examples
+
+### Using hours
+
+```js
+const d1 = Temporal.Duration.from({ hours: 1, minutes: 30 });
+const d2 = Temporal.Duration.from({ hours: -1, minutes: -30 });
+const d3 = Temporal.Duration.from({ days: 1 });
+const d4 = Temporal.Duration.from({ hours: 24 });
+
+console.log(d1.hours); // 1
+console.log(d2.hours); // -1
+console.log(d3.hours); // 0
+console.log(d4.hours); // 24
+
+// Balance d4
+const d4Balanced = d4.round({ largestUnit: "day" });
+console.log(d4Balanced.hours); // 0
+console.log(d4Balanced.days); // 1
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/years", "Temporal.Duration.prototype.years")}}
+- {{jsxref("Temporal/Duration/months", "Temporal.Duration.prototype.months")}}
+- {{jsxref("Temporal/Duration/weeks", "Temporal.Duration.prototype.weeks")}}
+- {{jsxref("Temporal/Duration/days", "Temporal.Duration.prototype.days")}}
+- {{jsxref("Temporal/Duration/minutes", "Temporal.Duration.prototype.minutes")}}
+- {{jsxref("Temporal/Duration/seconds", "Temporal.Duration.prototype.seconds")}}
+- {{jsxref("Temporal/Duration/milliseconds", "Temporal.Duration.prototype.milliseconds")}}
+- {{jsxref("Temporal/Duration/microseconds", "Temporal.Duration.prototype.microseconds")}}
+- {{jsxref("Temporal/Duration/nanoseconds", "Temporal.Duration.prototype.nanoseconds")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/index.md
new file mode 100644
index 000000000000000..268e403ab82f5ba
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/index.md
@@ -0,0 +1,163 @@
+---
+title: Temporal.Duration
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration
+page-type: javascript-class
+browser-compat: javascript.builtins.Temporal.Duration
+---
+
+{{JSRef}}
+
+The **`Temporal.Duration`** object represents a difference between two time points, which can be used in date/time arithmetic. It is fundamentally represented as a combination of years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, and nanoseconds values.
+
+## Description
+
+### ISO 8601 duration format
+
+`Duration` objects can be serialized and parsed using the [ISO 8601 duration format](https://en.wikipedia.org/wiki/ISO_8601#Durations) (with some extensions specified by ECMAScript). The string has the following form (spaces are only for readability and should not be present in the actual string):
+
+```plain
+±P nY nM nW nD T nH nM nS
+```
+
+- `±` {{optional_inline}}
+ - : An optional sign character (`+` or `-`), which represents positive or negative duration. Default is positive.
+- `P`
+ - : A literal character `P` or `p` that stands for "period".
+- `nY`, `nM`, `nW`, `nD`, `nH`, `nM`, `nS`
+ - : A number followed by a literal character, which represents the number of years (`Y`), months (`M`), weeks (`W`), days (`D`), hours (`H`), minutes (`M`), or seconds (`S`), respectively. All except the last existing component must be an integer. The last component, if it is a time component (hours, minutes, or seconds), may have a fractional part of 1 to 9 digits, led by a dot or a comma, such as `PT0.0021S` or `PT1.1H`. Any zero components may be omitted, but at least one component should be present (even if it has value zero, in which case the duration is zero).
+- `T`
+ - : A literal character `T` or `t` that separates the date part from the time part, which should be present if and only if there's at least one component after it.
+
+Here are some examples:
+
+| ISO 8601 | Meaning |
+| ------------------ | ------------------------------------------------------------------------ |
+| `P1Y1M1DT1H1M1.1S` | 1 year, 1 month, 1 day, 1 hour, 1 minute, 1 second, and 100 milliseconds |
+| `P40D` | 40 days |
+| `P1Y1D` | 1 year and 1 day |
+| `P3DT4H59M` | 3 days, 4 hours and 59 minutes |
+| `PT2H30M` | 2 hours and 30 minutes |
+| `P1M` | 1 month |
+| `PT1M` | 1 minute |
+| `PT0.0021S` | 2.1 milliseconds (2 milliseconds and 100 microseconds) |
+| `PT0S` | Zero (canonical representation) |
+| `P0D` | Zero |
+
+> [!NOTE]
+> According to the ISO 8601-1 standard, weeks are not allowed to appear together with any other units, and durations can only be positive. As extensions to the standard, ISO 8601-2, which Temporal uses, allows a sign character at the start of the string, and allows combining weeks with other units. Therefore, if your duration is serialized to a string like `P3W1D`, `+P1M`, or `-P1M`, note that other programs may not accept it.
+
+When serializing, the output respects the stored components as much as possible, preserving [unbalanced](#duration_balancing) components. However, subsecond components are serialized as a single fractional second, so their precise values, if unbalanced may be lost. The plus sign is omitted for positive durations. The zero duration is always serialized as `PT0S`.
+
+### Calendar durations
+
+A _calendar duration_ is one that contains any of the [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars) units: weeks, months, and years. A non-calendar duration is portable and can participate in date/time arithmetic without any calendar information, because they unambiguously represent a fixed amount of time. However, a calendar duration is not portable because the number of days in a month or year depends on the calendar system and the reference time point. Therefore, attempting to perform any arithmetic operation on a calendar durations throws an error because durations don't keep track of a calendar themselves. For example, if we are in May of the Gregorian calendar, then "1 month" is "31 days", but if we are in April, then "1 month" becomes "30 days". To add or subtract calendar durations, you need to add them to dates instead:
+
+```js
+const dur1 = Temporal.Duration.from({ years: 1 });
+const dur2 = Temporal.Duration.from({ months: 1 });
+
+dur1.add(dur2); // RangeError: can't compare durations when "relativeTo" is undefined
+
+const startingPoint = Temporal.PlainDate.from("2021-01-01"); // ISO 8601 calendar
+startingPoint.add(dur1).add(dur2).since(startingPoint); // "P396D"
+```
+
+Other operations, including `round()`, `total()`, and `compare()`, take a `relativeTo` option to provide the necessary calendar and reference time information. This option can be a {{jsxref("Temporal.PlainDate")}}, {{jsxref("Temporal.PlainDateTime")}}, {{jsxref("Temporal.ZonedDateTime")}}, or otherwise an object or string that's convertible using {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}} (if the `timeZone` option is provided or the string contains time zone annotation) or {{jsxref("Temporal/PlainDateTime/from", "Temporal.PlainDateTime.from()")}}.
+
+Note that `days` to `hours` conversion is also technically ambiguous because the length of a day may vary due to offset changes, such as daylight saving time. You can provide a zoned `relativeTo` to account for these changes; otherwise 24-hour days are assumed.
+
+### Duration balancing
+
+There are many ways to represent the same duration: for example, "1 minute and 30 seconds" and "90 seconds" are equivalent. However, depending on the context, one representation may be more appropriate than the other. Therefore, generally, the `Duration` object preserves the input values as much as possible, so that when you format it, it will be displayed as you expect.
+
+Each component of a duration has its optimal range; hours should be from 0 to 23, minutes from 0 to 59, and so on. When a component overflows its optimal range, the excess may be "carried" into the next larger component. To carry over, we need to answer the question of "how many X are in a Y?", which is a complicated question for [calendar units](#calendar_durations), so in this case a calendar is needed. Also note that by default, `days` are directly carried into `months`; the weeks unit is only carried into if explicitly requested. If we carry as much as possible, the eventual result where all components are within their optimal range is called a "balanced" duration. Unbalanced durations usually come in the "top-heavy" form, where the largest unit is unbalanced (e.g., "27 hours and 30 minutes"); other forms, such as "23 hours and 270 minutes", are rarely seen.
+
+The {{jsxref("Temporal/Duration/round", "round()")}} method always balances the duration into the "top-heavy" form, up to the `largestUnit` option. With a manual `largestUnit` option that's large enough, you can fully balance the duration. Similarly, the {{jsxref("Temporal/Duration/add", "add()")}} and {{jsxref("Temporal/Duration/subtract", "subtract()")}} methods balance the result duration to the largest unit of the input durations.
+
+Note that because the ISO 8601 duration format represents subsecond components as one single fraction number, it is not possible to preserve unbalanced subsecond components during serialization using the default format. For example, "1000 milliseconds" is serialized as `"PT1S"`, and then deserialized as "1 second". If you need to preserve the subsecond components' magnitudes, you need to manually serialize it as a JSON object instead (because by default the {{jsxref("Temporal/Duration/toJSON", "toJSON()")}} method serializes the duration in the ISO 8601 format).
+
+### Duration sign
+
+Because a duration is a difference between two time points, it can be positive, negative, or zero. For example, if you are displaying event times in relative time, then negative durations may represent events in the past, and positive durations for the future. In our representation using a combination of time components, the sign is stored within each component: a negative duration always has all components negative (or zero), and a positive duration always has all components positive (or zero). Constructing a duration with components of mixed signs is invalid and will be rejected by the constructor or the {{jsxref("Temporal/Duration/with", "with()")}} method. The `add()` and `subtract()` methods will balance the result duration to avoid mixed signs.
+
+## Constructor
+
+- {{jsxref("Temporal/Duration/Duration", "Temporal.Duration()")}}
+ - : Creates a new `Temporal.Duration` object by directly supplying the underlying data.
+
+## Static methods
+
+- {{jsxref("Temporal/Duration/compare", "Temporal.Duration.compare()")}}
+ - : Returns a number (-1, 0, or 1) indicating whether the first duration is shorter, equal to, or longer than the second duration.
+- {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}
+ - : Creates a new `Temporal.Duration` object from another `Temporal.Duration` object, an object with duration properties, or an ISO 8601 string.
+
+## Instance properties
+
+These properties are defined on `Temporal.Duration.prototype` and shared by all `Temporal.Duration` instances.
+
+- {{jsxref("Temporal/Duration/blank", "Temporal.Duration.prototype.blank")}}
+ - : Returns a boolean that is `true` if this duration represents a zero duration, and `false` otherwise. Equivalent to `duration.sign === 0`.
+- {{jsxref("Object/constructor", "Temporal.Duration.prototype.constructor")}}
+ - : The constructor function that created the instance object. For `Temporal.Duration` instances, the initial value is the {{jsxref("Temporal/Duration/Duration", "Temporal.Duration()")}} constructor.
+- {{jsxref("Temporal/Duration/days", "Temporal.Duration.prototype.days")}}
+ - : Returns an integer representing the number of days in the duration.
+- {{jsxref("Temporal/Duration/hours", "Temporal.Duration.prototype.hours")}}
+ - : Returns an integer representing the number of hours in the duration.
+- {{jsxref("Temporal/Duration/microseconds", "Temporal.Duration.prototype.microseconds")}}
+ - : Returns an integer representing the number of microseconds in the duration.
+- {{jsxref("Temporal/Duration/milliseconds", "Temporal.Duration.prototype.milliseconds")}}
+ - : Returns an integer representing the number of milliseconds in the duration.
+- {{jsxref("Temporal/Duration/minutes", "Temporal.Duration.prototype.minutes")}}
+ - : Returns an integer representing the number of minutes in the duration.
+- {{jsxref("Temporal/Duration/months", "Temporal.Duration.prototype.months")}}
+ - : Returns an integer representing the number of months in the duration.
+- {{jsxref("Temporal/Duration/nanoseconds", "Temporal.Duration.prototype.nanoseconds")}}
+ - : Returns an integer representing the number of nanoseconds in the duration.
+- {{jsxref("Temporal/Duration/seconds", "Temporal.Duration.prototype.seconds")}}
+ - : Returns an integer representing the number of seconds in the duration.
+- {{jsxref("Temporal/Duration/sign", "Temporal.Duration.prototype.sign")}}
+ - : Returns `1` if this duration is positive, `-1` if negative, and `0` if zero.
+- {{jsxref("Temporal/Duration/weeks", "Temporal.Duration.prototype.weeks")}}
+ - : Returns an integer representing the number of weeks in the duration.
+- {{jsxref("Temporal/Duration/years", "Temporal.Duration.prototype.years")}}
+ - : Returns an integer representing the number of years in the duration.
+- `Temporal.Duration.prototype[Symbol.toStringTag]`
+ - : The initial value of the [`[Symbol.toStringTag]`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) property is the string `"Temporal.Duration"`. This property is used in {{jsxref("Object.prototype.toString()")}}.
+
+## Instance methods
+
+- {{jsxref("Temporal/Duration/abs", "Temporal.Duration.prototype.abs()")}}
+ - : Returns a new `Temporal.Duration` object with the absolute value of this duration (all fields keep the same magnitude, but sign becomes positive).
+- {{jsxref("Temporal/Duration/add", "Temporal.Duration.prototype.add()")}}
+ - : Returns a new `Temporal.Duration` object with the sum of this duration and a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}). The result is [balanced](#duration_balancing).
+- {{jsxref("Temporal/Duration/negated", "Temporal.Duration.prototype.negated()")}}
+ - : Returns a new `Temporal.Duration` object with the negated value of this duration (all fields keep the same magnitude, but sign becomes reversed).
+- {{jsxref("Temporal/Duration/round", "Temporal.Duration.prototype.round()")}}
+ - : Returns a new `Temporal.Duration` object with the duration rounded to the given smallest unit and/or [balanced](#duration_balancing) to the given largest unit.
+- {{jsxref("Temporal/Duration/subtract", "Temporal.Duration.prototype.subtract()")}}
+ - : Returns a new `Temporal.Duration` object with the difference between this duration and a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}). Equivalent to [adding](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/add) the [negated](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/negated) value of the other duration.
+- {{jsxref("Temporal/Duration/toJSON", "Temporal.Duration.prototype.toJSON()")}}
+ - : Returns a string representing this duration in the same [ISO 8601 format](#iso_8601_duration_format) as calling {{jsxref("Temporal/Duration/toString", "toString()")}}. Intended to be implicitly called by {{jsxref("JSON.stringify()")}}.
+- {{jsxref("Temporal/Duration/toLocaleString", "Temporal.Duration.prototype.toLocaleString()")}}
+ - : Returns a string with a language-sensitive representation of this duration. In implementations with [`Intl.DurationFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DurationFormat) support, this method delegates to `Intl.DurationFormat`.
+- {{jsxref("Temporal/Duration/toString", "Temporal.Duration.prototype.toString()")}}
+ - : Returns a string representing this duration in the [ISO 8601 format](#iso_8601_duration_format).
+- {{jsxref("Temporal/Duration/total", "Temporal.Duration.prototype.total()")}}
+ - : Returns a number representing the total duration in the given unit.
+- {{jsxref("Temporal/Duration/valueOf", "Temporal.Duration.prototype.valueOf()")}}
+ - : Throws a {{jsxref("TypeError")}}, which prevents `Temporal.Duration` instances from being [implicitly converted to primitives](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) when used in arithmetic or comparison operations.
+- {{jsxref("Temporal/Duration/with", "Temporal.Duration.prototype.with()")}}
+ - : Returns a new `Temporal.Duration` object representing this duration with some fields replaced by new values.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/microseconds/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/microseconds/index.md
new file mode 100644
index 000000000000000..8b896cdb8bdfd09
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/microseconds/index.md
@@ -0,0 +1,56 @@
+---
+title: Temporal.Duration.prototype.microseconds
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/microseconds
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.Duration.microseconds
+---
+
+{{JSRef}}
+
+The **`microseconds`** accessor property of {{jsxref("Temporal.Duration")}} instances returns an integer representing the number of microseconds in the duration.
+
+Unless the duration is [balanced](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#duration_balancing), you cannot assume the range of this value, but you can know its sign by checking the duration's [`sign`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/sign) property. If it is balanced to a unit above microseconds, the `microseconds` absolute value will be between 0 and 999, inclusive.
+
+The set accessor of `microseconds` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/Duration/with", "with()")}} method to create a new `Temporal.Duration` object with the desired new value.
+
+## Examples
+
+### Using microseconds
+
+```js
+const d1 = Temporal.Duration.from({ milliseconds: 1, microseconds: 500 });
+const d2 = Temporal.Duration.from({ milliseconds: -1, microseconds: -500 });
+const d3 = Temporal.Duration.from({ milliseconds: 1 });
+const d4 = Temporal.Duration.from({ microseconds: 1000 });
+
+console.log(d1.microseconds); // 500
+console.log(d2.microseconds); // -500
+console.log(d3.microseconds); // 0
+console.log(d4.microseconds); // 1000
+
+// Balance d4
+const d4Balanced = d4.round({ largestUnit: "millisecond" });
+console.log(d4Balanced.microseconds); // 0
+console.log(d4Balanced.milliseconds); // 1
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/years", "Temporal.Duration.prototype.years")}}
+- {{jsxref("Temporal/Duration/months", "Temporal.Duration.prototype.months")}}
+- {{jsxref("Temporal/Duration/weeks", "Temporal.Duration.prototype.weeks")}}
+- {{jsxref("Temporal/Duration/days", "Temporal.Duration.prototype.days")}}
+- {{jsxref("Temporal/Duration/hours", "Temporal.Duration.prototype.hours")}}
+- {{jsxref("Temporal/Duration/minutes", "Temporal.Duration.prototype.minutes")}}
+- {{jsxref("Temporal/Duration/seconds", "Temporal.Duration.prototype.seconds")}}
+- {{jsxref("Temporal/Duration/milliseconds", "Temporal.Duration.prototype.milliseconds")}}
+- {{jsxref("Temporal/Duration/nanoseconds", "Temporal.Duration.prototype.nanoseconds")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/milliseconds/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/milliseconds/index.md
new file mode 100644
index 000000000000000..51f6da7e0d1a395
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/milliseconds/index.md
@@ -0,0 +1,56 @@
+---
+title: Temporal.Duration.prototype.milliseconds
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/milliseconds
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.Duration.milliseconds
+---
+
+{{JSRef}}
+
+The **`milliseconds`** accessor property of {{jsxref("Temporal.Duration")}} instances returns an integer representing the number of milliseconds in the duration.
+
+Unless the duration is [balanced](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#duration_balancing), you cannot assume the range of this value, but you can know its sign by checking the duration's [`sign`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/sign) property. If it is balanced to a unit above milliseconds, the `milliseconds` absolute value will be between 0 and 999, inclusive.
+
+The set accessor of `milliseconds` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/Duration/with", "with()")}} method to create a new `Temporal.Duration` object with the desired new value.
+
+## Examples
+
+### Using milliseconds
+
+```js
+const d1 = Temporal.Duration.from({ seconds: 1, milliseconds: 500 });
+const d2 = Temporal.Duration.from({ seconds: -1, milliseconds: -500 });
+const d3 = Temporal.Duration.from({ seconds: 1 });
+const d4 = Temporal.Duration.from({ milliseconds: 1000 });
+
+console.log(d1.milliseconds); // 500
+console.log(d2.milliseconds); // -500
+console.log(d3.milliseconds); // 0
+console.log(d4.milliseconds); // 1000
+
+// Balance d4
+const d4Balanced = d4.round({ largestUnit: "second" });
+console.log(d4Balanced.milliseconds); // 0
+console.log(d4Balanced.seconds); // 1
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/years", "Temporal.Duration.prototype.years")}}
+- {{jsxref("Temporal/Duration/months", "Temporal.Duration.prototype.months")}}
+- {{jsxref("Temporal/Duration/weeks", "Temporal.Duration.prototype.weeks")}}
+- {{jsxref("Temporal/Duration/days", "Temporal.Duration.prototype.days")}}
+- {{jsxref("Temporal/Duration/hours", "Temporal.Duration.prototype.hours")}}
+- {{jsxref("Temporal/Duration/minutes", "Temporal.Duration.prototype.minutes")}}
+- {{jsxref("Temporal/Duration/seconds", "Temporal.Duration.prototype.seconds")}}
+- {{jsxref("Temporal/Duration/microseconds", "Temporal.Duration.prototype.microseconds")}}
+- {{jsxref("Temporal/Duration/nanoseconds", "Temporal.Duration.prototype.nanoseconds")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/minutes/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/minutes/index.md
new file mode 100644
index 000000000000000..406dbccc86360f2
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/minutes/index.md
@@ -0,0 +1,56 @@
+---
+title: Temporal.Duration.prototype.minutes
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/minutes
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.Duration.minutes
+---
+
+{{JSRef}}
+
+The **`minutes`** accessor property of {{jsxref("Temporal.Duration")}} instances returns an integer representing the number of minutes in the duration.
+
+Unless the duration is [balanced](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#duration_balancing), you cannot assume the range of this value, but you can know its sign by checking the duration's [`sign`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/sign) property. If it is balanced to a unit above minutes, the `minutes` absolute value will be between 0 and 59, inclusive.
+
+The set accessor of `minutes` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/Duration/with", "with()")}} method to create a new `Temporal.Duration` object with the desired new value.
+
+## Examples
+
+### Using minutes
+
+```js
+const d1 = Temporal.Duration.from({ hours: 1, minutes: 30 });
+const d2 = Temporal.Duration.from({ hours: -1, minutes: -30 });
+const d3 = Temporal.Duration.from({ hours: 1 });
+const d4 = Temporal.Duration.from({ minutes: 60 });
+
+console.log(d1.minutes); // 1
+console.log(d2.minutes); // -1
+console.log(d3.minutes); // 0
+console.log(d4.minutes); // 60
+
+// Balance d4
+const d4Balanced = d4.round({ largestUnit: "hour" });
+console.log(d4Balanced.minutes); // 0
+console.log(d4Balanced.hours); // 1
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/years", "Temporal.Duration.prototype.years")}}
+- {{jsxref("Temporal/Duration/months", "Temporal.Duration.prototype.months")}}
+- {{jsxref("Temporal/Duration/weeks", "Temporal.Duration.prototype.weeks")}}
+- {{jsxref("Temporal/Duration/days", "Temporal.Duration.prototype.days")}}
+- {{jsxref("Temporal/Duration/hours", "Temporal.Duration.prototype.hours")}}
+- {{jsxref("Temporal/Duration/seconds", "Temporal.Duration.prototype.seconds")}}
+- {{jsxref("Temporal/Duration/milliseconds", "Temporal.Duration.prototype.milliseconds")}}
+- {{jsxref("Temporal/Duration/microseconds", "Temporal.Duration.prototype.microseconds")}}
+- {{jsxref("Temporal/Duration/nanoseconds", "Temporal.Duration.prototype.nanoseconds")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/months/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/months/index.md
new file mode 100644
index 000000000000000..1683b32341489dc
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/months/index.md
@@ -0,0 +1,59 @@
+---
+title: Temporal.Duration.prototype.months
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/months
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.Duration.months
+---
+
+{{JSRef}}
+
+The **`months`** accessor property of {{jsxref("Temporal.Duration")}} instances returns an integer representing the number of months in the duration.
+
+Unless the duration is [balanced](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#duration_balancing), you cannot assume the range of this value, but you can know its sign by checking the duration's [`sign`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/sign) property. If it is balanced to a unit above months, the `months` absolute value's range depends on the calendar (how many months are in a year).
+
+The set accessor of `months` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/Duration/with", "with()")}} method to create a new `Temporal.Duration` object with the desired new value.
+
+## Examples
+
+### Using months
+
+```js
+const d1 = Temporal.Duration.from({ years: 1, months: 1 });
+const d2 = Temporal.Duration.from({ years: -1, months: -1 });
+const d3 = Temporal.Duration.from({ years: 1 });
+const d4 = Temporal.Duration.from({ months: 12 });
+
+console.log(d1.months); // 1
+console.log(d2.months); // -1
+console.log(d3.months); // 0
+console.log(d4.months); // 12
+
+// Balance d4
+const d4Balanced = d4.round({
+ largestUnit: "year",
+ relativeTo: Temporal.PlainDate.from("2021-01-01"), // ISO 8601 calendar
+});
+console.log(d4Balanced.months); // 0
+console.log(d4Balanced.years); // 1
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/years", "Temporal.Duration.prototype.years")}}
+- {{jsxref("Temporal/Duration/weeks", "Temporal.Duration.prototype.weeks")}}
+- {{jsxref("Temporal/Duration/days", "Temporal.Duration.prototype.days")}}
+- {{jsxref("Temporal/Duration/hours", "Temporal.Duration.prototype.hours")}}
+- {{jsxref("Temporal/Duration/minutes", "Temporal.Duration.prototype.minutes")}}
+- {{jsxref("Temporal/Duration/seconds", "Temporal.Duration.prototype.seconds")}}
+- {{jsxref("Temporal/Duration/milliseconds", "Temporal.Duration.prototype.milliseconds")}}
+- {{jsxref("Temporal/Duration/microseconds", "Temporal.Duration.prototype.microseconds")}}
+- {{jsxref("Temporal/Duration/nanoseconds", "Temporal.Duration.prototype.nanoseconds")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/nanoseconds/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/nanoseconds/index.md
new file mode 100644
index 000000000000000..3478d36294b3de7
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/nanoseconds/index.md
@@ -0,0 +1,56 @@
+---
+title: Temporal.Duration.prototype.nanoseconds
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/nanoseconds
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.Duration.nanoseconds
+---
+
+{{JSRef}}
+
+The **`nanoseconds`** accessor property of {{jsxref("Temporal.Duration")}} instances returns an integer representing the number of nanoseconds in the duration.
+
+Unless the duration is [balanced](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#duration_balancing), you cannot assume the range of this value, but you can know its sign by checking the duration's [`sign`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/sign) property. If it is balanced to a unit above nanoseconds, the `nanoseconds` absolute value will be between 0 and 999, inclusive.
+
+The set accessor of `nanoseconds` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/Duration/with", "with()")}} method to create a new `Temporal.Duration` object with the desired new value.
+
+## Examples
+
+### Using nanoseconds
+
+```js
+const d1 = Temporal.Duration.from({ microseconds: 1, nanoseconds: 500 });
+const d2 = Temporal.Duration.from({ microseconds: -1, nanoseconds: -500 });
+const d3 = Temporal.Duration.from({ microseconds: 1 });
+const d4 = Temporal.Duration.from({ nanoseconds: 1000 });
+
+console.log(d1.nanoseconds); // 500
+console.log(d2.nanoseconds); // -500
+console.log(d3.nanoseconds); // 0
+console.log(d4.nanoseconds); // 1000
+
+// Balance d4
+const d4Balanced = d4.round({ largestUnit: "microsecond" });
+console.log(d4Balanced.nanoseconds); // 0
+console.log(d4Balanced.microseconds); // 1
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/years", "Temporal.Duration.prototype.years")}}
+- {{jsxref("Temporal/Duration/months", "Temporal.Duration.prototype.months")}}
+- {{jsxref("Temporal/Duration/weeks", "Temporal.Duration.prototype.weeks")}}
+- {{jsxref("Temporal/Duration/days", "Temporal.Duration.prototype.days")}}
+- {{jsxref("Temporal/Duration/hours", "Temporal.Duration.prototype.hours")}}
+- {{jsxref("Temporal/Duration/minutes", "Temporal.Duration.prototype.minutes")}}
+- {{jsxref("Temporal/Duration/seconds", "Temporal.Duration.prototype.seconds")}}
+- {{jsxref("Temporal/Duration/milliseconds", "Temporal.Duration.prototype.milliseconds")}}
+- {{jsxref("Temporal/Duration/microseconds", "Temporal.Duration.prototype.microseconds")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/negated/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/negated/index.md
new file mode 100644
index 000000000000000..74a1168463ba6d7
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/negated/index.md
@@ -0,0 +1,50 @@
+---
+title: Temporal.Duration.prototype.negated()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/negated
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.Duration.negated
+---
+
+{{JSRef}}
+
+The **`negated()`** method of {{jsxref("Temporal.Duration")}} instances returns a new `Temporal.Duration` object with the negated value of this duration (all fields keep the same magnitude, but sign becomes reversed).
+
+## Syntax
+
+```js-nolint
+negated()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A new `Temporal.Duration` object, where all fields have the same magnitude as this duration, but the sign is reversed (positive fields become negative, and vice versa).
+
+## Examples
+
+### Using negated()
+
+```js
+const d1 = Temporal.Duration.from({ hours: 1, minutes: 30 });
+const d2 = Temporal.Duration.from({ hours: -1, minutes: -30 });
+
+console.log(d1.negated().toString()); // "-PT1H30M"
+console.log(d2.negated().toString()); // "PT1H30M"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/abs", "Temporal.Duration.prototype.abs()")}}
+- {{jsxref("Temporal/Duration/sign", "Temporal.Duration.prototype.sign")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/round/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/round/index.md
new file mode 100644
index 000000000000000..846b6acf66999a3
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/round/index.md
@@ -0,0 +1,132 @@
+---
+title: Temporal.Duration.prototype.round()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/round
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.Duration.round
+---
+
+{{JSRef}}
+
+The **`round()`** method of {{jsxref("Temporal.Duration")}} instances returns a new `Temporal.Duration` object with the duration rounded to the given smallest unit and/or [balanced](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#duration_balancing) to the given largest unit.
+
+## Syntax
+
+```js-nolint
+round(smallestUnit)
+round(options)
+```
+
+### Parameters
+
+- `smallestUnit`
+ - : A string representing the [`smallestUnit`](#smallestunit_2) option. This is a convenience overload, so `round(smallestUnit)` is equivalent to `round({ smallestUnit })`, where `smallestUnit` is a string.
+- `options`
+ - : An object containing some or all of the following properties (in the order they are retrieved and validated):
+ - `largestUnit` {{optional_inline}}
+ - : Any of the temporal units: `"year"`, `"month"`, `"week"`, `"day"`, `"hour"`, `"minute"`, `"second"`, `"millisecond"`, `"microsecond"`, `"nanosecond"`, or their plural forms, or the value `"auto"` which means the largest non-zero component of this duration or `smallestUnit`, whichever is greater. Defaults to `"auto"`. The result will not contain units larger than this; for example, if the largest unit is `"minute"`, then "1 hour 30 minutes" will become "90 minutes".
+ - `relativeTo` {{optional_inline}}
+ - : A zoned or plain date(time) that provides the time and calendar information to resolve [calendar durations](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#calendar_durations) (see the link for the general interpretation of this option). Required if either `this` or `other` is a calendar duration, or `smallestUnit` is a calendar unit.
+ - `roundingIncrement` {{optional_inline}}
+ - : A number (truncated to an integer) representing the rounding increment in the given `smallestUnit`. Defaults to `1`. Must be in the inclusive range of 1 to 1e9. If the smallest unit is hours, minutes, seconds, milliseconds, microseconds, or nanoseconds, the increment must be a divisor of the maximum value of the unit; for example, if the unit is hours, the increment must be a divisor of 24 and must not be 24 itself, which means it can be 1, 2, 3, 4, 6, 8, or 12.
+ - `roundingMode` {{optional_inline}}
+ - : A string representing the rounding mode specifying to round up or down in various scenarios. See [`Intl.NumberFormat()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#roundingmode). Defaults to `"halfExpand"`.
+ - `smallestUnit` {{optional_inline}}
+ - : Any of the temporal units: `"year"`, `"month"`, `"week"`, `"day"`, `"hour"`, `"minute"`, `"second"`, `"millisecond"`, `"microsecond"`, `"nanosecond"`, or their plural forms. Defaults to `"nanosecond"`. For units larger than `"nanosecond"`, fractional parts of the `smallestUnit` will be rounded according to the `roundingIncrement` and `roundingMode` settings. Must be smaller or equal to `largestUnit`. At least one of `smallestUnit` and `largestUnit` must be provided.
+
+### Return value
+
+A new `Temporal.Duration` object, where the largest unit is no larger than the `largestUnit` option, and the smallest unit is no smaller than the `smallestUnit` option. The fractional parts of the `smallestUnit` are rounded according to the `roundingIncrement` and `roundingMode` settings.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+
+## Description
+
+The `round()` method performs two operations: rounding and balancing. It does the following:
+
+1. It makes sure the duration is balanced. If a component is above its preferred maximum (24 hours per day, 60 minutes per hour, etc.), the excess is carried over to the next larger unit, until we reach `largestUnit`. For example, "24 hours 90 minutes" becomes "25 hours 30 minutes" if `largestUnit` is `"auto"`, and "1 day 1 hour 30 minutes" if `largestUnit` is `"day"`.
+2. For all components larger than `largestUnit`, they are carried down into `largestUnit`; for example, "2 hours 30 minutes" becomes "150 minutes" if `largestUnit` is `"minute"`.
+3. For all components smaller than `smallestUnit`, they are carried up into `smallestUnit` as a fractional part, and then rounded according to the `roundingIncrement` and `roundingMode` settings. For example, "1 hour 30 minutes" becomes "1.5 hours" if `smallestUnit` is `"hour"`, and then rounded to "2 hours" using the default settings.
+
+[Calendar units](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#calendar_units) have uneven lengths. Their lengths are resolved relative to a starting point. For example, a duration of "2 years" in the Gregorian calendar may be 730 days or 731 days long, depending on whether it moves through a leap year or not. When rounding to a calendar unit, we first get the exact date-time represented by `relativeTo + duration`, then round it down and up according to `smallestUnit` and `roundingIncrement` to get two candidates. Then, we choose the candidate according to the `roundingMode` setting, and finally subtract `relativeTo` to get the final duration.
+
+## Examples
+
+### Rounding off small units
+
+```js
+const duration = Temporal.Duration.from({ hours: 1, minutes: 30, seconds: 15 });
+const roundedDuration = duration.round("minute");
+console.log(roundedDuration.toString()); // "PT1H30M"
+```
+
+### Avoiding larger units
+
+```js
+const duration = Temporal.Duration.from({
+ days: 3,
+ hours: 1,
+ minutes: 41,
+ seconds: 5,
+});
+const roundedDuration = duration.round({ largestUnit: "hour" });
+console.log(
+ `Time spent on this problem: ${roundedDuration.toLocaleString("en-US", { style: "digital" })}`,
+);
+// Time spent on this problem: 73:41:05
+```
+
+### Rounding to a whole number of hours
+
+```js
+const duration = Temporal.Duration.from({ days: 1, hours: 1, minutes: 30 });
+const roundedDuration = duration.round({
+ largestUnit: "hour",
+ smallestUnit: "hour",
+ roundingMode: "floor",
+});
+console.log(roundedDuration.hours); // 25
+```
+
+### Rounding by 15-minute increments
+
+```js
+const duration = Temporal.Duration.from({ hours: 1, minutes: 17 });
+const roundedDuration = duration.round({
+ smallestUnit: "minute",
+ roundingIncrement: 15,
+});
+console.log(
+ `The queue will take approximately ${roundedDuration.toLocaleString("en-US")}`,
+);
+// The queue will take approximately 1 hr, 15 min
+```
+
+### Resolving calendar durations
+
+If either the initial duration or largest/smallest unit contains a calendar unit, you must provide a `relativeTo` option to resolve the calendar durations.
+
+```js
+const duration = Temporal.Duration.from({ months: 1, days: 1, hours: 1 });
+const roundedDuration = duration.round({
+ largestUnit: "day",
+ smallestUnit: "day",
+ relativeTo: Temporal.PlainDateTime.from("2022-01-01"),
+});
+console.log(roundedDuration); // "P32D"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/total", "Temporal.Duration.prototype.total()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/seconds/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/seconds/index.md
new file mode 100644
index 000000000000000..481c6f5b0b52c25
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/seconds/index.md
@@ -0,0 +1,56 @@
+---
+title: Temporal.Duration.prototype.seconds
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/seconds
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.Duration.seconds
+---
+
+{{JSRef}}
+
+The **`seconds`** accessor property of {{jsxref("Temporal.Duration")}} instances returns an integer representing the number of seconds in the duration.
+
+Unless the duration is [balanced](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#duration_balancing), you cannot assume the range of this value, but you can know its sign by checking the duration's [`sign`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/sign) property. If it is balanced to a unit above seconds, the `seconds` absolute value will be between 0 and 59, inclusive.
+
+The set accessor of `seconds` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/Duration/with", "with()")}} method to create a new `Temporal.Duration` object with the desired new value.
+
+## Examples
+
+### Using seconds
+
+```js
+const d1 = Temporal.Duration.from({ minutes: 1, seconds: 30 });
+const d2 = Temporal.Duration.from({ minutes: -1, seconds: -30 });
+const d3 = Temporal.Duration.from({ minutes: 1 });
+const d4 = Temporal.Duration.from({ seconds: 60 });
+
+console.log(d1.seconds); // 30
+console.log(d2.seconds); // -30
+console.log(d3.seconds); // 0
+console.log(d4.seconds); // 60
+
+// Balance d4
+const d4Balanced = d4.round({ largestUnit: "minute" });
+console.log(d4Balanced.seconds); // 0
+console.log(d4Balanced.minutes); // 1
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/years", "Temporal.Duration.prototype.years")}}
+- {{jsxref("Temporal/Duration/months", "Temporal.Duration.prototype.months")}}
+- {{jsxref("Temporal/Duration/weeks", "Temporal.Duration.prototype.weeks")}}
+- {{jsxref("Temporal/Duration/days", "Temporal.Duration.prototype.days")}}
+- {{jsxref("Temporal/Duration/hours", "Temporal.Duration.prototype.hours")}}
+- {{jsxref("Temporal/Duration/minutes", "Temporal.Duration.prototype.minutes")}}
+- {{jsxref("Temporal/Duration/milliseconds", "Temporal.Duration.prototype.milliseconds")}}
+- {{jsxref("Temporal/Duration/microseconds", "Temporal.Duration.prototype.microseconds")}}
+- {{jsxref("Temporal/Duration/nanoseconds", "Temporal.Duration.prototype.nanoseconds")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/sign/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/sign/index.md
new file mode 100644
index 000000000000000..e90ed3d774e354d
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/sign/index.md
@@ -0,0 +1,47 @@
+---
+title: Temporal.Duration.prototype.sign
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/sign
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.Duration.sign
+---
+
+{{JSRef}}
+
+The **`sign`** accessor property of {{jsxref("Temporal.Duration")}} instances returns `1` if this duration is positive, `-1` if negative, and `0` if zero. Because [a duration never has mixed signs](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#duration_sign), the sign of a duration is determined by the sign of any of its non-zero fields.
+
+## Examples
+
+### Using sign
+
+```js
+const d1 = Temporal.Duration.from({ hours: 1, minutes: 30 });
+const d2 = Temporal.Duration.from({ hours: -1, minutes: -30 });
+const d3 = Temporal.Duration.from({ hours: 0 });
+
+console.log(d1.sign); // 1
+console.log(d2.sign); // -1
+console.log(d3.sign); // 0
+
+console.log(d1.abs().sign); // 1
+console.log(d2.abs().sign); // 1
+console.log(d3.abs().sign); // 0
+
+console.log(d1.negated().sign); // -1
+console.log(d2.negated().sign); // 1
+console.log(d3.negated().sign); // 0
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/abs", "Temporal.Duration.prototype.abs()")}}
+- {{jsxref("Temporal/Duration/negated", "Temporal.Duration.prototype.negated()")}}
+- {{jsxref("Temporal/Duration/blank", "Temporal.Duration.prototype.blank")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/subtract/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/subtract/index.md
new file mode 100644
index 000000000000000..41921d8e3fdf111
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/subtract/index.md
@@ -0,0 +1,60 @@
+---
+title: Temporal.Duration.prototype.subtract()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/subtract
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.Duration.subtract
+---
+
+{{JSRef}}
+
+The **`subtract()`** method of {{jsxref("Temporal.Duration")}} instances returns a new `Temporal.Duration` object with the difference between this duration and a given duration. It is equivalent to [adding](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/add) the [negated](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/negated) value of the other duration.
+
+## Syntax
+
+```js-nolint
+subtract(other)
+```
+
+### Parameters
+
+- `other`
+ - : A string, an object, or a {{jsxref("Temporal.Duration")}} instance representing a duration to add to this duration. It is converted to a `Temporal.Duration` object using the same algorithm as {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}.
+
+### Return value
+
+A new `Temporal.Duration` object representing the difference of this duration and `other`.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - Either `this` or `other` is a [calendar duration](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#calendar_durations) (it has a non-zero `years`, `months`, or `weeks`), because calendar durations are ambiguous without a calendar and time reference.
+ - The difference of `this` and `other` overflows the maximum or underflows the minimum representable duration, which is ±253 seconds.
+
+## Examples
+
+### Using subtract()
+
+```js
+const d1 = Temporal.Duration.from({ hours: 1, minutes: 30 });
+const d2 = Temporal.Duration.from({ hours: -1, minutes: -20 });
+
+const d3 = d1.subtract(d2);
+console.log(d3.toString()); // "PT2H50M"
+```
+
+For more examples and caveats, see the [`add()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/add) method.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/add", "Temporal.Duration.prototype.add()")}}
+- {{jsxref("Temporal/Duration/negated", "Temporal.Duration.prototype.negated()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/tojson/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/tojson/index.md
new file mode 100644
index 000000000000000..b5c0009c94d5bab
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/tojson/index.md
@@ -0,0 +1,68 @@
+---
+title: Temporal.Duration.prototype.toJSON()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/toJSON
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.Duration.toJSON
+---
+
+{{JSRef}}
+
+The **`toJSON()`** method of {{jsxref("Temporal.Duration")}} instances returns a string representing this duration in the same [ISO 8601 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#iso_8601_duration_format) as calling {{jsxref("Temporal/Duration/toString", "toString()")}}. It is intended to be implicitly called by {{jsxref("JSON.stringify()")}}.
+
+## Syntax
+
+```js-nolint
+toJSON()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A string representing the given duration in the [ISO 8601 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#iso_8601_duration_format), with as much subsecond precision as necessary to represent the duration accurately.
+
+## Description
+
+The `toJSON()` method is automatically called by {{jsxref("JSON.stringify()")}} when a `Temporal.Duration` object is stringified. This method is generally intended to, by default, usefully serialize `Temporal.Duration` objects during [JSON](/en-US/docs/Glossary/JSON) serialization, which can then be deserialized using the {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}} function as the reviver of {{jsxref("JSON.parse()")}}.
+
+## Examples
+
+### Using toJSON()
+
+```js
+const duration = Temporal.Duration.from({ hours: 1, minutes: 30, seconds: 15 });
+const durationStr = duration.toJSON(); // 'PT1H30M15S'
+const d2 = Temporal.Duration.from(durationStr);
+```
+
+### JSON serialization and parsing
+
+This example shows how `Temporal.Duration` can be serialized as JSON without extra effort, and how to parse it back.
+
+```js
+const duration = Temporal.Duration.from({ hours: 1, minutes: 30, seconds: 15 });
+const jsonStr = JSON.stringify({ data: duration }); // '{"data":"PT1H30M15S"}'
+const obj = JSON.parse(jsonStr, (key, value) => {
+ if (key === "data") {
+ return Temporal.Duration.from(value);
+ }
+ return value;
+});
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}
+- {{jsxref("Temporal/Duration/toString", "Temporal.Duration.prototype.toString()")}}
+- {{jsxref("Temporal/Duration/toLocaleString", "Temporal.Duration.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/tolocalestring/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/tolocalestring/index.md
new file mode 100644
index 000000000000000..176dcaf0b95e4f3
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/tolocalestring/index.md
@@ -0,0 +1,69 @@
+---
+title: Temporal.Duration.prototype.toLocaleString()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/toLocaleString
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.Duration.toLocaleString
+---
+
+{{JSRef}}
+
+The **`toLocaleString()`** method of {{jsxref("Temporal.Duration")}} instances returns a string with a language-sensitive representation of this duration. In implementations with [`Intl.DurationFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DurationFormat) support, this method delegates to `Intl.DurationFormat`.
+
+Every time `toLocaleString` is called, it has to perform a search in a big database of localization strings, which is potentially inefficient. When the method is called many times with the same arguments, it is better to create a {{jsxref("Intl.DurationFormat")}} object and use its {{jsxref("Intl/DurationFormat/format", "format()")}} method, because a `DurationFormat` object remembers the arguments passed to it and may decide to cache a slice of the database, so future `format` calls can search for localization strings within a more constrained context.
+
+## Syntax
+
+```js-nolint
+toLocaleString()
+toLocaleString(locales)
+toLocaleString(locales, options)
+```
+
+### Parameters
+
+The `locales` and `options` parameters customize the behavior of the function and let applications specify the language whose formatting conventions should be used.
+
+In implementations that support the [`Intl.DurationFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DurationFormat), these parameters correspond exactly to the [`Intl.DurationFormat()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DurationFormat/DurationFormat) constructor's parameters. Implementations without `Intl.DurationFormat` support return the exact same string as {{jsxref("Temporal/Duration/toString", "toString()")}}, ignoring both parameters.
+
+- `locales` {{optional_inline}}
+ - : A string with a BCP 47 language tag, or an array of such strings. Corresponds to the [`locales`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DurationFormat/DurationFormat#locales) parameter of the `Intl.DurationFormat()` constructor.
+- `options` {{optional_inline}}
+ - : An object adjusting the output format. Corresponds to the [`options`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DurationFormat/DurationFormat#options) parameter of the `Intl.DurationFormat()` constructor.
+
+See the [`Intl.DurationFormat()` constructor](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DurationFormat/DurationFormat) for details on these parameters and how to use them.
+
+### Return value
+
+A string representing the given duration according to language-specific conventions.
+
+In implementations with `Intl.DurationFormat`, this is equivalent to `new Intl.DurationFormat(locales, options).format(duration)`.
+
+> [!NOTE]
+> Most of the time, the formatting returned by `toLocaleString()` is consistent. However, the output may vary between implementations, even within the same locale — output variations are by design and allowed by the specification. It may also not be what you expect. For example, the string may use non-breaking spaces or be surrounded by bidirectional control characters. You should not compare the results of `toLocaleString()` to hardcoded constants.
+
+## Examples
+
+### Using toLocaleString()
+
+Basic use of this method without specifying a `locale` returns a formatted string in the default locale and with default options.
+
+```js
+const duration = Temporal.Duration.from({ hours: 1, minutes: 30, seconds: 15 });
+
+console.log(duration.toLocaleString()); // 1 hr, 30 min, 15 sec
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Intl.DurationFormat")}}
+- {{jsxref("Temporal/Duration/toJSON", "Temporal.Duration.prototype.toJSON()")}}
+- {{jsxref("Temporal/Duration/toString", "Temporal.Duration.prototype.toString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/tostring/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/tostring/index.md
new file mode 100644
index 000000000000000..191bd6f4a2f419f
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/tostring/index.md
@@ -0,0 +1,79 @@
+---
+title: Temporal.Duration.prototype.toString()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/toString
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.Duration.toString
+---
+
+{{JSRef}}
+
+The **`toString()`** method of {{jsxref("Temporal.Duration")}} instances returns a string representing this duration in the [ISO 8601 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#iso_8601_duration_format).
+
+## Syntax
+
+```js-nolint
+toString()
+toString(options)
+```
+
+### Parameters
+
+- `options` {{optional_inline}}
+ - : An object containing some or all of the following properties (in the order they are retrieved and validated):
+ - `fractionalSecondDigits` {{optional_inline}}
+ - : Either an integer from 0 to 9, or the string `"auto"`. The default is `"auto"`. If `"auto"`, then trailing zeros are removed from the fractional seconds. Otherwise, the fractional part of the second component contains this many digits, padded with zeros or rounded as necessary.
+ - `roundingMode` {{optional_inline}}
+ - : A string specifying how to round off fractional second digits beyond `fractionalSecondDigits`. See [`Intl.NumberFormat()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#roundingmode). Defaults to `"trunc"`.
+ - `smallestUnit` {{optional_inline}}
+ - : A string specifying the smallest unit to include in the output. Possible values are `"second"`, `"millisecond"`, `"microsecond"`, and `"nanosecond"`, or their plural forms, which are equivalent to `fractionalSecondDigits` values of `0`, `3`, `6`, `9`, respectively. If specified, then `fractionalSecondDigits` is ignored.
+
+### Return value
+
+A string representing the given duration in the [ISO 8601 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#iso_8601_duration_format), with subsecond components formatted according to the options. The zero duration is represented as `"PT0S"`.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+
+## Examples
+
+### Using toString()
+
+```js
+const duration = Temporal.Duration.from({ hours: 1, minutes: 30, seconds: 15 });
+console.log(duration.toString()); // 'PT1H30M15S'
+
+// Stringification implicitly calls toString()
+console.log(`${duration}`); // 'PT1H30M15S'
+```
+
+### Using options
+
+```js
+const worldRecord = Temporal.Duration.from({ seconds: 9, milliseconds: 580 });
+console.log(worldRecord.toString()); // 'PT9.58S'
+console.log(worldRecord.toString({ fractionalSecondDigits: 1 })); // 'PT9.5S'
+console.log(worldRecord.toString({ fractionalSecondDigits: 0 })); // 'PT9S'
+console.log(worldRecord.toString({ smallestUnit: "millisecond" })); // 'PT9.580S'
+console.log(
+ worldRecord.toString({
+ fractionalSecondDigits: 1,
+ roundingMode: "halfExpand",
+ }),
+); // 'PT9.6S'
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/toJSON", "Temporal.Duration.prototype.toJSON()")}}
+- {{jsxref("Temporal/Duration/toLocaleString", "Temporal.Duration.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/total/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/total/index.md
new file mode 100644
index 000000000000000..110a96469d7b6a2
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/total/index.md
@@ -0,0 +1,79 @@
+---
+title: Temporal.Duration.prototype.total()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/total
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.Duration.total
+---
+
+{{JSRef}}
+
+The **`total()`** method of {{jsxref("Temporal.Duration")}} instances returns a number representing the total duration in the given unit.
+
+## Syntax
+
+```js-nolint
+total(unit)
+total(options)
+```
+
+### Parameters
+
+- `unit`
+ - : A string representing the [`unit`](#unit_2) option. This is a convenience overload, so `total(unit)` is equivalent to `total({ unit })`, where `unit` is a string.
+- `options`
+ - : An object containing some or all of the following properties (in the order they are retrieved and validated):
+ - `relativeTo` {{optional_inline}}
+ - : A zoned or plain date(time) that provides the time and calendar information to resolve [calendar durations](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#calendar_durations) (see the link for the general interpretation of this option). Required if either `this` or `other` is a calendar duration, or `unit` is a calendar unit.
+ - `unit`
+ - : Any of the temporal units: `"year"`, `"month"`, `"week"`, `"day"`, `"hour"`, `"minute"`, `"second"`, `"millisecond"`, `"microsecond"`, `"nanosecond"`, or their plural forms.
+
+### Return value
+
+A floating-point number representing the total duration in the given unit. May be inexact due to floating point precision limits.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - `unit` is not provided or is not a valid unit.
+ - Either `this` or `other` is a calendar duration, or `unit` is a calendar unit, and `relativeTo` is not provided.
+
+## Description
+
+If a `relativeTo` is provided, the result is calculated by adding the duration to the starting point, finding the difference between the result and the starting point (in nanoseconds), and then converting the difference to the requested unit by dividing by the appropriate number of nanoseconds per unit. Providing a zoned date-time allows daylight saving time and other time zone changes to be taken into account too; otherwise, 24-hour days are assumed.
+
+If `relativeTo` is not provided, the result is calculated by converting the duration to nanoseconds and dividing by the appropriate number of nanoseconds per unit.
+
+## Examples
+
+### Using total()
+
+```js
+const d = Temporal.Duration.from({ hours: 1, minutes: 30 });
+
+console.log(d.total("minutes")); // 90
+console.log(d.total("hours")); // 1.5
+```
+
+### Total of a calendar duration
+
+```js
+const d = Temporal.Duration.from({ months: 1 });
+
+console.log(
+ d.total({ unit: "days", relativeTo: Temporal.PlainDate.from("2021-01-01") }),
+); // 31
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/round", "Temporal.Duration.prototype.round()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/valueof/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/valueof/index.md
new file mode 100644
index 000000000000000..cd0f49df10e9b8c
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/valueof/index.md
@@ -0,0 +1,66 @@
+---
+title: Temporal.Duration.prototype.valueOf()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/valueOf
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.Duration.valueOf
+---
+
+{{JSRef}}
+
+The **`valueOf()`** method of {{jsxref("Temporal.Duration")}} instances throws a {{jsxref("TypeError")}}, which prevents `Temporal.Duration` instances from being [implicitly converted to primitives](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) when used in arithmetic or comparison operations.
+
+## Syntax
+
+```js-nolint
+valueOf()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+None.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Always thrown.
+
+## Description
+
+Because both [primitive conversion](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) and [number conversion](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number#number_coercion) call `valueOf()` before `toString()`, if `valueOf()` is absent, then an expression like `duration1 > duration2` would implicitly compare them as strings, which may have unexpected results such as `"PT3S" > "PT1M"`. By throwing a `TypeError`, `Temporal.Duration` instances prevent such implicit conversions. You need to explicitly convert them to numbers using {{jsxref("Temporal/Duration/total", "Temporal.Duration.prototype.total()")}}, or use the {{jsxref("Temporal/Duration/compare", "Temporal.Duration.compare()")}} static method to compare them.
+
+## Examples
+
+### Arithmetic and comparison operations on Temporal.Duration
+
+All arithmetic and comparison operations on `Temporal.Duration` instances should use the dedicated methods or convert them to primitives explicitly.
+
+```js
+const duration1 = Temporal.Duration.from({ seconds: 3 });
+const duration2 = Temporal.Duration.from({ minutes: 1 });
+duration1 > duration2; // TypeError: can't convert Duration to primitive type
+duration1.total("seconds") > duration2.total("seconds"); // false
+Temporal.Duration.compare(duration1, duration2); // -1
+
+duration1 + duration2; // TypeError: can't convert Duration to primitive type
+duration1.total("seconds") + duration2.total("seconds"); // 63
+duration1.add(duration2).toString(); // "PT1M3S"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/toString", "Temporal.Duration.prototype.toString()")}}
+- {{jsxref("Temporal/Duration/toJSON", "Temporal.Duration.prototype.toJSON()")}}
+- {{jsxref("Temporal/Duration/toLocaleString", "Temporal.Duration.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/weeks/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/weeks/index.md
new file mode 100644
index 000000000000000..76ac8615802890a
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/weeks/index.md
@@ -0,0 +1,59 @@
+---
+title: Temporal.Duration.prototype.weeks
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/weeks
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.Duration.weeks
+---
+
+{{JSRef}}
+
+The **`weeks`** accessor property of {{jsxref("Temporal.Duration")}} instances returns an integer representing the number of weeks in the duration.
+
+Unless the duration is [balanced](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#duration_balancing), you cannot assume the range of this value, but you can know its sign by checking the duration's [`sign`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/sign) property. If it is balanced to a unit above weeks, the `weeks` absolute value's range depends on the calendar (how many weeks are in a month or year).
+
+The set accessor of `weeks` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/Duration/with", "with()")}} method to create a new `Temporal.Duration` object with the desired new value.
+
+## Examples
+
+### Using weeks
+
+```js
+const d1 = Temporal.Duration.from({ weeks: 1, days: 1 });
+const d2 = Temporal.Duration.from({ weeks: -1, days: -1 });
+const d3 = Temporal.Duration.from({ weeks: 1 });
+const d4 = Temporal.Duration.from({ days: 7 });
+
+console.log(d1.weeks); // 1
+console.log(d2.weeks); // -1
+console.log(d3.weeks); // 1
+console.log(d4.weeks); // 0
+
+// Balance d4
+const d4Balanced = d4.round({
+ largestUnit: "week",
+ relativeTo: Temporal.PlainDate.from("2021-01-01"), // ISO 8601 calendar
+});
+console.log(d4Balanced.weeks); // 1
+console.log(d4Balanced.days); // 0
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/years", "Temporal.Duration.prototype.years")}}
+- {{jsxref("Temporal/Duration/months", "Temporal.Duration.prototype.months")}}
+- {{jsxref("Temporal/Duration/days", "Temporal.Duration.prototype.days")}}
+- {{jsxref("Temporal/Duration/hours", "Temporal.Duration.prototype.hours")}}
+- {{jsxref("Temporal/Duration/minutes", "Temporal.Duration.prototype.minutes")}}
+- {{jsxref("Temporal/Duration/seconds", "Temporal.Duration.prototype.seconds")}}
+- {{jsxref("Temporal/Duration/milliseconds", "Temporal.Duration.prototype.milliseconds")}}
+- {{jsxref("Temporal/Duration/microseconds", "Temporal.Duration.prototype.microseconds")}}
+- {{jsxref("Temporal/Duration/nanoseconds", "Temporal.Duration.prototype.nanoseconds")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/with/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/with/index.md
new file mode 100644
index 000000000000000..3b920b5a0c4396d
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/with/index.md
@@ -0,0 +1,75 @@
+---
+title: Temporal.Duration.prototype.with()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/with
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.Duration.with
+---
+
+{{JSRef}}
+
+The **`with()`** method of {{jsxref("Temporal.Duration")}} instances returns a new `Temporal.Duration` object representing this duration with some fields replaced by new values. Because all `Temporal` objects are designed to be immutable, this method essentially functions as the setter for the duration's fields.
+
+## Syntax
+
+```js-nolint
+with(info)
+```
+
+### Parameters
+
+- `info`
+ - : An object containing at least one of the properties recognized by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}: `years`, `months`, `weeks`, `days`, `hours`, `minutes`, `seconds`, `milliseconds`, `microseconds`, `nanoseconds`. Unspecified properties use the values from the original duration.
+
+### Return value
+
+A new `Temporal.Duration` object, where the fields specified in `info` that are not `undefined` are replaced by the corresponding values, and the rest of the fields are copied from the original duration.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - Any of the recognized properties in the `info` object is not an integer (including non-finite values).
+ - A [calendar unit](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#calendar_durations) (years, months, weeks) has an absolute value ≥ 232 .
+ - The non-calendar part of the duration (days and below), when expressed in seconds, has an absolute value ≥ 253 .
+- {{jsxref("TypeError")}}
+ - : Thrown in one of the following cases:
+ - The `info` object is not an object.
+ - All of the recognized properties in the `info` object are `undefined`.
+
+## Examples
+
+### Using with()
+
+You can use `with()` to achieve fine-grained control over the fields of a `Temporal.Duration` object. For example, you can manually [balance](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#duration_balancing) a duration only on one unit, which `round()` does not offer:
+
+```js
+function balanceMinutes(duration) {
+ const { hours, minutes } = duration;
+ const totalMinutes = hours * 60 + minutes;
+ const balancedMinutes = totalMinutes % 60;
+ const balancedHours = (totalMinutes - balancedMinutes) / 60;
+ return duration.with({ hours: balancedHours, minutes: balancedMinutes });
+}
+
+const d1 = Temporal.Duration.from({ hours: 100, minutes: 100, seconds: 100 });
+const d2 = balanceMinutes(d1);
+console.log(d2.hours); // 101
+console.log(d2.minutes); // 40
+console.log(d2.seconds); // 100; remains unbalanced
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}
+- {{jsxref("Temporal/Duration/add", "Temporal.Duration.prototype.add()")}}
+- {{jsxref("Temporal/Duration/subtract", "Temporal.Duration.prototype.subtract()")}}
+- {{jsxref("Temporal/Duration/round", "Temporal.Duration.prototype.round()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/duration/years/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/duration/years/index.md
new file mode 100644
index 000000000000000..3f246c86fdf4941
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/duration/years/index.md
@@ -0,0 +1,59 @@
+---
+title: Temporal.Duration.prototype.years
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Duration/years
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.Duration.years
+---
+
+{{JSRef}}
+
+The **`years`** accessor property of {{jsxref("Temporal.Duration")}} instances returns an integer representing the number of years in the duration.
+
+You can know the sign of `years` by checking the duration's [`sign`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/sign) property.
+
+The set accessor of `years` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/Duration/with", "with()")}} method to create a new `Temporal.Duration` object with the desired new value.
+
+## Examples
+
+### Using years
+
+```js
+const d1 = Temporal.Duration.from({ years: 1, months: 1 });
+const d2 = Temporal.Duration.from({ years: -1, months: -1 });
+const d3 = Temporal.Duration.from({ years: 1 });
+const d4 = Temporal.Duration.from({ months: 12 });
+
+console.log(d1.years); // 1
+console.log(d2.years); // -1
+console.log(d3.years); // 1
+console.log(d4.years); // 0
+
+// Balance d4
+const d4Balanced = d4.round({
+ largestUnit: "year",
+ relativeTo: Temporal.PlainDate.from("2021-01-01"), // ISO 8601 calendar
+});
+console.log(d4Balanced.years); // 1
+console.log(d4Balanced.months); // 0
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Duration/months", "Temporal.Duration.prototype.months")}}
+- {{jsxref("Temporal/Duration/weeks", "Temporal.Duration.prototype.weeks")}}
+- {{jsxref("Temporal/Duration/days", "Temporal.Duration.prototype.days")}}
+- {{jsxref("Temporal/Duration/hours", "Temporal.Duration.prototype.hours")}}
+- {{jsxref("Temporal/Duration/minutes", "Temporal.Duration.prototype.minutes")}}
+- {{jsxref("Temporal/Duration/seconds", "Temporal.Duration.prototype.seconds")}}
+- {{jsxref("Temporal/Duration/milliseconds", "Temporal.Duration.prototype.milliseconds")}}
+- {{jsxref("Temporal/Duration/microseconds", "Temporal.Duration.prototype.microseconds")}}
+- {{jsxref("Temporal/Duration/nanoseconds", "Temporal.Duration.prototype.nanoseconds")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/index.md
new file mode 100644
index 000000000000000..d6ba3d59c425cb0
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/index.md
@@ -0,0 +1,361 @@
+---
+title: Temporal
+slug: Web/JavaScript/Reference/Global_Objects/Temporal
+page-type: javascript-namespace
+browser-compat: javascript.builtins.Temporal
+---
+
+{{JSRef}}
+
+The **`Temporal`** object enables date and time management in various scenarios, including built-in time zone and calendar representation, wall-clock time conversions, arithmetics, formatting, and more. It is designed as a full replacement for the {{jsxref("Date")}} object.
+
+## Description
+
+Unlike most global objects, `Temporal` is not a constructor. You cannot use it with the [`new` operator](/en-US/docs/Web/JavaScript/Reference/Operators/new) or invoke the `Temporal` object as a function. All properties and methods of `Temporal` are static (just like the {{jsxref("Math")}} object).
+
+`Temporal` has an intricate and powerful API. It exposes over 200 utility methods via several classes, so it could appear very complex. We will provide a high-level overview of how these APIs are related to each other.
+
+### Background and concepts
+
+JavaScript has had the {{jsxref("Date")}} object for handling date and time since its first days. However, the `Date` API is based on the poorly designed `java.util.Date` class from Java, which was replaced in the early 2010s; but, because of JavaScript's goal of backward compatibility, `Date` sticks around in the language.
+
+The important lesson to preface the whole introduction is that **date handling is complex**. Most of the problems of `Date` are fixable by adding more methods, but a fundamental design flaw remains: it exposes so many methods on the same object that developers are often confused about what to use, leading to unexpected pitfalls. A well-designed API not only needs to do more, but also should do _less_ with each level of abstraction, because preventing misuse is as important as enabling use cases.
+
+`Date` objects wear two hats simultaneously:
+
+- As a [timestamp](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#the_epoch_timestamps_and_invalid_date): the number of milliseconds or nanoseconds elapsed since a fixed point in time (known as the _epoch_).
+- As a combination of [components](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#date_components_and_time_zones): year, month, day, hour, minute, second, millisecond, and nanosecond. The year, month, and day identifiers only make sense with reference to a _calendar system_. The whole combination maps to a unique instant in history when associated with a time zone. `Date` objects provide methods for reading and modifying these components.
+
+[Time zones](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets) underlie a significant number of date-related bugs. When interacting with a `Date` via the "combination of components" model, the time can only be in two time zones: UTC and local (device), and there's no way to specify an arbitrary time zone. Also lacking is the concept of "no time zone": this is known as a _calendar date_ (for dates) or _wall-clock time_ (for times), which is a time you "read off a calendar or clock". For example, if you are setting a daily wake up alarm, you will want to set it to "8:00AM" regardless of whether it is daylight saving time or not, whether you have traveled to a different time zone, etc.
+
+A second feature lacking from `Date` is a [calendar system](#calendars). Most people may be familiar with the Gregorian calendar, where there are two eras, BC and AD; there are 12 months; each month has a different number of days; there's a leap year every 4 years; and so on. However, some of these concepts may not apply when you are working with another calendar system, such as the Hebrew calendar, the Chinese calendar, the Japanese calendar, etc. With `Date`, you can only work with the Gregorian calendar model.
+
+There are many other undesirable legacies about `Date`, such as all setters being mutating (which often causes unwanted side effects), the [date time string format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#date_time_string_format) being impossible to parse in a consistent way, etc. In the end, the best solution is to build a new API from scratch, which is what `Temporal` is.
+
+### API overview
+
+`Temporal` is a namespace, like {{jsxref("Intl")}}. It contains several classes and namespaces, each of which is designed to handle a specific aspect of date and time management. The classes can be grouped as such:
+
+- Representing a time duration (a difference between two time points): {{jsxref("Temporal.Duration")}}
+- Representing a time point:
+ - Representing a unique instant in history:
+ - As a timestamp: {{jsxref("Temporal.Instant")}}
+ - As a date-time component combination paired with a time zone: {{jsxref("Temporal.ZonedDateTime")}}
+ - Representing a time-zone-unaware date/time (which are all prefixed with "Plain"):
+ - Date (year, month, day) + time (hour, minute, second, millisecond, nanosecond): {{jsxref("Temporal.PlainDateTime")}} (Note: `ZonedDateTime` is equivalent to `PlainDateTime` plus a time zone)
+ - Date (year, month, day): {{jsxref("Temporal.PlainDate")}}
+ - Year, month: {{jsxref("Temporal.PlainYearMonth")}}
+ - Month, day: {{jsxref("Temporal.PlainMonthDay")}}
+ - Time (hour, minute, second, millisecond, nanosecond): {{jsxref("Temporal.PlainTime")}}
+
+Furthermore, there's also another utility namespace, {{jsxref("Temporal.Now")}}, which provides methods for getting the current time in various formats.
+
+### Shared class interface
+
+There are many classes in the `Temporal` namespace, but they share many similar methods. The following table lists all methods of each class (except [conversion methods](#conversion_between_classes)):
+
+
+
+
+
+Instant
+ZonedDateTime
+PlainDateTime
+PlainDate
+PlainTime
+PlainYearMonth
+PlainMonthDay
+
+
+
+
+Construction
+{{jsxref("Temporal/Instant/Instant", "Instant()")}} {{jsxref("Temporal/Instant/from", "Instant.from()")}} {{jsxref("Temporal/Instant/fromEpochMilliseconds", "Instant.fromEpochMilliseconds()")}} {{jsxref("Temporal/Instant/fromEpochNanoseconds", "Instant.fromEpochNanoseconds()")}}
+{{jsxref("Temporal/ZonedDateTime/ZonedDateTime", "ZonedDateTime()")}} {{jsxref("Temporal/ZonedDateTime/from", "ZonedDateTime.from()")}}
+{{jsxref("Temporal/PlainDateTime/PlainDateTime", "PlainDateTime()")}} {{jsxref("Temporal/PlainDateTime/from", "PlainDateTime.from()")}}
+{{jsxref("Temporal/PlainDate/PlainDate", "PlainDate()")}} {{jsxref("Temporal/PlainDate/from", "PlainDate.from()")}}
+{{jsxref("Temporal/PlainTime/PlainTime", "PlainTime()")}} {{jsxref("Temporal/PlainTime/from", "PlainTime.from()")}}
+{{jsxref("Temporal/PlainYearMonth/PlainYearMonth", "PlainYearMonth()")}} {{jsxref("Temporal/PlainYearMonth/from", "PlainYearMonth.from()")}}
+{{jsxref("Temporal/PlainMonthDay/PlainMonthDay", "PlainMonthDay()")}} {{jsxref("Temporal/PlainMonthDay/from", "PlainMonthDay.from()")}}
+
+
+Updater
+N/A
+{{jsxref("Temporal/ZonedDateTime/with", "with()")}} {{jsxref("Temporal/ZonedDateTime/withCalendar", "withCalendar()")}} {{jsxref("Temporal/ZonedDateTime/withTimeZone", "withTimeZone()")}} {{jsxref("Temporal/ZonedDateTime/withPlainTime", "withPlainTime()")}}
+{{jsxref("Temporal/PlainDateTime/with", "with()")}} {{jsxref("Temporal/PlainDateTime/withCalendar", "withCalendar()")}} {{jsxref("Temporal/PlainDateTime/withPlainTime", "withPlainTime()")}}
+{{jsxref("Temporal/PlainDate/with", "with()")}} {{jsxref("Temporal/PlainDate/withCalendar", "withCalendar()")}}
+{{jsxref("Temporal/PlainTime/with", "with()")}}
+{{jsxref("Temporal/PlainYearMonth/with", "with()")}}
+{{jsxref("Temporal/PlainMonthDay/with", "with()")}}
+
+
+Arithmetic
+{{jsxref("Temporal/Instant/add", "add()")}} {{jsxref("Temporal/Instant/subtract", "subtract()")}} {{jsxref("Temporal/Instant/since", "since()")}} {{jsxref("Temporal/Instant/until", "until()")}}
+{{jsxref("Temporal/ZonedDateTime/add", "add()")}} {{jsxref("Temporal/ZonedDateTime/subtract", "subtract()")}} {{jsxref("Temporal/ZonedDateTime/since", "since()")}} {{jsxref("Temporal/ZonedDateTime/until", "until()")}}
+{{jsxref("Temporal/PlainDateTime/add", "add()")}} {{jsxref("Temporal/PlainDateTime/subtract", "subtract()")}} {{jsxref("Temporal/PlainDateTime/since", "since()")}} {{jsxref("Temporal/PlainDateTime/until", "until()")}}
+{{jsxref("Temporal/PlainDate/add", "add()")}} {{jsxref("Temporal/PlainDate/subtract", "subtract()")}} {{jsxref("Temporal/PlainDate/since", "since()")}} {{jsxref("Temporal/PlainDate/until", "until()")}}
+{{jsxref("Temporal/PlainTime/add", "add()")}} {{jsxref("Temporal/PlainTime/subtract", "subtract()")}} {{jsxref("Temporal/PlainTime/since", "since()")}} {{jsxref("Temporal/PlainTime/until", "until()")}}
+{{jsxref("Temporal/PlainYearMonth/add", "add()")}} {{jsxref("Temporal/PlainYearMonth/subtract", "subtract()")}} {{jsxref("Temporal/PlainYearMonth/since", "since()")}} {{jsxref("Temporal/PlainYearMonth/until", "until()")}}
+N/A
+
+
+Rounding
+{{jsxref("Temporal/Instant/round", "round()")}}
+{{jsxref("Temporal/ZonedDateTime/round", "round()")}}
+{{jsxref("Temporal/PlainDateTime/round", "round()")}}
+N/A
+{{jsxref("Temporal/PlainTime/round", "round()")}}
+N/A
+N/A
+
+
+Comparison
+{{jsxref("Temporal/Instant/equals", "equals()")}} {{jsxref("Temporal/Instant/compare", "Instant.compare()")}}
+{{jsxref("Temporal/ZonedDateTime/equals", "equals()")}} {{jsxref("Temporal/ZonedDateTime/compare", "ZonedDateTime.compare()")}}
+{{jsxref("Temporal/PlainDateTime/equals", "equals()")}} {{jsxref("Temporal/PlainDateTime/compare", "PlainDateTime.compare()")}}
+{{jsxref("Temporal/PlainDate/equals", "equals()")}} {{jsxref("Temporal/PlainDate/compare", "PlainDate.compare()")}}
+{{jsxref("Temporal/PlainTime/equals", "equals()")}} {{jsxref("Temporal/PlainTime/compare", "PlainTime.compare()")}}
+{{jsxref("Temporal/PlainYearMonth/equals", "equals()")}} {{jsxref("Temporal/PlainYearMonth/compare", "PlainYearMonth.compare()")}}
+{{jsxref("Temporal/PlainMonthDay/equals", "equals()")}}
+
+
+Serialization
+{{jsxref("Temporal/Instant/toJSON", "toJSON()")}} {{jsxref("Temporal/Instant/toLocaleString", "toLocaleString()")}} {{jsxref("Temporal/Instant/toString", "toString()")}} {{jsxref("Temporal/Instant/valueOf", "valueOf()")}}
+{{jsxref("Temporal/ZonedDateTime/toJSON", "toJSON()")}} {{jsxref("Temporal/ZonedDateTime/toLocaleString", "toLocaleString()")}} {{jsxref("Temporal/ZonedDateTime/toString", "toString()")}} {{jsxref("Temporal/ZonedDateTime/valueOf", "valueOf()")}}
+{{jsxref("Temporal/PlainDateTime/toJSON", "toJSON()")}} {{jsxref("Temporal/PlainDateTime/toLocaleString", "toLocaleString()")}} {{jsxref("Temporal/PlainDateTime/toString", "toString()")}} {{jsxref("Temporal/PlainDateTime/valueOf", "valueOf()")}}
+{{jsxref("Temporal/PlainDate/toJSON", "toJSON()")}} {{jsxref("Temporal/PlainDate/toLocaleString", "toLocaleString()")}} {{jsxref("Temporal/PlainDate/toString", "toString()")}} {{jsxref("Temporal/PlainDate/valueOf", "valueOf()")}}
+{{jsxref("Temporal/PlainTime/toJSON", "toJSON()")}} {{jsxref("Temporal/PlainTime/toLocaleString", "toLocaleString()")}} {{jsxref("Temporal/PlainTime/toString", "toString()")}} {{jsxref("Temporal/PlainTime/valueOf", "valueOf()")}}
+{{jsxref("Temporal/PlainYearMonth/toJSON", "toJSON()")}} {{jsxref("Temporal/PlainYearMonth/toLocaleString", "toLocaleString()")}} {{jsxref("Temporal/PlainYearMonth/toString", "toString()")}} {{jsxref("Temporal/PlainYearMonth/valueOf", "valueOf()")}}
+{{jsxref("Temporal/PlainMonthDay/toJSON", "toJSON()")}} {{jsxref("Temporal/PlainMonthDay/toLocaleString", "toLocaleString()")}} {{jsxref("Temporal/PlainMonthDay/toString", "toString()")}} {{jsxref("Temporal/PlainMonthDay/valueOf", "valueOf()")}}
+
+
+
+
+The following table summarizes which properties are available on each class, giving you a sense of what information each class can represent.
+
+
+
+
+
+Instant
+ZonedDateTime
+PlainDateTime
+PlainDate
+PlainTime
+PlainYearMonth
+PlainMonthDay
+
+
+
+
+Calendar
+N/A
+{{jsxref("Temporal/ZonedDateTime/calendarId", "calendarId")}}
+{{jsxref("Temporal/PlainDateTime/calendarId", "calendarId")}}
+{{jsxref("Temporal/PlainDate/calendarId", "calendarId")}}
+N/A
+{{jsxref("Temporal/PlainYearMonth/calendarId", "calendarId")}}
+{{jsxref("Temporal/PlainMonthDay/calendarId", "calendarId")}}
+
+
+Year-related
+N/A
+{{jsxref("Temporal/ZonedDateTime/era", "era")}} {{jsxref("Temporal/ZonedDateTime/eraYear", "eraYear")}} {{jsxref("Temporal/ZonedDateTime/year", "year")}} {{jsxref("Temporal/ZonedDateTime/inLeapYear", "inLeapYear")}} {{jsxref("Temporal/ZonedDateTime/monthsInYear", "monthsInYear")}} {{jsxref("Temporal/ZonedDateTime/daysInYear", "daysInYear")}}
+{{jsxref("Temporal/PlainDateTime/era", "era")}} {{jsxref("Temporal/PlainDateTime/eraYear", "eraYear")}} {{jsxref("Temporal/PlainDateTime/year", "year")}} {{jsxref("Temporal/PlainDateTime/inLeapYear", "inLeapYear")}} {{jsxref("Temporal/PlainDateTime/monthsInYear", "monthsInYear")}} {{jsxref("Temporal/PlainDateTime/daysInYear", "daysInYear")}}
+{{jsxref("Temporal/PlainDate/era", "era")}} {{jsxref("Temporal/PlainDate/eraYear", "eraYear")}} {{jsxref("Temporal/PlainDate/year", "year")}} {{jsxref("Temporal/PlainDate/inLeapYear", "inLeapYear")}} {{jsxref("Temporal/PlainDate/monthsInYear", "monthsInYear")}} {{jsxref("Temporal/PlainDate/daysInYear", "daysInYear")}}
+N/A
+{{jsxref("Temporal/PlainYearMonth/era", "era")}} {{jsxref("Temporal/PlainYearMonth/eraYear", "eraYear")}} {{jsxref("Temporal/PlainYearMonth/year", "year")}} {{jsxref("Temporal/PlainYearMonth/inLeapYear", "inLeapYear")}} {{jsxref("Temporal/PlainYearMonth/monthsInYear", "monthsInYear")}} {{jsxref("Temporal/PlainYearMonth/daysInYear", "daysInYear")}}
+N/A
+
+
+Month-related
+N/A
+{{jsxref("Temporal/ZonedDateTime/month", "month")}} {{jsxref("Temporal/ZonedDateTime/monthCode", "monthCode")}} {{jsxref("Temporal/ZonedDateTime/daysInMonth", "daysInMonth")}}
+{{jsxref("Temporal/PlainDateTime/month", "month")}} {{jsxref("Temporal/PlainDateTime/monthCode", "monthCode")}} {{jsxref("Temporal/PlainDateTime/daysInMonth", "daysInMonth")}}
+{{jsxref("Temporal/PlainDate/month", "month")}} {{jsxref("Temporal/PlainDate/monthCode", "monthCode")}} {{jsxref("Temporal/PlainDate/daysInMonth", "daysInMonth")}}
+N/A
+{{jsxref("Temporal/PlainYearMonth/month", "month")}} {{jsxref("Temporal/PlainYearMonth/monthCode", "monthCode")}} {{jsxref("Temporal/PlainYearMonth/daysInMonth", "daysInMonth")}}
+{{jsxref("Temporal/PlainMonthDay/monthCode", "monthCode")}}
+
+
+Week-related
+N/A
+{{jsxref("Temporal/ZonedDateTime/weekOfYear", "weekOfYear")}} {{jsxref("Temporal/ZonedDateTime/yearOfWeek", "yearOfWeek")}} {{jsxref("Temporal/ZonedDateTime/daysInWeek", "daysInWeek")}}
+{{jsxref("Temporal/PlainDateTime/weekOfYear", "weekOfYear")}} {{jsxref("Temporal/PlainDateTime/yearOfWeek", "yearOfWeek")}} {{jsxref("Temporal/PlainDateTime/daysInWeek", "daysInWeek")}}
+{{jsxref("Temporal/PlainDate/weekOfYear", "weekOfYear")}} {{jsxref("Temporal/PlainDate/yearOfWeek", "yearOfWeek")}} {{jsxref("Temporal/PlainDate/daysInWeek", "daysInWeek")}}
+N/A
+N/A
+N/A
+
+
+Day-related
+N/A
+{{jsxref("Temporal/ZonedDateTime/day", "day")}} {{jsxref("Temporal/ZonedDateTime/dayOfWeek", "dayOfWeek")}} {{jsxref("Temporal/ZonedDateTime/dayOfYear", "dayOfYear")}}
+{{jsxref("Temporal/PlainDateTime/day", "day")}} {{jsxref("Temporal/PlainDateTime/dayOfWeek", "dayOfWeek")}} {{jsxref("Temporal/PlainDateTime/dayOfYear", "dayOfYear")}}
+{{jsxref("Temporal/PlainDate/day", "day")}} {{jsxref("Temporal/PlainDate/dayOfWeek", "dayOfWeek")}} {{jsxref("Temporal/PlainDate/dayOfYear", "dayOfYear")}}
+N/A
+N/A
+{{jsxref("Temporal/PlainMonthDay/day", "day")}}
+
+
+Time components
+N/A
+{{jsxref("Temporal/ZonedDateTime/hour", "hour")}} {{jsxref("Temporal/ZonedDateTime/minute", "minute")}} {{jsxref("Temporal/ZonedDateTime/second", "second")}} {{jsxref("Temporal/ZonedDateTime/millisecond", "millisecond")}} {{jsxref("Temporal/ZonedDateTime/microsecond", "microsecond")}} {{jsxref("Temporal/ZonedDateTime/nanosecond", "nanosecond")}}
+{{jsxref("Temporal/PlainDateTime/hour", "hour")}} {{jsxref("Temporal/PlainDateTime/minute", "minute")}} {{jsxref("Temporal/PlainDateTime/second", "second")}} {{jsxref("Temporal/PlainDateTime/millisecond", "millisecond")}} {{jsxref("Temporal/PlainDateTime/microsecond", "microsecond")}} {{jsxref("Temporal/PlainDateTime/nanosecond", "nanosecond")}}
+N/A
+{{jsxref("Temporal/PlainTime/hour", "hour")}} {{jsxref("Temporal/PlainTime/minute", "minute")}} {{jsxref("Temporal/PlainTime/second", "second")}} {{jsxref("Temporal/PlainTime/millisecond", "millisecond")}} {{jsxref("Temporal/PlainTime/microsecond", "microsecond")}} {{jsxref("Temporal/PlainTime/nanosecond", "nanosecond")}}
+N/A
+N/A
+
+
+Time zone
+N/A
+{{jsxref("Temporal/ZonedDateTime/timeZoneId", "timeZoneId")}} {{jsxref("Temporal/ZonedDateTime/offset", "offset")}} {{jsxref("Temporal/ZonedDateTime/offsetNanoseconds", "offsetNanoseconds")}} {{jsxref("Temporal/ZonedDateTime/hoursInDay", "hoursInDay")}} {{jsxref("Temporal/ZonedDateTime/getTimeZoneTransition", "getTimeZoneTransition()")}} {{jsxref("Temporal/ZonedDateTime/startOfDay", "startOfDay()")}}
+N/A
+N/A
+N/A
+N/A
+N/A
+
+
+Epoch time
+{{jsxref("Temporal/Instant/epochMilliseconds", "epochMilliseconds")}} {{jsxref("Temporal/Instant/epochNanoseconds", "epochNanoseconds")}}
+{{jsxref("Temporal/ZonedDateTime/epochMilliseconds", "epochMilliseconds")}} {{jsxref("Temporal/ZonedDateTime/epochNanoseconds", "epochNanoseconds")}}
+N/A
+N/A
+N/A
+N/A
+N/A
+
+
+
+
+### Conversion between classes
+
+The table below summarizes all conversion methods that exist on each class.
+
+
+
+
+
+How to convert from...
+
+
+Instant
+ZonedDateTime
+PlainDateTime
+PlainDate
+PlainTime
+PlainYearMonth
+PlainMonthDay
+
+to... Instant
/ {{jsxref("Temporal/ZonedDateTime/toInstant", "toInstant()")}} Convert to ZonedDateTime
first
+ZonedDateTime
{{jsxref("Temporal/Instant/toZonedDateTimeISO", "toZonedDateTimeISO()")}} / {{jsxref("Temporal/PlainDateTime/toZonedDateTime", "toZonedDateTime()")}} {{jsxref("Temporal/PlainDate/toZonedDateTime", "toZonedDateTime()")}} {{jsxref("Temporal/PlainDate/toZonedDateTime", "PlainDate#toZonedDateTime()")}} (pass as argument) Convert to PlainDate
first
+PlainDateTime
Convert to ZonedDateTime
first {{jsxref("Temporal/ZonedDateTime/toPlainDateTime", "toPlainDateTime()")}} / {{jsxref("Temporal/PlainDate/toPlainDateTime", "toPlainDateTime()")}} {{jsxref("Temporal/PlainDate/toPlainDateTime", "PlainDate#toPlainDateTime()")}} (pass as argument)
+PlainDate
{{jsxref("Temporal/ZonedDateTime/toPlainDate", "toPlainDate()")}} {{jsxref("Temporal/PlainDateTime/toPlainDate", "toPlainDate()")}} / No overlap in information {{jsxref("Temporal/PlainYearMonth/toPlainDate", "toPlainDate()")}} {{jsxref("Temporal/PlainMonthDay/toPlainDate", "toPlainDate()")}}
+PlainTime
{{jsxref("Temporal/ZonedDateTime/toPlainTime", "toPlainTime()")}} {{jsxref("Temporal/PlainDateTime/toPlainTime", "toPlainTime()")}} No overlap in information / No overlap in information
+PlainYearMonth
Convert to PlainDate
first {{jsxref("Temporal/PlainDate/toPlainYearMonth", "toPlainYearMonth()")}} No overlap in information / Convert to PlainDate
first
+PlainMonthDay
{{jsxref("Temporal/PlainDate/toPlainMonthDay", "toPlainMonthDay()")}} Convert to PlainDate
first /
+
+
+
+With these tables, you should have a basic idea of how to navigate the `Temporal` API.
+
+### Calendars
+
+A calendar is a way to organize days, typically into periods of weeks, months, years, and eras. Most of the world uses the Gregorian calendar, but there are many other calendars in use, especially in religious and cultural contexts. By default, all calendar-aware `Temporal` objects use the ISO 8601 calendar system, which is based on the Gregorian calendar and defines additional week-numbering rules. {{jsxref("Intl/Locale/getCalendars", "Intl.Locale.prototype.getCalendars()")}} lists most of the calendars likely to be supported by browsers. Here we provide a brief overview of how calendar systems are formed to help you internalize what factors may vary between calendars.
+
+There are three prominent periodic events on Earth: its rotation around the sun (365.242 days for one revolution), the moon's rotation around the Earth (29.53 days from new moon to new moon), and its rotation around its axis (24 hours from sunrise to sunrise). Every culture has the same measure of a "day", which is 24 hours. Occasional changes such as daylight saving time are not part of the calendar, but are part of the [time zone](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets)'s information.
+
+- Some calendars primarily define one year as 365.242 days on average, by defining years to have 365 days, and adding an extra day, the _leap day_, about every 4 years. Then, the year may be further divided into parts called months. These calendars are called _solar calendars_. The Gregorian calendar and the Solar Hijri calendar are solar calendars.
+- Some calendars primarily define one month as 29.5 days on average, by defining months to alternate between 29 and 30 days. Then, 12 months may be grouped into a year of 354 days. These calendars are called _lunar calendars_. The Islamic calendar is a lunar calendar. Because a lunar year is artificial and does not correlate with the season cycle, lunar calendars are generally rarer.
+- Some calendars also primarily define months based on lunar cycles, like lunar calendars. Then, to compensate for the 11-day discrepancy with the solar year, an extra month, the _leap month_, is added about every 3 years. These calendars are called _lunisolar calendars_. The Hebrew calendar and the Chinese calendar are lunisolar calendars.
+
+In `Temporal`, every date under one calendar system is uniquely identified by three components: `year`, `month`, and `day`. `year` is an integer that may be zero or negative, which increases monotonously with time. The year `1` (or `0`, if it exists) is known as the calendar epoch, and is arbitrary for each calendar. `month` is an integer that increments by 1 every time, starting at `1` and ending at `date.monthsInYear`, then resetting back to `1` as the year advances. `day` is also a positive integer, but it may not start at 1 or increment by 1 every time, because political changes may cause days to be skipped or repeated. But in general, `day` monotonously increases and resets as the month advances.
+
+In addition to `year`, a year can also be uniquely identified by the combination of `era` and `eraYear`, for calendars that use eras. For example, the Gregorian calendar uses the era "CE" (Common Era) and "BCE" (Before Common Era), and the year `-1` is the same as `{ era: "bce", eraYear: 1 }`. `era` is a lowercase string, and `eraYear` is an arbitrary integer that may be zero or negative, or even decrease with time (usually for the oldest era).
+
+> [!NOTE]
+> Always use `era` and `eraYear` as a pair; don't use one property without also using the other. In addition, to avoid conflicts, don't combine `year` and `era`/`eraYear` when designating a year. Pick one year representation and use it consistently.
+>
+> Be careful of the following incorrect assumptions about years:
+>
+> - Don't assume that `era` and `eraYear` are always present; they may be `undefined`.
+> - Don't assume that `era` is a user-friendly string; use `toLocaleString()` to format your date instead.
+> - Don't assume that two `year` values from different calendars are comparable; use the `compare()` static method instead.
+> - Don't assume that years have 365/366 days and 12 months; use `daysInYear` and `monthsInYear` instead.
+> - Don't assume that leap years (`inLeapYear` is `true`) have one extra day; they may have an extra month.
+
+In addition to `month`, a month in a year can also be uniquely identified by the `monthCode`. `monthCode` usually maps to the month's name, but `month` does not. For example, in the case of lunisolar calendars, two months with the same `monthCode`, where one belongs to a leap year and the other one does not, will have different `month` values if they come after the leap month, due to the insertion of an extra month.
+
+> [!NOTE]
+> To avoid conflicts, don't combine `month` and `monthCode` when designating a month. Pick one month representation and use it consistently. `month` is more useful if you need the order of months in a year (e.g., when looping through the months), while `monthCode` is more useful if you need the name of the month (e.g., when storing birthdays).
+>
+> Be careful of the following incorrect assumptions about months:
+>
+> - Don't assume that `monthCode` and `month` always correspond.
+> - Don't assume the number of days in a month; use `daysInMonth` instead.
+> - Don't assume that `monthCode` is a user-friendly string; use `toLocaleString()` to format your date instead.
+> - Generally, don't cache the name of months in an array or object. Even though `monthCode` usually maps to the month's name within one calendar, we recommend always computing the month's name using, for example, `date.toLocaleString("en-US", { calendar: date.calendarId, month: "long" })`.
+
+In addition to `day` (which is a month-based index), a day in a year can also be uniquely identified by the `dayOfYear`. `dayOfYear` is a positive integer that increments by 1 every time, starting at `1` and ending at `date.daysInYear`.
+
+The concept of a "week" is not connected with any astronomical event, but is a cultural construct. Therefore, weeks can have 4, 5, 6, 8, or more days, or not even a fixed number of days. To get the specific number of days of the week of a date, use the date's `daysInWeek`. `Temporal` identifies weeks by the combination of `weekOfYear` and `yearOfWeek`. `weekOfYear` is a positive integer that increments by 1 every time, starting at `1`, then resetting back to `1` as the year advances. `yearOfWeek` is generally the same as `year`, but may be different at the start or end of each year, because one week may cross two years, and `yearOfWeek` picks one of the two years based on the calendar's rules.
+
+> [!NOTE]
+> Always use `weekOfYear` and `yearOfWeek` as a pair; don't use `weekOfYear` and `year`.
+>
+> Be careful of the following incorrect assumptions about weeks:
+>
+> - Don't assume that `weekOfYear` and `yearOfWeek` are always present; they may be `undefined`.
+> - Don't assume that weeks are always 7 days long; use `daysInWeek` instead.
+> - Note that the current `Temporal` API does not support year-week dates, so you can't construct dates using these properties or serialize dates to year-week representations. They are only informational properties.
+
+### RFC 9557 format
+
+All `Temporal` classes can be serialized and deserialized using the format specified in [RFC 9557](https://datatracker.ietf.org/doc/html/rfc9557), which is based on [ISO 8601 / RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339). The format, in its full form, is as follows (spaces are only for readability and should not be present in the actual string):
+
+```plain
+YYYY-MM-DD T HH:mm:ss.sssssssss Z/±HH:mm:ss.sssssssss [time_zone_id] [u-ca=calendar_id]
+```
+
+Different classes have different requirements for the presence of each component, so you will find a section titled "RFC 9557 format" in each class's documentation, which specifies the format recognized by that class.
+
+This is very similar to the [date time string format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#date_time_string_format) used by {{jsxref("Date")}}, which is also based on ISO 8601. The main addition is the ability to specify micro- and nanosecond components, and the ability to specify the time zone and calendar system.
+
+## Static properties
+
+- {{jsxref("Temporal.Duration")}}
+ - : Represents a difference between two time points, which can be used in date/time arithmetic. It is fundamentally represented as a combination of years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, and nanoseconds values.
+- {{jsxref("Temporal.Instant")}}
+ - : Represents a unique point in history, with nanosecond precision. It is fundamentally represented as the number of nanoseconds since the Unix epoch (midnight at the beginning of January 1, 1970, UTC), without any time zone or calendar system.
+- {{jsxref("Temporal.Now")}}
+ - : Provides methods for getting the current time in various formats.
+- {{jsxref("Temporal.PlainDate")}}
+ - : Represents a calendar date (a date without a time or time zone); for example, an event on a calendar which happens during the whole day no matter which time zone it's happening in. It is fundamentally represented as an ISO 8601 calendar date, with year, month, and day fields, and an associated calendar system.
+- {{jsxref("Temporal.PlainDateTime")}}
+ - : Represents a date (calendar date) and time (wall-clock time) without a time zone. It is fundamentally represented as a combination of a [date](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate) (with an associated calendar system) and a [time](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime).
+- {{jsxref("Temporal.PlainMonthDay")}}
+ - : Represents the month and day of a calendar date, without a year or time zone; for example, an event on a calendar that recurs every year and happens during the whole day. It is fundamentally represented as an ISO 8601 calendar date, with year, month, and day fields, and an associated calendar system. The year is used to disambiguate the month-day in non-ISO calendar systems.
+- {{jsxref("Temporal.PlainTime")}}
+ - : Represents a time without a date or time zone; for example, a recurring event that happens at the same time every day. It is fundamentally represented as a combination of hour, minute, second, millisecond, microsecond, and nanosecond values.
+- {{jsxref("Temporal.PlainYearMonth")}}
+ - : Represents the year and month of a calendar date, without a day or time zone; for example, an event on a calendar that happens during the whole month. It is fundamentally represented as an ISO 8601 calendar date, with year, month, and day fields, and an associated calendar system. The day is used to disambiguate the year-month in non-ISO calendar systems.
+- {{jsxref("Temporal.ZonedDateTime")}}
+ - : Represents a date and time with a time zone. It is fundamentally represented as a combination of an [instant](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Instant), a time zone, and a calendar system.
+- `Temporal[Symbol.toStringTag]`
+ - : The initial value of the [`[Symbol.toStringTag]`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) property is the string `"Temporal"`. This property is used in {{jsxref("Object.prototype.toString()")}}.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Intl.DateTimeFormat")}}
+- {{jsxref("Intl.RelativeTimeFormat")}}
+- {{jsxref("Intl.DurationFormat")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/instant/add/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/instant/add/index.md
new file mode 100644
index 000000000000000..0514f618b560180
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/instant/add/index.md
@@ -0,0 +1,98 @@
+---
+title: Temporal.Instant.prototype.add()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Instant/add
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.Instant.add
+---
+
+{{JSRef}}
+
+The **`add()`** method of {{jsxref("Temporal.Instant")}} instances returns a new `Temporal.Instant` object representing this instant moved forward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}).
+
+## Syntax
+
+```js-nolint
+add(duration)
+```
+
+### Parameters
+
+- `duration`
+ - : A string, an object, or a {{jsxref("Temporal.Duration")}} instance representing a duration to add to this instant. It is converted to a `Temporal.Duration` object using the same algorithm as {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}.
+
+### Return value
+
+A new {{jsxref("Temporal.Instant")}} object representing adding `duration` to this instant. If `duration` is positive, then the returned instant is later than this instant; if `duration` is negative, then the returned instant is earlier than this instant.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - `duration` is a [calendar duration](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#calendar_durations) (it has a non-zero `years`, `months`, or `weeks`), or has a non-zero `days`, because calendar durations are ambiguous without a calendar and time reference.
+ - The sum of `this` and `duration` overflows the maximum or underflows the minimum representable instant, which is ±108 days (about ±273,972.6 years).
+
+## Description
+
+In essence, the `add()` method first gets the number of nanoseconds represented by `duration`, adds it to this instant's {{jsxref("Temporal/Instant/epochNanoseconds", "epochNanoseconds")}}, and then creates a new `Temporal.Instant` object from the result. Therefore, the duration must unambiguously represent a fixed amount of time.
+
+If you want to add a calendar duration, the addition must be performed in the context of a calendar and a time zone to account for the variable lengths of months, years, and days (because of daylight saving time). In this case, convert the instant to a {{jsxref("Temporal.ZonedDateTime")}} object, add the duration, and then convert the result back to an instant.
+
+Adding a duration is equivalent to [subtracting](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Instant/subtract) its [negation](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/negated).
+
+## Examples
+
+### Adding a Temporal.Duration
+
+```js
+const instant = Temporal.Instant.fromEpochMilliseconds(0);
+const duration = Temporal.Duration.from("PT1S");
+const newInstant = instant.add(duration);
+console.log(newInstant.epochMilliseconds); // 1000
+```
+
+### Adding an object or a string
+
+```js
+const instant = Temporal.Instant.fromEpochMilliseconds(0);
+const newInstant = instant.add({ seconds: 1 });
+console.log(newInstant.epochMilliseconds); // 1000
+
+const newInstant2 = instant.add("PT1S");
+console.log(newInstant2.epochMilliseconds); // 1000
+```
+
+### Adding a calendar duration
+
+```js
+const instant = Temporal.Instant.fromEpochMilliseconds(1730610000000);
+const duration = Temporal.Duration.from({ days: 1 });
+
+// This instant is 2024-11-03T01:00:00-04:00[America/New_York],
+// which is a DST transition day in the US.
+const instant2 = instant
+ .toZonedDateTimeISO("America/New_York")
+ .add(duration)
+ .toInstant();
+console.log(instant2.epochMilliseconds); // 1730700000000
+
+// The same instant is not a DST transition day in Paris.
+const instant3 = instant
+ .toZonedDateTimeISO("Europe/Paris")
+ .add(duration)
+ .toInstant();
+console.log(instant3.epochMilliseconds); // 1730696400000
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Instant")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Instant/subtract", "Temporal.Instant.prototype.subtract()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/instant/compare/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/instant/compare/index.md
new file mode 100644
index 000000000000000..885592999b7ad9c
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/instant/compare/index.md
@@ -0,0 +1,70 @@
+---
+title: Temporal.Instant.compare()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Instant/compare
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.Instant.compare
+---
+
+{{JSRef}}
+
+The **`Temporal.Instant.compare()`** static method returns a number (-1, 0, or 1) indicating whether the first instant comes before, is the same as, or comes after the second instant. It is equivalent to comparing the {{jsxref("Temporal/Instant/epochNanoseconds", "epochNanoseconds")}} of the two instants.
+
+## Syntax
+
+```js-nolint
+Temporal.Instant.compare(instant1, instant2)
+```
+
+### Parameters
+
+- `instant1`
+ - : A string or a {{jsxref("Temporal.Instant")}} instance representing the first instant to compare. It is converted to a `Temporal.Instant` object using the same algorithm as {{jsxref("Temporal/Instant/from", "Temporal.Instant.from()")}}.
+- `instant2`
+ - : The second instant to compare, converted to a `Temporal.Instant` object using the same algorithm as `instant1`.
+
+### Return value
+
+Returns `-1` if `instant1` comes before `instant2`, `0` if they are the same, and `1` if `instant1` comes after.
+
+## Examples
+
+### Using Temporal.Instant.compare()
+
+```js
+const instant1 = Temporal.Instant.from("2021-08-01T12:34:56Z");
+const instant2 = Temporal.Instant.from("2021-08-01T12:34:56Z");
+
+console.log(Temporal.Instant.compare(instant1, instant2)); // 0
+
+const instant3 = Temporal.Instant.from("2021-08-01T13:34:56Z");
+console.log(Temporal.Instant.compare(instant1, instant3)); // -1
+```
+
+### Sorting an array of instants
+
+The purpose of this `compare()` function is to act as a comparator to be passed to {{jsxref("Array.prototype.sort()")}} and related functions.
+
+```js
+const instants = [
+ Temporal.Instant.from("2021-08-01T12:34:56Z"),
+ Temporal.Instant.from("2021-08-01T12:34:56+01:00"),
+ Temporal.Instant.from("2021-08-01T12:34:56-01:00"),
+];
+
+instants.sort(Temporal.Instant.compare);
+console.log(instants.map((instant) => instant.toString()));
+// [ '2021-08-01T11:34:56Z', '2021-08-01T12:34:56Z', '2021-08-01T13:34:56Z' ]
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Instant")}}
+- {{jsxref("Temporal/Instant/equals", "Temporal.Instant.prototype.equals()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/instant/epochmilliseconds/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/instant/epochmilliseconds/index.md
new file mode 100644
index 000000000000000..bd55388424fe4ce
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/instant/epochmilliseconds/index.md
@@ -0,0 +1,58 @@
+---
+title: Temporal.Instant.prototype.epochMilliseconds
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Instant/epochMilliseconds
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.Instant.epochMilliseconds
+---
+
+{{JSRef}}
+
+The **`epochMilliseconds`** accessor property of {{jsxref("Temporal.Instant")}} instances returns an integer representing the number of milliseconds elapsed since the Unix epoch (midnight at the beginning of January 1, 1970, UTC) to this instant. It is equivalent to dividing `epochNanoseconds` by `1e6` and flooring the result.
+
+The set accessor of `epochMilliseconds` is `undefined`. You cannot change this property directly. To create a new `Temporal.Instant` object with the desired new `epochMilliseconds` value, use the {{jsxref("Temporal/Instant/add", "add()")}} or {{jsxref("Temporal/Instant/subtract", "subtract()")}} method with the appropriate duration.
+
+## Examples
+
+### Using epochMilliseconds
+
+```js
+const instant = Temporal.Instant.from("2021-08-01T12:34:56.789Z");
+console.log(instant.epochMilliseconds); // 1627821296789
+
+const instant2 = Temporal.Instant.from("1969-08-01T12:34:56.789Z");
+console.log(instant2.epochMilliseconds); // -13173903211
+```
+
+### Changing epochMilliseconds
+
+This is the method that allows you to move by any amount of time:
+
+```js
+const instant = Temporal.Instant.from("2021-08-01T12:34:56.789Z");
+const instant1hourLater = instant.add({ hours: 1 });
+console.log(instant1hourLater.epochMilliseconds); // 1627824896789
+```
+
+If you already know the change in milliseconds, you can also directly construct a new `Temporal.Instant` object:
+
+```js
+const instant = Temporal.Instant.from("2021-08-01T12:34:56.789Z");
+const instant1hourLater = Temporal.Instant.fromEpochMilliseconds(
+ instant.epochMilliseconds + 3600000,
+);
+console.log(instant1hourLater.epochMilliseconds); // 1627824896789
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Instant")}}
+- {{jsxref("Temporal/Instant/epochNanoseconds", "Temporal.Instant.prototype.epochNanoseconds")}}
+- {{jsxref("Temporal/Instant/fromEpochMilliseconds", "Temporal.Instant.fromEpochMilliseconds()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/instant/epochnanoseconds/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/instant/epochnanoseconds/index.md
new file mode 100644
index 000000000000000..4c0006f095a0c42
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/instant/epochnanoseconds/index.md
@@ -0,0 +1,60 @@
+---
+title: Temporal.Instant.prototype.epochNanoseconds
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Instant/epochNanoseconds
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.Instant.epochNanoseconds
+---
+
+{{JSRef}}
+
+The **`epochNanoseconds`** accessor property of {{jsxref("Temporal.Instant")}} instances returns a {{jsxref("BigInt")}} representing the number of nanoseconds elapsed since the Unix epoch (midnight at the beginning of January 1, 1970, UTC) to this instant.
+
+The set accessor of `epochNanoseconds` is `undefined`. You cannot change this property directly. To create a new `Temporal.Instant` object with the desired new `epochNanoseconds` value, use the {{jsxref("Temporal/Instant/add", "add()")}} or {{jsxref("Temporal/Instant/subtract", "subtract()")}} method with the appropriate duration.
+
+An instant can only represent ±108 days (about ±273,972.6 years) around the epoch, which is ±8.64e21 nanoseconds. Attempting to set `epochNanosecond` beyond this boundary throws a {{jsxref("RangeError")}}.
+
+## Examples
+
+### Using epochNanoseconds
+
+```js
+const instant = Temporal.Instant.from("2021-08-01T12:34:56.789Z");
+console.log(instant.epochNanoseconds); // 1627821296789000000n
+
+const instant2 = Temporal.Instant.from("1969-08-01T12:34:56.789Z");
+console.log(instant2.epochNanoseconds); // -13173903211000000n
+```
+
+### Changing epochNanoseconds
+
+This is the method that allows you to move by any amount of time:
+
+```js
+const instant = Temporal.Instant.from("2021-08-01T12:34:56.789Z");
+const instant1hourLater = instant.add({ hours: 1 });
+console.log(instant1hourLater.epochNanoseconds); // 1627824896789000000n
+```
+
+If you already know the change in nanoseconds, you can also directly construct a new `Temporal.Instant` object:
+
+```js
+const instant = Temporal.Instant.from("2021-08-01T12:34:56.789Z");
+const instant1hourLater = Temporal.Instant.fromEpochNanoseconds(
+ instant.epochNanoseconds + 3600000000000n,
+);
+console.log(instant1hourLater.epochNanoseconds); // 1627824896789000000n
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Instant")}}
+- {{jsxref("Temporal/Instant/epochMilliseconds", "Temporal.Instant.prototype.epochMilliseconds")}}
+- {{jsxref("Temporal/Instant/fromEpochNanoseconds", "Temporal.Instant.fromEpochNanoseconds()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/instant/equals/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/instant/equals/index.md
new file mode 100644
index 000000000000000..e651e9d9b94e2f7
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/instant/equals/index.md
@@ -0,0 +1,48 @@
+---
+title: Temporal.Instant.prototype.equals()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Instant/equals
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.Instant.equals
+---
+
+{{JSRef}}
+
+The **`equals()`** method of {{jsxref("Temporal.Instant")}} instances returns `true` if this instant is equivalent in value to another instant (in a form convertible by {{jsxref("Temporal/Instant/from", "Temporal.Instant.from()")}}), and `false` otherwise. They are compared by their {{jsxref("Temporal/Instant/epochNanoseconds", "epochNanoseconds")}}. It is equivalent to `Temporal.Instant.compare(this, other) === 0`.
+
+## Syntax
+
+```js-nolint
+equals(other)
+```
+
+### Parameters
+
+- `other`
+ - : A string or a {{jsxref("Temporal.Instant")}} instance representing the other instant to compare. It is converted to a `Temporal.Instant` object using the same algorithm as {{jsxref("Temporal/Instant/from", "Temporal.Instant.from()")}}.
+
+### Return value
+
+`true` if this instant is equal to `other` by nanoseconds, `false` otherwise.
+
+## Examples
+
+### Using equals()
+
+```js
+const instant1 = Temporal.Instant.from("2021-08-01T12:34:56Z");
+const instant2 = Temporal.Instant.fromEpochMilliseconds(1627821296000);
+console.log(instant1.equals(instant2)); // true
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Instant")}}
+- {{jsxref("Temporal/Instant/compare", "Temporal.Instant.compare()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/instant/from/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/instant/from/index.md
new file mode 100644
index 000000000000000..c3043a5b95f88fe
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/instant/from/index.md
@@ -0,0 +1,72 @@
+---
+title: Temporal.Instant.from()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Instant/from
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.Instant.from
+---
+
+{{JSRef}}
+
+The **`Temporal.Instant.from()`** static method creates a new `Temporal.Instant` object from another `Temporal.Instant` object, or an [RFC 9557](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Instant#rfc_9557_format) string.
+
+## Syntax
+
+```js-nolint
+Temporal.Instant.from(info)
+```
+
+### Parameters
+
+- `info`
+ - : One of the following:
+ - A {{jsxref("Temporal.Instant")}} instance, which creates a copy of the instance.
+ - An [RFC 9557](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Instant#rfc_9557_format) string containing a date, time, and time zone offset. The time zone name is ignored; only the offset is used.
+
+### Return value
+
+A new `Temporal.Instant` object representing the instant in time specified by `info`.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Thrown if `info` is not a `Temporal.Instant` instance or a string.
+- {{jsxref("RangeError")}}
+ - : Thrown if the string is not a valid RFC 9557 string, or if the date and time are outside the range of representable instants (±108 days, or about ±273,972.6 years).
+
+## Examples
+
+### Creating an instant from a string
+
+```js
+const instant = Temporal.Instant.from("1970-01-01T00Z");
+console.log(instant.toString()); // 1970-01-01T00:00:00Z
+
+const instant2 = Temporal.Instant.from("1970-01-01T00+08:00");
+console.log(instant.toString()); // 1969-12-31T16:00:00Z
+
+// America/New_York is UTC-5 in January 1970, not UTC+8
+const instant3 = Temporal.Instant.from("1970-01-01T00+08:00[America/New_York]");
+console.log(instant.toString()); // 1969-12-31T16:00:00Z; the time zone name is ignored
+```
+
+### Creating an instant from another instant
+
+```js
+const instant = Temporal.Instant.from("1970-01-01T00Z");
+const instant2 = Temporal.Instant.from(instant);
+console.log(instant2.toString()); // 1970-01-01T00:00:00Z
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Instant")}}
+- {{jsxref("Temporal/Instant/fromEpochMilliseconds", "Temporal.Instant.fromEpochMilliseconds()")}}
+- {{jsxref("Temporal/Instant/fromEpochNanoseconds", "Temporal.Instant.fromEpochNanoseconds()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/instant/fromepochmilliseconds/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/instant/fromepochmilliseconds/index.md
new file mode 100644
index 000000000000000..6e626e758f08707
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/instant/fromepochmilliseconds/index.md
@@ -0,0 +1,61 @@
+---
+title: Temporal.Instant.fromEpochMilliseconds()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Instant/fromEpochMilliseconds
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.Instant.fromEpochMilliseconds
+---
+
+{{JSRef}}
+
+The **`Temporal.Instant.fromEpochMilliseconds()`** static method creates a new `Temporal.Instant` object from the number of milliseconds since the Unix epoch (midnight at the beginning of January 1, 1970, UTC).
+
+To convert a {{jsxref("Date")}} object to a `Temporal.Instant` object, use {{jsxref("Date.prototype.toTemporalInstant()")}} instead.
+
+## Syntax
+
+```js-nolint
+Temporal.Instant.fromEpochMilliseconds(epochMilliseconds)
+```
+
+### Parameters
+
+- `epochMilliseconds`
+ - : A number representing the number of milliseconds since the Unix epoch. Internally, it is converted to a BigInt and multiplied by `1e6` to get the number of nanoseconds.
+
+### Return value
+
+A new `Temporal.Instant` object representing the instant in time specified by `epochMilliseconds`.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if `epochMilliseconds` is outside the range of a representable instant, which is ±108 days (±8.64e15 milliseconds, or about ±273,972.6 years), or if it cannot be converted to a BigInt (e.g., not an integer).
+
+## Examples
+
+### Using Temporal.Instant.fromEpochMilliseconds()
+
+```js
+const instant = Temporal.Instant.fromEpochMilliseconds(0);
+console.log(instant.toString()); // 1970-01-01T00:00:00Z
+const vostok1Liftoff = Temporal.Instant.fromEpochMilliseconds(-275248380000);
+console.log(vostok1Liftoff.toString()); // 1961-04-12T06:07:00Z
+const sts1Liftoff = Temporal.Instant.fromEpochMilliseconds(355924804000);
+console.log(sts1Liftoff.toString()); // 1981-04-12T12:00:04Z
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Instant")}}
+- {{jsxref("Temporal/Instant/epochMilliseconds", "Temporal.Instant.prototype.epochMilliseconds")}}
+- {{jsxref("Temporal/Instant/from", "Temporal.Instant.from()")}}
+- {{jsxref("Temporal/Instant/fromEpochNanoseconds", "Temporal.Instant.fromEpochNanoseconds()")}}
+- {{jsxref("Date.prototype.toTemporalInstant()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/instant/fromepochnanoseconds/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/instant/fromepochnanoseconds/index.md
new file mode 100644
index 000000000000000..d1e0a62cd4b4389
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/instant/fromepochnanoseconds/index.md
@@ -0,0 +1,62 @@
+---
+title: Temporal.Instant.fromEpochNanoseconds()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Instant/fromEpochNanoseconds
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.Instant.fromEpochNanoseconds
+---
+
+{{JSRef}}
+
+The **`Temporal.Instant.fromEpochNanoseconds()`** static method creates a new `Temporal.Instant` object from the number of nanoseconds since the Unix epoch (midnight at the beginning of January 1, 1970, UTC).
+
+To convert a {{jsxref("Date")}} object to a `Temporal.Instant` object, use {{jsxref("Date.prototype.toTemporalInstant()")}} instead.
+
+## Syntax
+
+```js-nolint
+Temporal.Instant.fromEpochNanoseconds(epochNanoseconds)
+```
+
+### Parameters
+
+- `epochNanoseconds`
+ - : A [BigInt](/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) representing the number of nanoseconds since the Unix epoch.
+
+### Return value
+
+A new `Temporal.Instant` object representing the instant in time specified by `epochNanoseconds`.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if `epochNanoseconds` is outside the range of a representable instant, which is ±108 days (±8.64e21 nanoseconds, or about ±273,972.6 years).
+
+## Examples
+
+### Using Temporal.Instant.fromEpochNanoseconds()
+
+```js
+const instant = Temporal.Instant.fromEpochNanoseconds(0n);
+console.log(instant.toString()); // 1970-01-01T00:00:00Z
+const vostok1Liftoff =
+ Temporal.Instant.fromEpochNanoseconds(-275248380000000000n);
+console.log(vostok1Liftoff.toString()); // 1961-04-12T06:07:00Z
+const sts1Liftoff = Temporal.Instant.fromEpochNanoseconds(355924804000000000n);
+console.log(sts1Liftoff.toString()); // 1981-04-12T12:00:04Z
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Instant")}}
+- {{jsxref("Temporal/Instant/epochNanoseconds", "Temporal.Instant.prototype.epochNanoseconds")}}
+- {{jsxref("Temporal/Instant/from", "Temporal.Instant.from()")}}
+- {{jsxref("Temporal/Instant/fromEpochMilliseconds", "Temporal.Instant.fromEpochMilliseconds()")}}
+- {{jsxref("Date.prototype.toTemporalInstant()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/instant/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/instant/index.md
new file mode 100644
index 000000000000000..4bc8f55c2ac965a
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/instant/index.md
@@ -0,0 +1,113 @@
+---
+title: Temporal.Instant
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Instant
+page-type: javascript-class
+browser-compat: javascript.builtins.Temporal.Instant
+---
+
+{{JSRef}}
+
+The **`Temporal.Instant`** object represents a unique point in history, with nanosecond precision. It is fundamentally represented as the number of nanoseconds since the Unix epoch (midnight at the beginning of January 1, 1970, UTC), without any time zone or calendar system.
+
+## Description
+
+`Temporal.Instant` is semantically the same as {{jsxref("Date")}}. They both encapsulate a single point in time, but `Temporal.Instant` is more precise because it stores nanoseconds rather than milliseconds. `Temporal.Instant` also avoids pitfalls of `Date` because it does not assume any calendar or time zone information—if you want to read any date or time information such as year or month, you need to convert it to a {{jsxref("Temporal.ZonedDateTime")}} first, using {{jsxref("Temporal/Instant/toZonedDateTimeISO()", "toZonedDateTimeISO()")}}.
+
+You can convert from `Date` to `Temporal.Instant` using the {{jsxref("Date.prototype.toTemporalInstant()")}} method, which should be preferred over other methods such as `Temporal.Instant.fromEpochMilliseconds()` because the former involves less user code and may be more optimized. You can also convert from `Temporal.Instant` to `Date` using its epoch milliseconds, such as `new Date(instant.epochMilliseconds)`.
+
+### RFC 9557 format
+
+`Instant` objects can be serialized and parsed using the [RFC 9557](https://datatracker.ietf.org/doc/html/rfc9557) format, an extension to the [ISO 8601 / RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) format. The string has the following form (spaces are only for readability and should not be present in the actual string):
+
+```plain
+YYYY-MM-DD T HH:mm:ss.sssssssss Z/±HH:mm:ss.sssssssss
+```
+
+- `YYYY`
+ - : Either a four-digit number, or a six-digit number with a `+` or `-` sign.
+- `MM`
+ - : A two-digit number from `01` to `12`.
+- `DD`
+ - : A two-digit number from `01` to `31`. The `YYYY`, `MM`, and `DD` components can be separated by `-` or nothing.
+- `T`
+ - : The date-time separator, which can be `T`, `t`, or a space.
+- `HH`
+ - : A two-digit number from `00` to `23`.
+- `mm` {{optional_inline}}
+ - : A two-digit number from `00` to `59`. Defaults to `00`.
+- `ss.sssssssss` {{optional_inline}}
+ - : A two-digit number from `00` to `59`. May optionally be followed by a `.` or `,` and one to nine digits. Defaults to `00`. The `HH`, `mm`, and `ss` components can be separated by `:` or nothing. You can omit either just `ss` or both `ss` and `mm`, so the time can be one of three forms: `HH`, `HH:mm`, or `HH:mm:ss.sssssssss`.
+- `Z/±HH:mm:ss.sssssssss`
+ - : Either the UTC designator `Z` or `z`, or an offset from UTC in the form `+` or `-` followed by the same format as the time component. Note that subminute precision may be unsupported by other systems. If an offset is provided, the time is interpreted in the specified offset.
+
+As an input, you may optionally include the time zone identifier and calendar, in the same format as [`ZonedDateTime`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#rfc_9557_format), but they will be ignored. Other annotations in the `[key=value]` format are also ignored, and they must not have the critical flag.
+
+When serializing, you can configure the fractional second digits and offset.
+
+## Constructor
+
+- {{jsxref("Temporal/Instant/Instant", "Temporal.Instant()")}}
+ - : Creates a new `Temporal.Instant` object by directly supplying the underlying data.
+
+## Static methods
+
+- {{jsxref("Temporal/Instant/compare", "Temporal.Instant.compare()")}}
+ - : Returns a number (-1, 0, or 1) indicating whether the first instant comes before, is the same as, or comes after the second instant. Equivalent to comparing the {{jsxref("Temporal/Instant/epochNanoseconds", "epochNanoseconds")}} of the two instants.
+- {{jsxref("Temporal/Instant/from", "Temporal.Instant.from()")}}
+ - : Creates a new `Temporal.Instant` object from another `Temporal.Instant` object, or an [RFC 9557](#rfc_9557_format) string.
+- {{jsxref("Temporal/Instant/fromEpochMilliseconds", "Temporal.Instant.fromEpochMilliseconds()")}}
+ - : Creates a new `Temporal.Instant` object from the number of milliseconds since the Unix epoch (midnight at the beginning of January 1, 1970, UTC).
+- {{jsxref("Temporal/Instant/fromEpochNanoseconds", "Temporal.Instant.fromEpochNanoseconds()")}}
+ - : Creates a new `Temporal.Instant` object from the number of nanoseconds since the Unix epoch (midnight at the beginning of January 1, 1970, UTC).
+
+## Instance properties
+
+These properties are defined on `Temporal.Instant.prototype` and shared by all `Temporal.Instant` instances.
+
+- {{jsxref("Object/constructor", "Temporal.Instant.prototype.constructor")}}
+ - : The constructor function that created the instance object. For `Temporal.Instant` instances, the initial value is the {{jsxref("Temporal/Instant/Instant", "Temporal.Instant()")}} constructor.
+- {{jsxref("Temporal/Instant/epochMilliseconds", "Temporal.Instant.prototype.epochMilliseconds")}}
+ - : Returns an integer representing the number of milliseconds elapsed since the Unix epoch (midnight at the beginning of January 1, 1970, UTC) to this instant. Equivalent to dividing `epochNanoseconds` by `1e6` and flooring it.
+- {{jsxref("Temporal/Instant/epochNanoseconds", "Temporal.Instant.prototype.epochNanoseconds")}}
+ - : Returns a {{jsxref("BigInt")}} representing the number of nanoseconds since the Unix epoch (midnight at the beginning of January 1, 1970, UTC) to this instant.
+- `Temporal.Instant.prototype[Symbol.toStringTag]`
+ - : The initial value of the [`[Symbol.toStringTag]`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) property is the string `"Temporal.Instant"`. This property is used in {{jsxref("Object.prototype.toString()")}}.
+
+## Instance methods
+
+- {{jsxref("Temporal/Instant/add", "Temporal.Instant.prototype.add()")}}
+ - : Returns a new `Temporal.Instant` object representing this instant moved forward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}).
+- {{jsxref("Temporal/Instant/equals", "Temporal.Instant.prototype.equals()")}}
+ - : Returns `true` if this instant is equivalent in value to another instant (in a form convertible by {{jsxref("Temporal/Instant/from", "Temporal.Instant.from()")}}), and `false` otherwise. They are compared by their epoch nanoseconds. Equivalent to `Temporal.Instant.compare(this, other) === 0`.
+- {{jsxref("Temporal/Instant/round", "Temporal.Instant.prototype.round()")}}
+ - : Returns a new `Temporal.Instant` object representing this instant rounded to the given unit.
+- {{jsxref("Temporal/Instant/since", "Temporal.Instant.prototype.since()")}}
+ - : Returns a new {{jsxref("Temporal.Duration")}} object representing the duration from another instant (in a form convertible by {{jsxref("Temporal/Instant/from", "Temporal.Instant.from()")}}) to this instant. The duration is positive if the other instant is before this instant, and negative if after.
+- {{jsxref("Temporal/Instant/subtract", "Temporal.Instant.prototype.subtract()")}}
+ - : Returns a new `Temporal.Instant` object representing this instant moved backward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}).
+- {{jsxref("Temporal/Instant/toJSON", "Temporal.Instant.prototype.toJSON()")}}
+ - : Returns a string representing this instant in the same [RFC 9557 format](#rfc_9557_format) as calling {{jsxref("Temporal/Instant/toString", "toString()")}}. Intended to be implicitly called by {{jsxref("JSON.stringify()")}}.
+- {{jsxref("Temporal/Instant/toLocaleString", "Temporal.Instant.prototype.toLocaleString()")}}
+ - : Returns a string with a language-sensitive representation of this instant. In implementations with [`Intl.DateTimeFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat) support, this method delegates to `Intl.DateTimeFormat`.
+- {{jsxref("Temporal/Instant/toString", "Temporal.Instant.prototype.toString()")}}
+ - : Returns a string representing this instant in the [RFC 9557 format](#rfc_9557_format) using the specified time zone.
+- {{jsxref("Temporal/Instant/toZonedDateTimeISO", "Temporal.Instant.prototype.toZonedDateTimeISO()")}}
+ - : Returns a new {{jsxref("Temporal.ZonedDateTime")}} object representing this instant in the specified time zone using the ISO 8601 calendar system.
+- {{jsxref("Temporal/Instant/until", "Temporal.Instant.prototype.until()")}}
+ - : Returns a new {{jsxref("Temporal.Duration")}} object representing the duration from this instant to another instant (in a form convertible by {{jsxref("Temporal/Instant/from", "Temporal.Instant.from()")}}). The duration is positive if the other instant is after this instant, and negative if before.
+- {{jsxref("Temporal/Instant/valueOf", "Temporal.Instant.prototype.valueOf()")}}
+ - : Throws a {{jsxref("TypeError")}}, which prevents `Temporal.Instant` instances from being [implicitly converted to primitives](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) when used in arithmetic or comparison operations.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal.ZonedDateTime")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/instant/instant/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/instant/instant/index.md
new file mode 100644
index 000000000000000..321c0589c38996d
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/instant/instant/index.md
@@ -0,0 +1,63 @@
+---
+title: Temporal.Instant()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Instant/Instant
+page-type: javascript-constructor
+browser-compat: javascript.builtins.Temporal.Instant.Instant
+---
+
+{{JSRef}}
+
+The **`Temporal.Instant()`** constructor creates {{jsxref("Temporal.Instant")}} objects.
+
+This constructor is exactly equivalent to calling {{jsxref("Temporal/Instant/fromEpochNanoseconds", "Temporal.Instant.fromEpochNanoseconds()")}}.
+
+## Syntax
+
+```js-nolint
+new Temporal.Instant(epochNanoseconds)
+```
+
+> **Note:** `Temporal.Instant()` can only be constructed with [`new`](/en-US/docs/Web/JavaScript/Reference/Operators/new). Attempting to call it without `new` throws a {{jsxref("TypeError")}}.
+
+### Parameters
+
+- `epochNanoseconds`
+ - : A [BigInt](/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) representing the number of nanoseconds since the Unix epoch.
+
+### Return value
+
+A new `Temporal.Instant` object representing the instant in time specified by `epochNanoseconds`.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if `epochNanoseconds` is outside the range of a representable instant, which is ±108 days (±8.64e21 nanoseconds, or about ±273,972.6 years).
+
+## Examples
+
+### Using Temporal.Instant()
+
+```js
+const instant = new Temporal.Instant(0n);
+console.log(instant.toString()); // 1970-01-01T00:00:00Z
+const vostok1Liftoff = new Temporal.Instant(-275248380000000000n);
+console.log(vostok1Liftoff.toString()); // 1961-04-12T06:07:00Z
+const sts1Liftoff = new Temporal.Instant(355924804000000000n);
+console.log(sts1Liftoff.toString()); // 1981-04-12T12:00:04Z
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Instant")}}
+- {{jsxref("Temporal/Instant/epochNanoseconds", "Temporal.Instant.prototype.epochNanoseconds")}}
+- {{jsxref("Temporal/Instant/from", "Temporal.Instant.from()")}}
+- {{jsxref("Temporal/Instant/fromEpochMilliseconds", "Temporal.Instant.fromEpochMilliseconds()")}}
+- {{jsxref("Temporal/Instant/fromEpochNanoseconds", "Temporal.Instant.fromEpochNanoseconds()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/instant/round/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/instant/round/index.md
new file mode 100644
index 000000000000000..50acb0791e6aaa3
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/instant/round/index.md
@@ -0,0 +1,64 @@
+---
+title: Temporal.Instant.prototype.round()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Instant/round
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.Instant.round
+---
+
+{{JSRef}}
+
+The **`round()`** method of {{jsxref("Temporal.Instant")}} instances returns a new `Temporal.Instant` object representing this instant rounded to the given unit.
+
+## Syntax
+
+```js-nolint
+round(smallestUnit)
+round(options)
+```
+
+### Parameters
+
+- `smallestUnit`
+ - : A string representing the [`smallestUnit`](#smallestunit_2) option. This is a convenience overload, so `round(smallestUnit)` is equivalent to `round({ smallestUnit })`, where `smallestUnit` is a string.
+- `options`
+ - : An object containing some or all of the following properties (in the order they are retrieved and validated):
+ - `roundingIncrement` {{optional_inline}}
+ - : A number (truncated to an integer) representing the rounding increment in the given `smallestUnit`. Defaults to `1`. The increment and the `smallestUnit` must evenly divide 24 hours; for example, 45 seconds is a divisor of 86400 seconds, and 100 minutes is a divisor of 3600 minutes. This is slightly less strict than the `round()` method of the other classes, which all require the increment to be a divisor of the maximum value of the unit.
+ - `roundingMode` {{optional_inline}}
+ - : A string specifying how to round off the fractional part of `smallestUnit`. See [`Intl.NumberFormat()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#roundingmode). Defaults to `"halfExpand"`.
+ - `smallestUnit`
+ - : A string representing the smallest unit to include in the output. The value must be one of the following: `"hour"`, `"minute"`, `"second"`, `"millisecond"`, `"microsecond"`, `"nanosecond"`, or their plural forms. For units larger than `"nanosecond"`, fractional parts of the `smallestUnit` will be rounded according to the `roundingIncrement` and `roundingMode` settings.
+
+### Return value
+
+A new {{jsxref("Temporal.Instant")}} object representing this instant rounded to the given unit, where all units smaller than `smallestUnit` are zeroed out.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+
+## Examples
+
+### Rounding off small units
+
+```js
+const instant = Temporal.Instant.fromEpochMilliseconds(1000);
+const roundedInstant = instant.round("second");
+console.log(roundedInstant.epochMilliseconds); // 1000
+
+const instant2 = instant.round("minute");
+console.log(instant2.epochMilliseconds); // 0
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Instant")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/instant/since/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/instant/since/index.md
new file mode 100644
index 000000000000000..9d3c9a07f56c7a2
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/instant/since/index.md
@@ -0,0 +1,79 @@
+---
+title: Temporal.Instant.prototype.since()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Instant/since
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.Instant.since
+---
+
+{{JSRef}}
+
+The **`since()`** method of {{jsxref("Temporal.Instant")}} instances returns a new {{jsxref("Temporal.Duration")}} object representing the duration from another instant (in a form convertible by {{jsxref("Temporal/Instant/from", "Temporal.Instant.from()")}}) to this instant. The duration is positive if the other instant is before this instant, and negative if after.
+
+This method does `this - other`. To do `other - this`, use the {{jsxref("Temporal/Instant/until", "until()")}} method.
+
+## Syntax
+
+```js-nolint
+since(other)
+since(other, options)
+```
+
+### Parameters
+
+- `other`
+ - : A string or a {{jsxref("Temporal.Instant")}} instance representing an instant to subtract from this instant. It is converted to a `Temporal.Instant` object using the same algorithm as {{jsxref("Temporal/Instant/from", "Temporal.Instant.from()")}}.
+- `options` {{optional_inline}}
+ - : An object containing the options for {{jsxref("Temporal/Duration/round", "Temporal.Duration.prototype.round()")}}, which includes `largestUnit`, `roundingIncrement`, `roundingMode`, and `smallestUnit`. `largestUnit` and `smallestUnit` only accept the units: `"hour"`, `"minute"`, `"second"`, `"millisecond"`, `"microsecond"`, `"nanosecond"`, or their plural forms. For `largestUnit`, the default value `"auto"` means `"second"` or `smallestUnit`, whichever is greater. For `smallestUnit`, the default value is `"nanosecond"`.
+
+### Return value
+
+A new {{jsxref("Temporal.Duration")}} object representing the duration _since_ `other` to this instant. The duration is positive if `other` is before this instant, and negative if after.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+
+## Examples
+
+### Using since()
+
+```js
+const lastUpdated = Temporal.Instant.fromEpochMilliseconds(1735235418000);
+const now = Temporal.Now.instant();
+const duration = now.since(lastUpdated, { smallestUnit: "minute" });
+console.log(`Last updated ${duration.toLocaleString("en-US")} ago`);
+```
+
+### Balancing the resulting duration
+
+Because an instant does not carry calendar information, the resulting duration avoids [calendar durations](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#calendar_durations), which are ambiguous without a calendar and time reference. Therefore, the result is [unbalanced](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#duration_balancing) because `hours` may be greater than `24`. To balance the duration, [round](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/round) the resulting duration again with the desired `largestUnit`, passing a `relativeTo` that carries the calendar information.
+
+```js
+const lastUpdated = Temporal.Instant.fromEpochMilliseconds(1735235418000);
+const now = Temporal.Now.instant();
+const duration = now.since(lastUpdated, { smallestUnit: "minute" });
+const roundedDuration = duration.round({
+ largestUnit: "year",
+ // Use the ISO calendar; you can convert to another calendar using
+ // withCalendar()
+ relativeTo: now.toZonedDateTimeISO("UTC"),
+});
+console.log(`Last updated ${roundedDuration.toLocaleString("en-US")} ago`);
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Instant")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Instant/add", "Temporal.Instant.prototype.add()")}}
+- {{jsxref("Temporal/Instant/subtract", "Temporal.Instant.prototype.subtract()")}}
+- {{jsxref("Temporal/Instant/until", "Temporal.Instant.prototype.until()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/instant/subtract/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/instant/subtract/index.md
new file mode 100644
index 000000000000000..e5b7935e8f428fc
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/instant/subtract/index.md
@@ -0,0 +1,67 @@
+---
+title: Temporal.Instant.prototype.subtract()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Instant/subtract
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.Instant.subtract
+---
+
+{{JSRef}}
+
+The **`subtract()`** method of {{jsxref("Temporal.Instant")}} instances returns a new `Temporal.Instant` object representing this instant moved backward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}).
+
+If you want to subtract two instants and get a duration, use {{jsxref("Temporal/Instant/since", "since()")}} or {{jsxref("Temporal/Instant/until", "until()")}} instead.
+
+## Syntax
+
+```js-nolint
+subtract(duration)
+```
+
+### Parameters
+
+- `duration`
+ - : A string, an object, or a {{jsxref("Temporal.Duration")}} instance representing a duration to subtract from this instant. It is converted to a `Temporal.Duration` object using the same algorithm as {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}.
+
+### Return value
+
+A new {{jsxref("Temporal.Instant")}} object representing subtracting `duration` from this instant. If `duration` is positive, then the returned instant is earlier than this instant; if `duration` is negative, then the returned instant is later than this instant.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - `duration` is a [calendar duration](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#calendar_durations) (it has a non-zero `years`, `months`, or `weeks`), or has a non-zero `days`, because calendar durations are ambiguous without a calendar and time reference.
+ - The difference of `this` and `duration` overflows the maximum or underflows the minimum representable instant, which is ±108 days (about ±273,972.6 years).
+
+## Description
+
+Subtracting a duration is equivalent to [adding](Web/JavaScript/Reference/Global_Objects/Temporal/Instant/add) its [negation](Web/JavaScript/Reference/Global_Objects/Temporal/Duration/negated), so all the same considerations apply.
+
+## Examples
+
+### Subtracting a Temporal.Duration
+
+```js
+const instant = Temporal.Instant.fromEpochMilliseconds(1000);
+const duration = Temporal.Duration.from("PT1S"); // One-second duration
+const newInstant = instant.subtract(duration);
+console.log(newInstant.epochMilliseconds); // 0
+```
+
+For more examples, see {{jsxref("Temporal/Instant/add", "add()")}}.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Instant")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Instant/add", "Temporal.Instant.prototype.add()")}}
+- {{jsxref("Temporal/Instant/since", "Temporal.Instant.prototype.since()")}}
+- {{jsxref("Temporal/Instant/until", "Temporal.Instant.prototype.until()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/instant/tojson/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/instant/tojson/index.md
new file mode 100644
index 000000000000000..03c6837bf6d0473
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/instant/tojson/index.md
@@ -0,0 +1,68 @@
+---
+title: Temporal.Instant.prototype.toJSON()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Instant/toJSON
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.Instant.toJSON
+---
+
+{{JSRef}}
+
+The **`toJSON()`** method of {{jsxref("Temporal.Instant")}} instances returns a string representing this instant in the same [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Instant#rfc_9557_format) as calling {{jsxref("Temporal/Instant/toString", "toString()")}}. It is intended to be implicitly called by {{jsxref("JSON.stringify()")}}.
+
+## Syntax
+
+```js-nolint
+toJSON()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A string representing the given instant in the [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Instant#rfc_9557_format), with as much subsecond precision as necessary to represent the duration accurately, and with the UTC time zone designator `Z`.
+
+## Description
+
+The `toJSON()` method is automatically called by {{jsxref("JSON.stringify()")}} when a `Temporal.Instant` object is stringified. This method is generally intended to, by default, usefully serialize `Temporal.Instant` objects during [JSON](/en-US/docs/Glossary/JSON) serialization, which can then be deserialized using the {{jsxref("Temporal/Instant/from", "Temporal.Instant.from()")}} function as the reviver of {{jsxref("JSON.parse()")}}.
+
+## Examples
+
+### Using toJSON()
+
+```js
+const instant = Temporal.Instant.fromEpochMilliseconds(1627821296000);
+const instantStr = instant.toJSON(); // '2021-08-01T12:34:56Z'
+const i2 = Temporal.Instant.from(instantStr);
+```
+
+### JSON serialization and parsing
+
+This example shows how `Temporal.Instant` can be serialized as JSON without extra effort, and how to parse it back.
+
+```js
+const instant = Temporal.Instant.fromEpochMilliseconds(1627821296000);
+const jsonStr = JSON.stringify({ time: instant }); // '{"time":"2021-08-01T12:34:56Z"}'
+const obj = JSON.parse(jsonStr, (key, value) => {
+ if (key === "time") {
+ return Temporal.Instant.from(value);
+ }
+ return value;
+});
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Instant")}}
+- {{jsxref("Temporal/Instant/from", "Temporal.Instant.from()")}}
+- {{jsxref("Temporal/Instant/toString", "Temporal.Instant.prototype.toString()")}}
+- {{jsxref("Temporal/Instant/toLocaleString", "Temporal.Instant.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/instant/tolocalestring/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/instant/tolocalestring/index.md
new file mode 100644
index 000000000000000..fddddf3d6ddb005
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/instant/tolocalestring/index.md
@@ -0,0 +1,69 @@
+---
+title: Temporal.Instant.prototype.toLocaleString()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Instant/toLocaleString
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.Instant.toLocaleString
+---
+
+{{JSRef}}
+
+The **`toLocaleString()`** method of {{jsxref("Temporal.Instant")}} instances returns a string with a language-sensitive representation of this instant. In implementations with [`Intl.DateTimeFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat) support, this method delegates to `Intl.DateTimeFormat`.
+
+Every time `toLocaleString` is called, it has to perform a search in a big database of localization strings, which is potentially inefficient. When the method is called many times with the same arguments, it is better to create a {{jsxref("Intl.DateTimeFormat")}} object and use its {{jsxref("Intl/DateTimeFormat/format", "format()")}} method, because a `DateTimeFormat` object remembers the arguments passed to it and may decide to cache a slice of the database, so future `format` calls can search for localization strings within a more constrained context.
+
+## Syntax
+
+```js-nolint
+toLocaleString()
+toLocaleString(locales)
+toLocaleString(locales, options)
+```
+
+### Parameters
+
+The `locales` and `options` parameters customize the behavior of the function and let applications specify the language whose formatting conventions should be used.
+
+In implementations that support the [`Intl.DateTimeFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat), these parameters correspond exactly to the [`Intl.DateTimeFormat()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat) constructor's parameters. Implementations without `Intl.DateTimeFormat` support return the exact same string as {{jsxref("Temporal/Instant/toString", "toString()")}}, ignoring both parameters.
+
+- `locales` {{optional_inline}}
+ - : A string with a BCP 47 language tag, or an array of such strings. Corresponds to the [`locales`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#locales) parameter of the `Intl.DateTimeFormat()` constructor.
+- `options` {{optional_inline}}
+ - : An object adjusting the output format. Corresponds to the [`options`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#options) parameter of the `Intl.DateTimeFormat()` constructor.
+
+See the [`Intl.DateTimeFormat()` constructor](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat) for details on these parameters and how to use them.
+
+### Return value
+
+A string representing the given instant according to language-specific conventions.
+
+In implementations with `Intl.DateTimeFormat`, this is equivalent to `new Intl.DateTimeFormat(locales, options).format(instant)`.
+
+> [!NOTE]
+> Most of the time, the formatting returned by `toLocaleString()` is consistent. However, the output may vary between implementations, even within the same locale — output variations are by design and allowed by the specification. It may also not be what you expect. For example, the string may use non-breaking spaces or be surrounded by bidirectional control characters. You should not compare the results of `toLocaleString()` to hardcoded constants.
+
+## Examples
+
+### Using toLocaleString()
+
+Basic use of this method without specifying a `locale` returns a formatted string in the default locale and with default options.
+
+```js
+const instant = Temporal.Instant.from("2021-08-01T12:34:56Z");
+
+console.log(instant.toLocaleString()); // 8/1/2021, 12:34:56 AM (assuming en-US locale and device in UTC time zone)
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Instant")}}
+- {{jsxref("Intl.DateTimeFormat")}}
+- {{jsxref("Temporal/Instant/toJSON", "Temporal.Instant.prototype.toJSON()")}}
+- {{jsxref("Temporal/Instant/toString", "Temporal.Instant.prototype.toString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/instant/tostring/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/instant/tostring/index.md
new file mode 100644
index 000000000000000..a9d4a30df71f58c
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/instant/tostring/index.md
@@ -0,0 +1,82 @@
+---
+title: Temporal.Instant.prototype.toString()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Instant/toString
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.Instant.toString
+---
+
+{{JSRef}}
+
+The **`toString()`** method of {{jsxref("Temporal.Instant")}} instances returns a string representing this instant in the [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Instant#rfc_9557_format) using the specified time zone.
+
+## Syntax
+
+```js-nolint
+toString()
+toString(options)
+```
+
+### Parameters
+
+- `options` {{optional_inline}}
+ - : An object containing some or all of the following properties (in the order they are retrieved and validated):
+ - `fractionalSecondDigits` {{optional_inline}}
+ - : Either an integer from 0 to 9, or the string `"auto"`. The default is `"auto"`. If `"auto"`, then trailing zeros are removed from the fractional seconds. Otherwise, the fractional part of the second component contains this many digits, padded with zeros or rounded as necessary.
+ - `roundingMode` {{optional_inline}}
+ - : A string specifying how to round off fractional second digits beyond `fractionalSecondDigits`. See [`Intl.NumberFormat()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#roundingmode). Defaults to `"trunc"`.
+ - `smallestUnit` {{optional_inline}}
+ - : A string specifying the smallest unit to include in the output. Possible values are `"minute"`, `"second"`, `"millisecond"`, `"microsecond"`, and `"nanosecond"`, or their plural forms, which (except `"minute"`) are equivalent to `fractionalSecondDigits` values of `0`, `3`, `6`, `9`, respectively. If specified, then `fractionalSecondDigits` is ignored.
+ - `timeZone` {{optional_inline}}
+ - : Either a string or a {{jsxref("Temporal.ZonedDateTime")}} instance representing the time zone to use. If a `Temporal.ZonedDateTime` instance, its time zone is used. If a string, it can be a named time zone identifier, an offset time zone identifier, or a date-time string containing a time zone identifier or an offset (see [time zones and offsets](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets) for more information). Defaults to `"UTC"`.
+
+### Return value
+
+A string in the [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Instant#rfc_9557_format) representing this instant using the specified time zone. No annotations, such as time zone names, are included.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+
+## Examples
+
+### Using toString()
+
+```js
+const instant = Temporal.Instant.fromEpochMilliseconds(1627814412345);
+console.log(instant.toString()); // '2021-08-01T10:40:12.345Z'
+
+// Stringification implicitly calls toString()
+console.log(`${instant}`); // '2021-08-01T10:40:12.345Z'
+```
+
+### Using options
+
+```js
+const instant = Temporal.Instant.fromEpochMilliseconds(1627814412345);
+console.log(instant.toString({ fractionalSecondDigits: 1 })); // '2021-08-01T10:40:12.3Z'
+console.log(instant.toString({ smallestUnit: "minute" })); // '2021-08-01T10:40Z'
+console.log(instant.toString({ timeZone: "America/New_York" })); // '2021-08-01T06:40:12.345-04:00'
+
+// The time zone name automatically resolves to the correct offset
+// based on the instant; for example, America/New_York is UTC-4 in summer,
+// but UTC-5 in winter.
+const instant2 = Temporal.Instant.fromEpochMilliseconds(1577836800000);
+console.log(instant2.toString({ timeZone: "UTC" })); // '2029-12-31T23:00:00Z'
+console.log(instant2.toString({ timeZone: "America/New_York" })); // '2019-12-31T19:00:00-05:00'
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Instant")}}
+- {{jsxref("Temporal/Instant/from", "Temporal.Instant.from()")}}
+- {{jsxref("Temporal/Instant/toJSON", "Temporal.Instant.prototype.toJSON()")}}
+- {{jsxref("Temporal/Instant/toLocaleString", "Temporal.Instant.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/instant/tozoneddatetimeiso/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/instant/tozoneddatetimeiso/index.md
new file mode 100644
index 000000000000000..4afb52fd9d767a5
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/instant/tozoneddatetimeiso/index.md
@@ -0,0 +1,59 @@
+---
+title: Temporal.Instant.prototype.toZonedDateTimeISO()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Instant/toZonedDateTimeISO
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.Instant.toZonedDateTimeISO
+---
+
+{{JSRef}}
+
+The **`toZonedDateTimeISO()`** method of {{jsxref("Temporal.Instant")}} instances returns a new {{jsxref("Temporal.ZonedDateTime")}} object representing this instant in the specified time zone using the ISO 8601 calendar system.
+
+## Syntax
+
+```js-nolint
+toZonedDateTimeISO(timeZone)
+```
+
+### Parameters
+
+- `timeZone`
+ - : Either a string or a {{jsxref("Temporal.ZonedDateTime")}} instance representing the time zone to use. If a `Temporal.ZonedDateTime` instance, its time zone is used. If a string, it can be a named time zone identifier, an offset time zone identifier, or a date-time string containing a time zone identifier or an offset (see [time zones and offsets](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets) for more information).
+
+### Return value
+
+A new {{jsxref("Temporal.ZonedDateTime")}} object representing this instant in the specified time zone using the ISO 8601 calendar system.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if the time zone name is invalid.
+- {{jsxref("TypeError")}}
+ - : Thrown if `timeZone` is not a string or a `Temporal.ZonedDateTime` instance.
+
+## Examples
+
+### Using toZonedDateTimeISO()
+
+```js
+const instant = Temporal.Instant.from("2021-08-01T12:34:56.123456789Z");
+const zonedDateTime = instant.toZonedDateTimeISO("America/New_York");
+console.log(zonedDateTime.toString()); // 2021-08-01T08:34:56.123456789-04:00[America/New_York]
+
+const localDateTime = instant.toZonedDateTimeISO(Temporal.Now.timeZoneId());
+console.log(localDateTime.toString()); // This instant in your timezone
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Instant")}}
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/toInstant", "Temporal.ZonedDateTime.prototype.toInstant()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/instant/until/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/instant/until/index.md
new file mode 100644
index 000000000000000..3c8fa18053574a9
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/instant/until/index.md
@@ -0,0 +1,64 @@
+---
+title: Temporal.Instant.prototype.until()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Instant/until
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.Instant.until
+---
+
+{{JSRef}}
+
+The **`until()`** method of {{jsxref("Temporal.Instant")}} instances returns a new {{jsxref("Temporal.Duration")}} object representing the duration from this instant to another instant (in a form convertible by {{jsxref("Temporal/Instant/from", "Temporal.Instant.from()")}}). The duration is positive if the other instant is after this instant, and negative if before.
+
+This method does `other - this`. To do `this - other`, use the {{jsxref("Temporal/Instant/since", "since()")}} method.
+
+## Syntax
+
+```js-nolint
+until(other)
+until(other, options)
+```
+
+### Parameters
+
+- `other`
+ - : A string or a {{jsxref("Temporal.Instant")}} instance representing an instant to subtract this instant from. It is converted to a `Temporal.Instant` object using the same algorithm as {{jsxref("Temporal/Instant/from", "Temporal.Instant.from()")}}.
+- `options` {{optional_inline}}
+ - : The same options as [`since()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Instant/since#options).
+
+### Return value
+
+A new {{jsxref("Temporal.Duration")}} object representing the duration from this instant _until_ `other`. The duration is positive if `other` is after this instant, and negative if before.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+
+## Examples
+
+### Using until()
+
+```js
+const launch = Temporal.Instant.fromEpochMilliseconds(2051222400000);
+const now = Temporal.Now.instant();
+const duration = now.until(launch, { smallestUnit: "minute" });
+console.log(`It will be ${duration.toLocaleString("en-US")} until the launch`);
+```
+
+For more examples, see [`since()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Instant/since).
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Instant")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/Instant/add", "Temporal.Instant.prototype.add()")}}
+- {{jsxref("Temporal/Instant/subtract", "Temporal.Instant.prototype.subtract()")}}
+- {{jsxref("Temporal/Instant/since", "Temporal.Instant.prototype.since()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/instant/valueof/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/instant/valueof/index.md
new file mode 100644
index 000000000000000..e3a94736cda043f
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/instant/valueof/index.md
@@ -0,0 +1,65 @@
+---
+title: Temporal.Instant.prototype.valueOf()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Instant/valueOf
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.Instant.valueOf
+---
+
+{{JSRef}}
+
+The **`valueOf()`** method of {{jsxref("Temporal.Instant")}} instances throws a {{jsxref("TypeError")}}, which prevents `Temporal.Instant` instances from being [implicitly converted to primitives](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) when used in arithmetic or comparison operations.
+
+## Syntax
+
+```js-nolint
+valueOf()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+None.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Always thrown.
+
+## Description
+
+Because both [primitive conversion](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) and [number conversion](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number#number_coercion) call `valueOf()` before `toString()`, if `valueOf()` is absent, then an expression like `instant1 > instant2` would implicitly compare them as strings, which may have unexpected results. By throwing a `TypeError`, `Temporal.Instant` instances prevent such implicit conversions. You need to explicitly convert them to numbers using {{jsxref("Temporal/Instant/epochNanoseconds", "Temporal.Instant.prototype.epochNanoseconds")}}, or use the {{jsxref("Temporal/Instant/compare", "Temporal.Instant.compare()")}} static method to compare them.
+
+## Examples
+
+### Arithmetic and comparison operations on Temporal.Instant
+
+All arithmetic and comparison operations on `Temporal.Instant` instances should use the dedicated methods or convert them to primitives explicitly.
+
+```js
+const instant1 = Temporal.Instant.fromEpochMilliseconds(0);
+const instant2 = Temporal.Instant.fromEpochMilliseconds(1000);
+instant1 > instant2; // TypeError: can't convert Instant to primitive type
+instant1.epochNanoseconds > instant2.epochNanoseconds; // false
+Temporal.Instant.compare(instant1, instant2); // -1
+
+instant2 - instant1; // TypeError: can't convert Instant to primitive type
+instant2.since(instant1).toString(); // "PT1S"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Instant")}}
+- {{jsxref("Temporal/Instant/toString", "Temporal.Instant.prototype.toString()")}}
+- {{jsxref("Temporal/Instant/toJSON", "Temporal.Instant.prototype.toJSON()")}}
+- {{jsxref("Temporal/Instant/toLocaleString", "Temporal.Instant.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/now/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/now/index.md
new file mode 100644
index 000000000000000..104235368233954
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/now/index.md
@@ -0,0 +1,81 @@
+---
+title: Temporal.Now
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Now
+page-type: javascript-namespace
+browser-compat: javascript.builtins.Temporal.Now
+---
+
+{{JSRef}}
+
+The **`Temporal.Now`** object provides methods for getting the current time in various formats.
+
+## Description
+
+Unlike most global objects, `Temporal.Now` is not a constructor. You cannot use it with the [`new` operator](/en-US/docs/Web/JavaScript/Reference/Operators/new) or invoke the `Temporal.Now` object as a function. All properties and methods of `Temporal.Now` are static (just like the {{jsxref("Math")}} object).
+
+Most fundamentally, the system time is returned by the operating system as a time since the Unix epoch (usually millisecond-level precision, but might be nanosecond-level too). {{jsxref("Temporal/Now/instant", "Temporal.Now.instant()")}} returns this time as a {{jsxref("Temporal.Instant")}} object.
+
+An instant can be interpreted in a time zone (which is the system time zone {{jsxref("Temporal/Now/timeZoneId", "Temporal.Now.timeZoneId()")}} by default) in the same fashion as {{jsxref("Temporal/Instant/toZonedDateTimeISO", "Temporal.Instant.prototype.toZonedDateTimeISO()")}}. To get a {{jsxref("Temporal.ZonedDateTime")}} object, you can use {{jsxref("Temporal/Now/zonedDateTimeISO", "Temporal.Now.zonedDateTimeISO()")}}. You can also get different parts of the date and time, using {{jsxref("Temporal/Now/plainDateISO", "Temporal.Now.plainDateISO()")}}, {{jsxref("Temporal/Now/plainTimeISO", "Temporal.Now.plainTimeISO()")}}, and {{jsxref("Temporal/Now/plainDateTimeISO", "Temporal.Now.plainDateTimeISO()")}}.
+
+For example, if the computer is set to the time zone "America/New_York", `Temporal.Now.zonedDateTimeISO()` returns a zoned date-time like: `2021-08-01T10:40:12.345-04:00[America/New_York]`. In this case, `Temporal.Now.plainTimeISO()` would return the time part of this zoned date-time: `10:40:12.345`. However, if you call `Temporal.Now.plainTimeISO("UTC")`, it returns the time part of the zoned date-time in the UTC time zone: `14:40:12.345`. This is especially useful for cross-system communication where the other end may be expecting the time in a different time zone.
+
+### Reduced time precision
+
+To offer protection against timing attacks and [fingerprinting](/en-US/docs/Glossary/Fingerprinting), the precision of the `Temporal.Now` functions might get rounded depending on browser settings. In Firefox, the `privacy.reduceTimerPrecision` preference is enabled by default and defaults to 2ms. You can also enable `privacy.resistFingerprinting`, in which case the precision will be 100ms or the value of `privacy.resistFingerprinting.reduceTimerPrecision.microseconds`, whichever is larger.
+
+For example, with reduced time precision, the result of `Temporal.Now.instant().epochMilliseconds` will always be a multiple of 2, or a multiple of 100 (or `privacy.resistFingerprinting.reduceTimerPrecision.microseconds`) with `privacy.resistFingerprinting` enabled.
+
+```js
+// reduced time precision (2ms) in Firefox 60
+Temporal.Now.instant().epochMilliseconds;
+// Might be:
+// 1519211809934
+// 1519211810362
+// 1519211811670
+// …
+
+// reduced time precision with `privacy.resistFingerprinting` enabled
+Temporal.Now.instant().epochMilliseconds;
+// Might be:
+// 1519129853500
+// 1519129858900
+// 1519129864400
+// …
+```
+
+## Static properties
+
+- `Temporal.Now[Symbol.toStringTag]`
+ - : The initial value of the [`[Symbol.toStringTag]`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) property is the string `"Temporal.Now"`. This property is used in {{jsxref("Object.prototype.toString()")}}.
+
+## Static methods
+
+- {{jsxref("Temporal/Now/instant", "Temporal.Now.instant()")}}
+ - : Returns the current time as a {{jsxref("Temporal.Instant")}} object.
+- {{jsxref("Temporal/Now/plainDateISO", "Temporal.Now.plainDateISO()")}}
+ - : Returns the current date as a {{jsxref("Temporal.PlainDate")}} object, in the ISO 8601 calendar and the specified time zone.
+- {{jsxref("Temporal/Now/plainDateTimeISO", "Temporal.Now.plainDateTimeISO()")}}
+ - : Returns the current date and time as a {{jsxref("Temporal.PlainDateTime")}} object, in the ISO 8601 calendar and the specified time zone.
+- {{jsxref("Temporal/Now/plainTimeISO", "Temporal.Now.plainTimeISO()")}}
+ - : Returns the current time as a {{jsxref("Temporal.PlainTime")}} object, in the specified time zone.
+- {{jsxref("Temporal/Now/timeZoneId", "Temporal.Now.timeZoneId()")}}
+ - : Returns a [time zone identifier](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets) representing the system's current time zone.
+- {{jsxref("Temporal/Now/zonedDateTimeISO", "Temporal.Now.zonedDateTimeISO()")}}
+ - : Returns the current date and time as a {{jsxref("Temporal.ZonedDateTime")}} object, in the ISO 8601 calendar and the specified time zone.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal")}}
+- {{jsxref("Temporal.Instant")}}
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal.ZonedDateTime")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/now/instant/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/now/instant/index.md
new file mode 100644
index 000000000000000..7ef55473f0add91
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/now/instant/index.md
@@ -0,0 +1,51 @@
+---
+title: Temporal.Now.instant()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Now/instant
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.Now.instant
+---
+
+{{JSRef}}
+
+The **`Temporal.Now.instant()`** static method returns the current time as a {{jsxref("Temporal.Instant")}} object.
+
+## Syntax
+
+```js-nolint
+Temporal.Now.instant()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A {{jsxref("Temporal.Instant")}} object representing the current time, with potentially [reduced precision](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Now#reduced_time_precision).
+
+## Examples
+
+### Measuring time elapsed
+
+The following example measures two instants in time and calculates the [duration](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration) between them, and gets the total duration in milliseconds:
+
+```js
+const start = Temporal.Now.instant();
+// Do something that takes time
+const end = Temporal.Now.instant();
+const duration = end.since(start);
+console.log(duration.total("milliseconds"));
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Now")}}
+- {{jsxref("Temporal.Instant")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/now/plaindateiso/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/now/plaindateiso/index.md
new file mode 100644
index 000000000000000..5843451e85d6122
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/now/plaindateiso/index.md
@@ -0,0 +1,58 @@
+---
+title: Temporal.Now.plainDateISO()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Now/plainDateISO
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.Now.plainDateISO
+---
+
+{{JSRef}}
+
+The **`Temporal.Now.plainDateISO()`** static method returns the current date as a {{jsxref("Temporal.PlainDate")}} object, in the ISO 8601 calendar and the specified time zone.
+
+## Syntax
+
+```js-nolint
+Temporal.Now.plainDateISO()
+Temporal.Now.plainDateISO(timeZone)
+```
+
+### Parameters
+
+- `timeZone` {{optional_inline}}
+ - : Either a string or a {{jsxref("Temporal.ZonedDateTime")}} instance representing the time zone to interpret the system time in. If a `Temporal.ZonedDateTime` instance, its time zone is used. If a string, it can be a named time zone identifier, an offset time zone identifier, or a date-time string containing a time zone identifier or an offset (see [time zones and offsets](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets) for more information).
+
+### Return value
+
+The current date in the specified time zone, as a {{jsxref("Temporal.PlainDate")}} object using the ISO 8601 calendar.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if the time zone is invalid.
+
+## Examples
+
+### Using Temporal.Now.plainDateISO()
+
+```js
+// The current date in the system's time zone
+const date = Temporal.Now.plainDateISO();
+console.log(date); // e.g.: 2021-10-01
+
+// The current date in the "America/New_York" time zone
+const dateInNewYork = Temporal.Now.plainDateISO("America/New_York");
+console.log(dateInNewYork); // e.g.: 2021-09-30
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Now")}}
+- {{jsxref("Temporal.PlainDate")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/now/plaindatetimeiso/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/now/plaindatetimeiso/index.md
new file mode 100644
index 000000000000000..0ea7d183a59f18e
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/now/plaindatetimeiso/index.md
@@ -0,0 +1,58 @@
+---
+title: Temporal.Now.plainDateTimeISO()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Now/plainDateTimeISO
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.Now.plainDateTimeISO
+---
+
+{{JSRef}}
+
+The **`Temporal.Now.plainDateTimeISO()`** static method returns the current date and time as a {{jsxref("Temporal.PlainDateTime")}} object, in the ISO 8601 calendar and the specified time zone.
+
+## Syntax
+
+```js-nolint
+Temporal.Now.plainDateTimeISO()
+Temporal.Now.plainDateTimeISO(timeZone)
+```
+
+### Parameters
+
+- `timeZone` {{optional_inline}}
+ - : Either a string or a {{jsxref("Temporal.ZonedDateTime")}} instance representing the time zone to interpret the system time in. If a `Temporal.ZonedDateTime` instance, its time zone is used. If a string, it can be a named time zone identifier, an offset time zone identifier, or a date-time string containing a time zone identifier or an offset (see [time zones and offsets](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets) for more information).
+
+### Return value
+
+The current date and time in the specified time zone, as a {{jsxref("Temporal.PlainDateTime")}} object using the ISO 8601 calendar. Has the same precision as {{jsxref("Temporal/Now/instant", "Temporal.Now.instant()")}}.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if the time zone is invalid.
+
+## Examples
+
+### Using Temporal.Now.plainDateTimeISO()
+
+```js
+// The current date and time in the system's time zone
+const dateTime = Temporal.Now.plainDateTimeISO();
+console.log(dateTime); // e.g.: 2021-10-01T06:12:34.567890123
+
+// The current date and time in the "America/New_York" time zone
+const dateTimeInNewYork = Temporal.Now.plainDateTimeISO("America/New_York");
+console.log(dateTimeInNewYork); // e.g.: 2021-09-30T23:12:34.567890123
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Now")}}
+- {{jsxref("Temporal.PlainDateTime")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/now/plaintimeiso/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/now/plaintimeiso/index.md
new file mode 100644
index 000000000000000..878f9b6b923eb61
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/now/plaintimeiso/index.md
@@ -0,0 +1,60 @@
+---
+title: Temporal.Now.plainTimeISO()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Now/plainTimeISO
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.Now.plainTimeISO
+---
+
+{{JSRef}}
+
+The **`Temporal.Now.plainTimeISO()`** static method returns the current time as a {{jsxref("Temporal.PlainTime")}} object, in the specified time zone.
+
+Note that although the method contains "ISO" in its name, {{jsxref("Temporal.PlainTime")}} objects do not have associated calendars, as the time format is not calendar-dependent.
+
+## Syntax
+
+```js-nolint
+Temporal.Now.plainTimeISO()
+Temporal.Now.plainTimeISO(timeZone)
+```
+
+### Parameters
+
+- `timeZone` {{optional_inline}}
+ - : Either a string or a {{jsxref("Temporal.ZonedDateTime")}} instance representing the time zone to interpret the system time in. If a `Temporal.ZonedDateTime` instance, its time zone is used. If a string, it can be a named time zone identifier, an offset time zone identifier, or a date-time string containing a time zone identifier or an offset (see [time zones and offsets](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets) for more information).
+
+### Return value
+
+The current time in the specified time zone, as a {{jsxref("Temporal.PlainTime")}} object. Has the same precision as {{jsxref("Temporal/Now/instant", "Temporal.Now.instant()")}}.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if the time zone is invalid.
+
+## Examples
+
+### Using Temporal.Now.plainTimeISO()
+
+```js
+// The current time in the system's time zone
+const time = Temporal.Now.plainTimeISO();
+console.log(time); // e.g.: 06:12:34.567890123
+
+// The current time in the "America/New_York" time zone
+const timeInNewYork = Temporal.Now.plainTimeISO("America/New_York");
+console.log(timeInNewYork); // e.g.: 23:12:34.567890123
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Now")}}
+- {{jsxref("Temporal.PlainTime")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/now/timezoneid/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/now/timezoneid/index.md
new file mode 100644
index 000000000000000..17e80296134b616
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/now/timezoneid/index.md
@@ -0,0 +1,46 @@
+---
+title: Temporal.Now.timeZoneId()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Now/timeZoneId
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.Now.timeZoneId
+---
+
+{{JSRef}}
+
+The **`Temporal.Now.timeZoneId()`** static method returns a [time zone identifier](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets) representing the system's current time zone. Most systems will return a primary time zone identifier such as `"America/New_York"`, though offset time zone identifier such as `"-04:00"` is possible too. The time zone identifier returned is the default time zone used by the other `Temporal.Now` methods.
+
+## Syntax
+
+```js-nolint
+Temporal.Now.timeZoneId()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A valid [time zone identifier](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets) representing the system's current time zone. The returned time zone identifier is never a non-primary time zone identifier (alias). For example, it would always return `"Asia/Kolkata"` (new name) instead of `"Asia/Calcutta"` (old name). For more information, see [time zones and offsets](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets).
+
+If the implementation does not support time zones, the method always returns `"UTC"`.
+
+## Examples
+
+### Getting the system's current time zone
+
+```js
+console.log(Temporal.Now.timeZoneId()); // e.g.: "America/New_York"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Now")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/now/zoneddatetimeiso/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/now/zoneddatetimeiso/index.md
new file mode 100644
index 000000000000000..e30c766b8f29aa4
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/now/zoneddatetimeiso/index.md
@@ -0,0 +1,58 @@
+---
+title: Temporal.Now.zonedDateTimeISO()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/Now/zonedDateTimeISO
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.Now.zonedDateTimeISO
+---
+
+{{JSRef}}
+
+The **`Temporal.Now.zonedDateTimeISO()`** static method returns the current date and time as a {{jsxref("Temporal.ZonedDateTime")}} object, in the ISO 8601 calendar and the specified time zone.
+
+## Syntax
+
+```js-nolint
+Temporal.Now.zonedDateTimeISO()
+Temporal.Now.zonedDateTimeISO(timeZone)
+```
+
+### Parameters
+
+- `timeZone` {{optional_inline}}
+ - : Either a string or a {{jsxref("Temporal.ZonedDateTime")}} instance representing the time zone to interpret the system time in. If a `Temporal.ZonedDateTime` instance, its time zone is used. If a string, it can be a named time zone identifier, an offset time zone identifier, or a date-time string containing a time zone identifier or an offset (see [time zones and offsets](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets) for more information).
+
+### Return value
+
+The current date and time in the specified time zone, as a {{jsxref("Temporal.ZonedDateTime")}} object using the ISO 8601 calendar. Has the same precision as {{jsxref("Temporal/Now/instant", "Temporal.Now.instant()")}}.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if the time zone is invalid.
+
+## Examples
+
+### Using Temporal.Now.zonedDateTimeISO()
+
+```js
+// The current date and time in the system's time zone
+const dateTime = Temporal.Now.zonedDateTimeISO();
+console.log(dateTime); // e.g.: 2021-10-01T06:12:34.567890123+03:00
+
+// The current date and time in the "America/New_York" time zone
+const dateTimeInNewYork = Temporal.Now.zonedDateTimeISO("America/New_York");
+console.log(dateTimeInNewYork); // e.g.: 2021-09-30T23:12:34.567890123-04:00
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.Now")}}
+- {{jsxref("Temporal.ZonedDateTime")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/add/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/add/index.md
new file mode 100644
index 000000000000000..23ae51b14a94ae0
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/add/index.md
@@ -0,0 +1,146 @@
+---
+title: Temporal.PlainDate.prototype.add()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/add
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDate.add
+---
+
+{{JSRef}}
+
+The **`add()`** method of {{jsxref("Temporal.PlainDate")}} instances returns a new `Temporal.PlainDate` object representing this date moved forward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}).
+
+## Syntax
+
+```js-nolint
+add(duration)
+add(duration, options)
+```
+
+### Parameters
+
+- `duration`
+ - : A string, an object, or a {{jsxref("Temporal.Duration")}} instance representing a duration to add to this date. It is converted to a `Temporal.Duration` object using the same algorithm as {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}.
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `overflow` {{optional_inline}}
+ - : A string specifying the behavior when a date component is out of range. Possible values are:
+ - `"constrain"` (default)
+ - : The date component is [clamped](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#invalid_date_clamping) to the valid range.
+ - `"reject"`
+ - : A {{jsxref("RangeError")}} is thrown if the date component is out of range.
+
+### Return value
+
+A new `Temporal.PlainDate` object representing the date specified by the original `PlainDate`, plus the duration.
+
+## Description
+
+The `duration` is handled in this way:
+
+- Move forward by the number of years, keeping the `monthCode` and `day` the same. If the `monthCode` is invalid in the resulting year (impossible for Gregorian and ISO 8601, but possible for calendars with leap months), we adjust based on the `overflow` option: for `constrain`, we pick another month according to the cultural conventions of that calendar's users. For example, because the leap month is usually thought of as a duplicate of another month, we may pick the month that it is a duplicate of.
+- Move forward by the number of months, adjusting the year if necessary, keeping the `day` the same. If the `day` is invalid in the resulting month (e.g., February 30), we adjust based on the `overflow` option: for `constrain`, we pick the closest valid day (e.g., February 28 or 29).
+- All commonly supported calendars use fixed-length weeks, so the number of weeks is just converted to the number of days. If the rule is more complex, we may take an approach similar to shifting months.
+- For all [non-calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#calendar_durations) units (days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds), they are converted to the number of days. Fractional part of a day is ignored. Then, we move forward by that number of days, adjusting the month and year if necessary.
+
+Adding a duration is equivalent to [subtracting](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/subtract) its [negation](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/negated).
+
+## Examples
+
+### Adding a duration in ISO 8601 calendar
+
+```js
+const start = Temporal.PlainDate.from("2021-01-01");
+const end = start.add({ years: 1, months: 2, weeks: 3, days: 4 });
+console.log(end.toString()); // 2022-03-26
+
+const end2 = start.add({ years: -1, months: -2, weeks: -3, days: -4 });
+console.log(end2.toString()); // 2019-10-07
+
+const distance = Temporal.PlainDate.from("2020-01-01").until("2021-01-01"); // 366 days
+const end3 = start.add(distance);
+console.log(end3.toString()); // 2022-01-02
+```
+
+### Adding a duration in a non-ISO calendar
+
+```js
+const start = Temporal.PlainDate.from("2021-01-01[u-ca=chinese]");
+console.log(start.toLocaleString("en-US", { calendar: "chinese" })); // 11/18/2020
+const end = start.add({ months: 1 });
+console.log(end.toLocaleString("en-US", { calendar: "chinese" })); // 12/18/2020
+```
+
+### Adding a duration with overflow
+
+If we move a few months and the corresponding day is invalid in this month, then we adjust the day based on the `overflow` option.
+
+```js
+const start = Temporal.PlainDate.from("2021-01-31");
+const end = start.add({ months: 1 });
+console.log(end.toString()); // 2021-02-28
+
+// Any further day additions are based on the clamped month-day:
+const end2 = start.add({ months: 1, days: 31 });
+console.log(end2.toString()); // 2021-03-31
+
+// Compare with the same addition in a different order that results in no overflow:
+const end3 = start.add({ days: 31 }).add({ months: 1 });
+console.log(end3.toString()); // 2021-04-03
+```
+
+Overflow can also occur for the month, for calendars where different years have different numbers of months (usually due to leap months).
+
+```js
+const start = Temporal.PlainDate.from("2023-04-01[u-ca=chinese]");
+console.log(start.toLocaleString("en-US", { calendar: "chinese" })); // 2bis/11/2023; "bis" means leap month
+const end = start.add({ years: 1 });
+console.log(end.toLocaleString("en-US", { calendar: "chinese" })); // 3/11/2024
+
+// Compare:
+const start = Temporal.PlainDate.from("2023-04-30[u-ca=chinese]");
+console.log(start.toLocaleString("en-US", { calendar: "chinese" })); // 3/11/2023
+const end = start.add({ years: 1 });
+console.log(end.toLocaleString("en-US", { calendar: "chinese" })); // 3/11/2024; same day as above!
+```
+
+Note that the following is not an overflow because the month can just increment:
+
+```js
+const start = Temporal.PlainDate.from("2021-01-01");
+const end = start.add({ days: 100 });
+console.log(end.toString()); // 2021-04-11
+```
+
+You can also throw an error if the date component is out of range:
+
+```js
+const start = Temporal.PlainDate.from("2021-01-31");
+const end = start.add({ months: 1 }, { overflow: "reject" }); // RangeError: date value "day" not in 1..28: 31
+
+const start = Temporal.PlainDate.from("2023-04-01[u-ca=chinese]");
+const end = start.add({ years: 1 }, { overflow: "reject" }); // RangeError: invalid "monthCode" calendar field: M02L
+```
+
+### Adding time durations
+
+Fractional parts of a day are ignored.
+
+```js
+const start = Temporal.PlainDate.from("2021-01-01");
+const end = start.add({ hours: 25 }); // Same as adding 1 day
+console.log(end.toString()); // 2021-01-02
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/PlainDate/subtract", "Temporal.PlainDate.prototype.subtract()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/calendarid/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/calendarid/index.md
new file mode 100644
index 000000000000000..5e92dc1a59dfb6c
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/calendarid/index.md
@@ -0,0 +1,41 @@
+---
+title: Temporal.PlainDate.prototype.calendarId
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/calendarId
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDate.calendarId
+---
+
+{{JSRef}}
+
+The **`calendarId`** accessor property of {{jsxref("Temporal.PlainDate")}} instances returns a string representing the [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars) used to interpret the internal ISO 8601 date.
+
+For a list of commonly supported values, see {{jsxref("Intl/Locale/getCalendars", "Intl.Locale.prototype.getCalendars()")}}.
+
+The set accessor of `calendarId` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainDate/withCalendar", "withCalendar()")}} method to create a new `Temporal.PlainDate` object with the desired new value.
+
+## Examples
+
+### Using calendarId
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+console.log(date.calendarId); // "iso8601"; default
+
+const date2 = Temporal.PlainDate.from("2021-07-01[u-ca=chinese]");
+console.log(date2.calendarId); // "chinese"
+
+const date3 = date2.withCalendar("hebrew");
+console.log(date3.calendarId); // "hebrew"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/compare/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/compare/index.md
new file mode 100644
index 000000000000000..d15867962dc1b50
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/compare/index.md
@@ -0,0 +1,97 @@
+---
+title: Temporal.PlainDate.compare()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/compare
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.PlainDate.compare
+---
+
+{{JSRef}}
+
+The **`Temporal.PlainDate.compare()`** static method returns a number (-1, 0, or 1) indicating whether the first date comes before, is the same as, or comes after the second date. Equivalent to comparing the year, month, and day fields of the underlying ISO 8601 dates.
+
+## Syntax
+
+```js-nolint
+Temporal.PlainDate.compare(date1, date2)
+```
+
+### Parameters
+
+- `date1`
+ - : A string, an object, or a {{jsxref("Temporal.PlainDate")}} instance representing the first date to compare. It is converted to a `Temporal.PlainDate` object using the same algorithm as {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}}.
+- `date2`
+ - : The second date to compare, converted to a `Temporal.PlainDate` object using the same algorithm as `date1`.
+
+### Return value
+
+Returns `-1` if `date1` comes before `date2`, `0` if they are the same, and `1` if `date2` comes after. They are compared by their underlying date values, ignoring their calendars.
+
+## Examples
+
+### Using Temporal.PlainDate.compare()
+
+```js
+const date1 = Temporal.PlainDate.from("2021-08-01");
+const date2 = Temporal.PlainDate.from("2021-08-02");
+console.log(Temporal.PlainDate.compare(date1, date2)); // -1
+
+const date3 = Temporal.PlainDate.from("2021-07-31");
+console.log(Temporal.PlainDate.compare(date1, date3)); // 1
+```
+
+### Comparing dates in different calendars
+
+```js
+const date1 = Temporal.PlainDate.from({ year: 2021, month: 8, day: 1 });
+const date2 = Temporal.PlainDate.from({
+ year: 2021,
+ month: 8,
+ day: 1,
+ calendar: "islamic",
+});
+const date3 = Temporal.PlainDate.from({
+ year: 2021,
+ month: 8,
+ day: 1,
+ calendar: "hebrew",
+});
+console.log(date1.toString()); // "2021-08-01"
+console.log(date2.toString()); // "2582-12-18[u-ca=islamic]"
+console.log(date3.toString()); // "-001739-04-06[u-ca=hebrew]"
+console.log(Temporal.PlainDate.compare(date1, date2)); // -1
+console.log(Temporal.PlainDate.compare(date1, date3)); // 1
+```
+
+### Sorting an array of dates
+
+The purpose of this `compare()` function is to act as a comparator to be passed to {{jsxref("Array.prototype.sort()")}} and related functions.
+
+```js
+const dates = [
+ Temporal.PlainDate.from({ year: 2021, month: 8, day: 1 }),
+ Temporal.PlainDate.from({
+ year: 2021,
+ month: 8,
+ day: 1,
+ calendar: "islamic",
+ }),
+ Temporal.PlainDate.from({ year: 2021, month: 8, day: 1, calendar: "hebrew" }),
+];
+
+dates.sort(Temporal.PlainDate.compare);
+console.log(dates.map((d) => d.toString()));
+// [ "-001739-04-06[u-ca=hebrew]", "2021-08-01", "2582-12-18[u-ca=islamic]" ]
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/equals", "Temporal.PlainDate.prototype.equals()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/day/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/day/index.md
new file mode 100644
index 000000000000000..c3b3608533673c5
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/day/index.md
@@ -0,0 +1,88 @@
+---
+title: Temporal.PlainDate.prototype.day
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/day
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDate.day
+---
+
+{{JSRef}}
+
+The **`day`** accessor property of {{jsxref("Temporal.PlainDate")}} instances returns a positive integer representing the 1-based day index in the month of this date, which is the same day number you would see on a calendar. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+It generally starts at 1 and is continuous, but not always. If you want to loop through all the days in a month, first use {{jsxref("Temporal/PlainDate/with", "with()")}} with `{ day: 1 }` (which sets to the beginning of the month, even if the actual number is not `1`), then repeatedly use {{jsxref("Temporal/PlainDate/add", "add()")}} with `{ days: 1 }`, until the month changes.
+
+> [!NOTE]
+> Usually, the day index only changes when transitioning from one calendar system into another, such as [from the Julian to the Gregorian calendar](https://en.wikipedia.org/wiki/Adoption_of_the_Gregorian_calendar). In practice, all currently built-in calendars are [proleptic](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar), meaning the calendar system is extended indefinitely into the past and future. Assuming `day` is non-continuous guards against future introductions of non-proleptic calendars.
+
+The set accessor of `day` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainDate/with", "with()")}} method to create a new `Temporal.PlainDate` object with the desired new value.
+
+## Examples
+
+### Using day
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01"); // ISO 8601 calendar
+console.log(date.day); // 1
+
+const date2 = Temporal.PlainDate.from("2021-07-01[u-ca=chinese]");
+console.log(date2.day); // 22; it is May 22 in the Chinese calendar
+```
+
+### Looping through all days in a month
+
+```js
+const month = Temporal.PlainDate.from("2021-07-14"); // An arbitrary date in the month
+for (
+ let day = month.with({ day: 1 });
+ day.month === month.month;
+ day = day.add({ days: 1 })
+) {
+ console.log(day.day);
+}
+```
+
+### Changing day
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+const newDate = date.with({ day: 15 });
+console.log(newDate.toString()); // 2021-07-15
+```
+
+You can also use {{jsxref("Temporal/PlainDate/add", "add()")}} or {{jsxref("Temporal/PlainDate/subtract", "subtract()")}} to move a certain number of days from the current date.
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+const newDate = date.add({ days: 14 });
+console.log(newDate.toString()); // 2021-07-15
+```
+
+By default, `with()` constrains the day to the range of valid values. So you can use `{ day: 1 }` to set the day to the first day of the month, even if the first day does not have the number `1`. Similarly, the following will set the day to the last day of the month:
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+const lastDay = date.with({ day: Number.MAX_VALUE }); // 2021-07-31
+```
+
+> [!NOTE]
+> Avoid using {{jsxref("Temporal/PlainDate/daysInMonth", "daysInMonth")}} to set the day to the last day of the month. The last day of the month is not always the same as the number of days in the month, in the rare case where a month may have a few days skipped.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/with", "Temporal.PlainDate.prototype.with()")}}
+- {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}
+- {{jsxref("Temporal/PlainDate/subtract", "Temporal.PlainDate.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDate/year", "Temporal.PlainDate.prototype.year")}}
+- {{jsxref("Temporal/PlainDate/month", "Temporal.PlainDate.prototype.month")}}
+- {{jsxref("Temporal/PlainDate/daysInMonth", "Temporal.PlainDate.prototype.daysInMonth")}}
+- {{jsxref("Temporal/PlainDate/dayOfWeek", "Temporal.PlainDate.prototype.dayOfWeek")}}
+- {{jsxref("Temporal/PlainDate/dayOfYear", "Temporal.PlainDate.prototype.dayOfYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/dayofweek/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/dayofweek/index.md
new file mode 100644
index 000000000000000..ff330fcf9e1e6b0
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/dayofweek/index.md
@@ -0,0 +1,99 @@
+---
+title: Temporal.PlainDate.prototype.dayOfWeek
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/dayOfWeek
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDate.dayOfWeek
+---
+
+{{JSRef}}
+
+The **`dayOfWeek`** accessor property of {{jsxref("Temporal.PlainDate")}} instances returns a positive integer representing the 1-based day index in the week of this date. Days in a week are numbered sequentially from `1` to {{jsxref("Temporal/PlainDate/daysInWeek", "daysInWeek")}}, with each number mapping to its name. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. 1 usually represents Monday in the calendar, even when locales using the calendar may consider a different day as the first day of the week (see {{jsxref("Intl/Locale/getWeekInfo", "Intl.Locale.prototype.getWeekInfo()")}}).
+
+All commonly supported calendars use 7-day weeks, and you could generally expect this property to return the same value for the same date across different calendars.
+
+The set accessor of `dayOfWeek` is `undefined`. You cannot change this property directly. To create a new `Temporal.PlainDate` object with the desired new `dayOfWeek` value, use the {{jsxref("Temporal/PlainDate/add", "add()")}} or {{jsxref("Temporal/PlainDate/subtract", "subtract()")}} method with the appropriate number of `days`.
+
+## Examples
+
+### Using dayOfWeek
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+console.log(date.dayOfWeek); // 4; Thursday
+
+const date2 = Temporal.PlainDate.from("2021-07-01[u-ca=chinese]");
+console.log(date2.dayOfWeek); // 4
+```
+
+### Changing dayOfWeek
+
+`PlainDate` does not support changing `dayOfWeek` directly. To change the day of the week, you need to first figure out the difference in days to your desired day of the week, then use `add` or `subtract` to adjust the date accordingly. For example, to change to the Friday of this week (whether before or after):
+
+```js
+function getDayInSameWeek(date, destDayOfWeek) {
+ return date.add({ days: destDayOfWeek - date.dayOfWeek });
+}
+
+console.log(
+ getDayInSameWeek(Temporal.PlainDate.from("2021-07-01"), 5).toString(),
+); // 2021-07-02
+console.log(
+ getDayInSameWeek(Temporal.PlainDate.from("2021-07-03"), 5).toString(),
+); // 2021-07-02
+```
+
+To change to the next Friday:
+
+```js
+function getNextDayInWeek(date, destDayOfWeek) {
+ const distance = destDayOfWeek - date.dayOfWeek;
+ return date.add({
+ days: distance < 0 ? date.daysInWeek + distance : distance,
+ });
+}
+
+console.log(
+ getNextDayInWeek(Temporal.PlainDate.from("2021-07-01"), 5).toString(),
+); // 2021-07-02
+console.log(
+ getNextDayInWeek(Temporal.PlainDate.from("2021-07-03"), 5).toString(),
+); // 2021-07-09
+```
+
+To change to the previous Friday:
+
+```js
+function getPreviousDayInWeek(date, destDayOfWeek) {
+ const distance = date.dayOfWeek - destDayOfWeek;
+ return date.subtract({
+ days: distance < 0 ? date.daysInWeek + distance : distance,
+ });
+}
+
+console.log(
+ getPreviousDayInWeek(Temporal.PlainDate.from("2021-07-01"), 5).toString(),
+); // 2021-06-25
+console.log(
+ getPreviousDayInWeek(Temporal.PlainDate.from("2021-07-03"), 5).toString(),
+); // 2021-07-02
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/with", "Temporal.PlainDate.prototype.with()")}}
+- {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}
+- {{jsxref("Temporal/PlainDate/subtract", "Temporal.PlainDate.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDate/day", "Temporal.PlainDate.prototype.day")}}
+- {{jsxref("Temporal/PlainDate/dayOfYear", "Temporal.PlainDate.prototype.dayOfYear")}}
+- {{jsxref("Temporal/PlainDate/daysInWeek", "Temporal.PlainDate.prototype.daysInWeek")}}
+- {{jsxref("Temporal/PlainDate/weekOfYear", "Temporal.PlainDate.prototype.weekOfYear")}}
+- {{jsxref("Temporal/PlainDate/yearOfWeek", "Temporal.PlainDate.prototype.yearOfWeek")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/dayofyear/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/dayofyear/index.md
new file mode 100644
index 000000000000000..b284636ab436a0f
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/dayofyear/index.md
@@ -0,0 +1,73 @@
+---
+title: Temporal.PlainDate.prototype.dayOfYear
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/dayOfYear
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDate.dayOfYear
+---
+
+{{JSRef}}
+
+The **`dayOfYear`** accessor property of {{jsxref("Temporal.PlainDate")}} instances returns a positive integer representing the 1-based day index in the year of this date. The first day of this year is `1`, and the last day is the {{jsxref("Temporal/PlainDate/daysInYear", "daysInYear")}}. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `dayOfYear` is `undefined`. You cannot change this property directly. To create a new `Temporal.PlainDate` object with the desired new `dayOfYear` value, use the {{jsxref("Temporal/PlainDate/add", "add()")}} or {{jsxref("Temporal/PlainDate/subtract", "subtract()")}} method with the appropriate number of `days`.
+
+## Examples
+
+### Using dayOfYear
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+console.log(date.dayOfYear); // 182
+
+const date2 = Temporal.PlainDate.from("2021-07-01[u-ca=chinese]");
+console.log(date2.dayOfYear); // 140
+
+const date3 = Temporal.PlainDate.from("2020-07-01");
+console.log(date3.dayOfYear); // 183; 2020 is a leap year
+```
+
+### Changing dayOfYear
+
+`PlainDate` does not support changing `dayOfYear` directly. To change the day of the year, you need to first figure out the difference in days to your desired day of the year, then use `add` or `subtract` to adjust the date accordingly. For example, to change to the 100th day of this year (whether before or after):
+
+```js
+function getDayInSameYear(date, destDayOfYear) {
+ return date.add({ days: destDayOfYear - date.dayOfYear });
+}
+
+console.log(
+ getDayInSameYear(Temporal.PlainDate.from("2021-07-01"), 100).toString(),
+); // 2021-04-10
+console.log(
+ getDayInSameYear(Temporal.PlainDate.from("2021-01-01"), 100).toString(),
+); // 2021-04-10
+console.log(
+ getDayInSameYear(Temporal.PlainDate.from("2020-01-01"), 100).toString(),
+); // 2020-04-09
+```
+
+By default, `with()` constrains the day to the range of valid values. So you can always use `{ month: 1, day: 1 }` to set the day to the first day of the year, even if the first day does not have the number `1`. Similarly, the following will set the day to the last day of the year, regardless of how many days are in the last month or year:
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+const lastDay = date.with({ month: Number.MAX_VALUE, day: Number.MAX_VALUE }); // 2021-12-31
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/with", "Temporal.PlainDate.prototype.with()")}}
+- {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}
+- {{jsxref("Temporal/PlainDate/subtract", "Temporal.PlainDate.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDate/year", "Temporal.PlainDate.prototype.year")}}
+- {{jsxref("Temporal/PlainDate/day", "Temporal.PlainDate.prototype.day")}}
+- {{jsxref("Temporal/PlainDate/dayOfWeek", "Temporal.PlainDate.prototype.dayOfWeek")}}
+- {{jsxref("Temporal/PlainDate/daysInYear", "Temporal.PlainDate.prototype.daysInYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/daysinmonth/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/daysinmonth/index.md
new file mode 100644
index 000000000000000..4b64fbb34c81e83
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/daysinmonth/index.md
@@ -0,0 +1,73 @@
+---
+title: Temporal.PlainDate.prototype.daysInMonth
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/daysInMonth
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDate.daysInMonth
+---
+
+{{JSRef}}
+
+The **`daysInMonth`** accessor property of {{jsxref("Temporal.PlainDate")}} instances returns a positive integer representing the number of days in the month of this date. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+Note that the days in month is not always equal to the {{jsxref("Temporal/PlainDate/day", "day")}} of the last day of the month, in the rare case where a month may have a few days skipped.
+
+The set accessor of `daysInMonth` is `undefined`. You cannot change this property directly.
+
+## Examples
+
+### Using daysInMonth
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+console.log(date.daysInMonth); // 31
+
+const date2 = Temporal.PlainDate.from("2021-02-01");
+console.log(date2.daysInMonth); // 28; 2021 is not a leap year
+
+const date3 = Temporal.PlainDate.from("2020-02-01");
+console.log(date3.daysInMonth); // 29; 2020 is a leap year
+
+const date4 = Temporal.PlainDate.from("2021-04-01[u-ca=chinese]");
+console.log(date4.month); // 2
+console.log(date4.daysInMonth); // 30; the Chinese 2nd month has 30 days
+```
+
+### Changing to the second last day of the month
+
+You can use `daysInMonth` to change to the second last day of the month:
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+const secondLastDay = date.with({ day: date.daysInMonth - 1 });
+console.log(secondLastDay.toString()); // 2021-07-30
+```
+
+This is not totally safe, though, because `daysInMonth` is not guaranteed to have any connection with the day index. Here's a safer way to get the second last day:
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+const secondLastDay = date
+ .with({ day: Number.MAX_SAFE_INTEGER })
+ .subtract({ days: 1 });
+console.log(secondLastDay.toString()); // 2021-07-30
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/with", "Temporal.PlainDate.prototype.with()")}}
+- {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}
+- {{jsxref("Temporal/PlainDate/subtract", "Temporal.PlainDate.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDate/year", "Temporal.PlainDate.prototype.year")}}
+- {{jsxref("Temporal/PlainDate/month", "Temporal.PlainDate.prototype.month")}}
+- {{jsxref("Temporal/PlainDate/day", "Temporal.PlainDate.prototype.day")}}
+- {{jsxref("Temporal/PlainDate/daysInWeek", "Temporal.PlainDate.prototype.daysInWeek")}}
+- {{jsxref("Temporal/PlainDate/daysInYear", "Temporal.PlainDate.prototype.daysInYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/daysinweek/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/daysinweek/index.md
new file mode 100644
index 000000000000000..58b030522c47591
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/daysinweek/index.md
@@ -0,0 +1,46 @@
+---
+title: Temporal.PlainDate.prototype.daysInWeek
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/daysInWeek
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDate.daysInWeek
+---
+
+{{JSRef}}
+
+The **`daysInWeek`** accessor property of {{jsxref("Temporal.PlainDate")}} instances returns a positive integer representing the number of days in the week of this date. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+For the ISO 8601 calendar, this is always 7, but in other calendar systems it may differ from week to week. All commonly supported calendars use 7-day weeks.
+
+The set accessor of `daysInWeek` is `undefined`. You cannot change this property directly.
+
+## Examples
+
+### Using daysInWeek
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+console.log(date.daysInWeek); // 7
+
+const date2 = Temporal.PlainDate.from("2021-07-01[u-ca=chinese]");
+console.log(date2.daysInWeek); // 7
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/with", "Temporal.PlainDate.prototype.with()")}}
+- {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}
+- {{jsxref("Temporal/PlainDate/subtract", "Temporal.PlainDate.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDate/yearOfWeek", "Temporal.PlainDate.prototype.yearOfWeek")}}
+- {{jsxref("Temporal/PlainDate/weekOfYear", "Temporal.PlainDate.prototype.weekOfYear")}}
+- {{jsxref("Temporal/PlainDate/dayOfWeek", "Temporal.PlainDate.prototype.dayOfWeek")}}
+- {{jsxref("Temporal/PlainDate/daysInMonth", "Temporal.PlainDate.prototype.daysInMonth")}}
+- {{jsxref("Temporal/PlainDate/daysInYear", "Temporal.PlainDate.prototype.daysInYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/daysinyear/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/daysinyear/index.md
new file mode 100644
index 000000000000000..35bf63c80719c94
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/daysinyear/index.md
@@ -0,0 +1,51 @@
+---
+title: Temporal.PlainDate.prototype.daysInYear
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/daysInYear
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDate.daysInYear
+---
+
+{{JSRef}}
+
+The **`daysInYear`** accessor property of {{jsxref("Temporal.PlainDate")}} instances returns a positive integer representing the number of days in the year of this date. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+For the ISO 8601 calendar, this is 365, or 366 in a leap year. In other calendar systems, it likely differs, especially in non-solar calendars.
+
+The set accessor of `daysInWeek` is `undefined`. You cannot change this property directly.
+
+## Examples
+
+### Using daysInYear
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+console.log(date.daysInYear); // 365
+
+const date2 = Temporal.PlainDate.from("2020-07-01");
+console.log(date2.daysInYear); // 366; 2020 is a leap year
+
+const date3 = Temporal.PlainDate.from("2021-07-01[u-ca=chinese]");
+console.log(date3.daysInYear); // 354
+
+const date4 = Temporal.PlainDate.from("2023-07-01[u-ca=chinese]");
+console.log(date4.daysInYear); // 384; 2023 is a Chinese leap year
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/with", "Temporal.PlainDate.prototype.with()")}}
+- {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}
+- {{jsxref("Temporal/PlainDate/subtract", "Temporal.PlainDate.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDate/year", "Temporal.PlainDate.prototype.year")}}
+- {{jsxref("Temporal/PlainDate/dayOfYear", "Temporal.PlainDate.prototype.dayOfYear")}}
+- {{jsxref("Temporal/PlainDate/daysInMonth", "Temporal.PlainDate.prototype.daysInMonth")}}
+- {{jsxref("Temporal/PlainDate/daysInWeek", "Temporal.PlainDate.prototype.daysInWeek")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/equals/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/equals/index.md
new file mode 100644
index 000000000000000..9a86255ea04aada
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/equals/index.md
@@ -0,0 +1,54 @@
+---
+title: Temporal.PlainDate.prototype.equals()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/equals
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDate.equals
+---
+
+{{JSRef}}
+
+The **`equals()`** method of {{jsxref("Temporal.PlainDate")}} instances returns `true` if this date is equivalent in value to another date (in a form convertible by {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}}), and `false` otherwise. They are compared both by their date values and their calendars, so two dates from different calendars may be considered equal by {{jsxref("Temporal/PlainDate/compare", "Temporal.PlainDate.compare()")}} but not by `equals()`.
+
+## Syntax
+
+```js-nolint
+equals(other)
+```
+
+### Parameters
+
+- `other`
+ - : A string, an object, or a {{jsxref("Temporal.PlainDate")}} instance representing the other date to compare. It is converted to a `Temporal.PlainDate` object using the same algorithm as {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}}.
+
+### Return value
+
+`true` if this date is equal to `other` both in their date value and their calendar, `false` otherwise.
+
+## Examples
+
+### Using equals()
+
+```js
+const date1 = Temporal.PlainDate.from("2021-08-01");
+const date2 = Temporal.PlainDate.from({ year: 2021, month: 8, day: 1 });
+console.log(date1.equals(date2)); // true
+
+const date3 = Temporal.PlainDate.from("2021-08-01[u-ca=japanese]");
+console.log(date1.equals(date3)); // false
+
+const date4 = Temporal.PlainDate.from("2021-08-02");
+console.log(date1.equals(date4)); // false
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/compare", "Temporal.PlainDate.compare()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/era/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/era/index.md
new file mode 100644
index 000000000000000..27df3db3529195b
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/era/index.md
@@ -0,0 +1,64 @@
+---
+title: Temporal.PlainDate.prototype.era
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/era
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDate.era
+---
+
+{{JSRef}}
+
+The **`era`** accessor property of {{jsxref("Temporal.PlainDate")}} instances returns a calendar-specific lowercase string representing the era of this date, or `undefined` if the calendar does not use eras (e.g. ISO 8601). `era` and `eraYear` together uniquely identify a year in a calendar, in the same way that `year` does. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. For Gregorian, it is either `"gregory"` or `"gregory-inverse"`.
+
+The set accessor of `era` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainDate/with", "with()")}} method to create a new `Temporal.PlainDate` object with the desired new value. When setting eras, each code may have some aliases; for example, `"ce"` and `"ad"` are equivalent to `"gregory"`, and `"bce"` and `"bc"` are equivalent to `"gregory-inverse"`.
+
+> [!NOTE]
+> This string is not intended for display to users. Use {{jsxref("Temporal/PlainDate/toLocaleString", "toLocaleString()")}} with the appropriate options to get a localized string.
+
+## Examples
+
+### Using era
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01"); // ISO 8601 calendar
+console.log(date.era); // undefined
+
+const date2 = Temporal.PlainDate.from("2021-07-01[u-ca=gregory]");
+console.log(date2.era); // gregory
+
+const date3 = Temporal.PlainDate.from("-002021-07-01[u-ca=gregory]");
+console.log(date3.era); // gregory-inverse
+
+const date4 = Temporal.PlainDate.from("2021-07-01[u-ca=japanese]");
+console.log(date4.era); // reiwa
+```
+
+### Changing era
+
+You can only set `era` for calendars that support them. For example, the ISO 8601 calendar does not have eras. Note that you must provide `era` and `eraYear` together.
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01[u-ca=gregory]");
+const newDate = date.with({ era: "bc", eraYear: 100 });
+console.log(newDate.toString()); // -000099-07-01[u-ca=gregory]
+
+const date2 = Temporal.PlainDate.from("2021-07-01[u-ca=japanese]");
+const newDate2 = date2.with({ era: "meiji", eraYear: 1 });
+console.log(newDate2.toString()); // 1868-07-01[u-ca=japanese]
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/with", "Temporal.PlainDate.prototype.with()")}}
+- {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}
+- {{jsxref("Temporal/PlainDate/subtract", "Temporal.PlainDate.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDate/year", "Temporal.PlainDate.prototype.year")}}
+- {{jsxref("Temporal/PlainDate/eraYear", "Temporal.PlainDate.prototype.eraYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/erayear/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/erayear/index.md
new file mode 100644
index 000000000000000..d42b60c049043c4
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/erayear/index.md
@@ -0,0 +1,63 @@
+---
+title: Temporal.PlainDate.prototype.eraYear
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/eraYear
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDate.eraYear
+---
+
+{{JSRef}}
+
+The **`eraYear`** accessor property of {{jsxref("Temporal.PlainDate")}} instances returns a non-negative integer representing the year of this date within the era, or `undefined` if the calendar does not use eras (e.g. ISO 8601). The year index usually starts from 1 (more common) or 0, and years in an era can decrease with time (e.g. Gregorian BCE). `era` and `eraYear` together uniquely identify a year in a calendar, in the same way that `year` does. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+Unlike `year`, `era` and `eraYear` may change in the middle of a calendar year. For example, Japan started the Reiwa era on May 1, 2019, so dates from 2019-01-01 to 2019-04-30 have `{ era: "heisei", eraYear: 31 }`, and dates from 2019-05-01 onwards have `{ era: "reiwa", eraYear: 1 }`, but the `year` is always 2019 (because the Japanese calendar uses the ISO 8601 year as the default year).
+
+The set accessor of `eraYear` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainDate/with", "with()")}} method to create a new `Temporal.PlainDate` object with the desired new value.
+
+## Examples
+
+### Using eraYear
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01"); // ISO 8601 calendar
+console.log(date.eraYear); // undefined
+
+const date2 = Temporal.PlainDate.from("2021-07-01[u-ca=gregory]");
+console.log(date2.eraYear); // 2021
+
+const date3 = Temporal.PlainDate.from("-002021-07-01[u-ca=gregory]");
+console.log(date3.eraYear); // 2022; 0000 is used for the year 1 BC
+
+const date4 = Temporal.PlainDate.from("2021-07-01[u-ca=japanese]");
+console.log(date4.eraYear); // 3
+```
+
+### Changing eraYear
+
+You can only set `eraYear` for calendars that support them. For example, the ISO 8601 calendar does not have eras. Note that you must provide `era` and `eraYear` together.
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01[u-ca=gregory]");
+const newDate = date.with({ era: "bc", eraYear: 100 });
+console.log(newDate.toString()); // -000099-07-01[u-ca=gregory]
+
+const date2 = Temporal.PlainDate.from("2021-07-01[u-ca=japanese]");
+const newDate2 = date2.with({ era: "meiji", eraYear: 1 });
+console.log(newDate2.toString()); // 1868-07-01[u-ca=japanese]
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/with", "Temporal.PlainDate.prototype.with()")}}
+- {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}
+- {{jsxref("Temporal/PlainDate/subtract", "Temporal.PlainDate.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDate/year", "Temporal.PlainDate.prototype.year")}}
+- {{jsxref("Temporal/PlainDate/era", "Temporal.PlainDate.prototype.era")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/from/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/from/index.md
new file mode 100644
index 000000000000000..820a13cbd0acdfd
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/from/index.md
@@ -0,0 +1,182 @@
+---
+title: Temporal.PlainDate.from()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/from
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.PlainDate.from
+---
+
+{{JSRef}}
+
+The **`Temporal.PlainDate.from()`** static method creates a new `Temporal.PlainDate` object from another `Temporal.PlainDate` object, an object with date properties, or an [RFC 9557](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#rfc_9557_format) string.
+
+## Syntax
+
+```js-nolint
+Temporal.PlainDate.from(info)
+Temporal.PlainDate.from(info, options)
+```
+
+### Parameters
+
+- `info`
+
+ - : One of the following:
+
+ - A {{jsxref("Temporal.PlainDate")}} instance, which creates a copy of the instance.
+ - A {{jsxref("Temporal.PlainDateTime")}} instance, which provides the calendar date in the same fashion as {{jsxref("Temporal/PlainDateTime/toPlainDate", "Temporal.PlainDateTime.prototype.toPlainDate()")}}.
+ - A {{jsxref("Temporal.ZonedDateTime")}} instance, which provides the calendar date in the same fashion as {{jsxref("Temporal/ZonedDateTime/toPlainDate", "Temporal.ZonedDateTime.prototype.toPlainDate()")}}.
+ - An [RFC 9557](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#rfc_9557_format) string containing a date and optionally a calendar.
+ - An object containing the following properties (in the order they are retrieved and validated):
+
+ - `calendar` {{optional_inline}}
+ - : A string that corresponds to the {{jsxref("Temporal/PlainDate/calendarId", "calendarId")}} property. Defaults to `"iso8601"`. All other properties are interpreted in this calendar system (unlike the {{jsxref("Temporal/PlainDate/PlainDate", "Temporal.PlainDate()")}} constructor, which interprets the values in the ISO calendar system).
+ - `day`
+ - : An integer that corresponds to the {{jsxref("Temporal/PlainDate/day", "day")}} property. Must be positive regardless of the `overflow` option.
+ - `era` and `eraYear`
+ - : A string and an integer that correspond to the {{jsxref("Temporal/PlainDate/era", "era")}} and {{jsxref("Temporal/PlainDate/eraYear", "eraYear")}} properties. Are only used if the calendar system has eras. `era` and `eraYear` must be provided simultaneously. At least one of `era`+`eraYear` or `year` must be provided. If all of `era`, `eraYear`, and `year` are provided, they must be consistent.
+ - `month`
+ - : Corresponds to the {{jsxref("Temporal/PlainDate/month", "month")}} property. Must be positive regardless of the `overflow` option. At least one of `month` or `monthCode` must be provided. If both `month` and `monthCode` are provided, they must be consistent.
+ - `monthCode`
+ - : Corresponds to the {{jsxref("Temporal/PlainDate/monthCode", "monthCode")}} property. At least one of `month` or `monthCode` must be provided. If both `month` and `monthCode` are provided, they must be consistent.
+ - `year`
+ - : Corresponds to the {{jsxref("Temporal/PlainDate/year", "year")}} property. At least one of `era`+`eraYear` or `year` must be provided. If all of `era`, `eraYear`, and `year` are provided, they must be consistent.
+
+ The info should explicitly specify a year (as `year` or `era` and `eraYear`), a month (as `month` or `monthCode`), and a day.
+
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `overflow` {{optional_inline}}
+ - : A string specifying the behavior when a date component is out of range (when using the object `info`). Possible values are:
+ - `"constrain"` (default)
+ - : The date component is [clamped](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#invalid_date_clamping) to the valid range.
+ - `"reject"`
+ - : A {{jsxref("RangeError")}} is thrown if the date component is out of range.
+
+### Return value
+
+A new `Temporal.PlainDate` object, representing the date specified by `info` in the specified `calendar`.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Thrown in one of the following cases:
+ - `info` is not an object or a string.
+ - `options` is not an object or `undefined`.
+ - The provided properties are insufficient to unambiguously determine a date. You usually need to provide a `year` (or `era` and `eraYear`), a `month` (or `monthCode`), and a `day`.
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - The provided properties that specify the same component are inconsistent.
+ - The provided non-numerical properties are not valid; for example, if `monthCode` is never a valid month code in this calendar.
+ - The provided numerical properties are out of range, and `options.overflow` is set to `"reject"`.
+
+## Examples
+
+### Creating a PlainDate from an object
+
+```js
+// Year, month, and day
+const d1 = Temporal.PlainDate.from({ year: 2021, month: 7, day: 1 });
+console.log(d1.toString()); // "2021-07-01"
+
+// Year, month code, and day
+const d2 = Temporal.PlainDate.from({ year: 2021, monthCode: "M07", day: 1 });
+console.log(d2.toString()); // "2021-07-01"
+
+// Year, month, day in a different calendar
+const d3 = Temporal.PlainDate.from({
+ year: 2021,
+ month: 7,
+ day: 1,
+ calendar: "chinese",
+});
+// Note: when you construct a date with an object, the date components
+// are in *that* calendar, not the ISO calendar. However, toString() always
+// outputs the date in the ISO calendar. For example, the year "2021" in
+// the Chinese calendar is actually 616 BC in the ISO calendar.
+console.log(d3.toString()); // "-000616-08-12[u-ca=chinese]"
+
+// Era, eraYear, month, and day
+const d4 = Temporal.PlainDate.from({
+ era: "meiji",
+ eraYear: 4,
+ month: 7,
+ day: 1,
+ calendar: "japanese",
+});
+console.log(d4.toString()); // "1871-07-01[u-ca=japanese]"
+```
+
+### Controlling overflow behavior
+
+By default, out-of-range values are clamped to the valid range:
+
+```js
+const d1 = Temporal.PlainDate.from({ year: 2021, month: 13, day: 1 });
+console.log(d1.toString()); // "2021-12-01"
+
+const d2 = Temporal.PlainDate.from({ year: 2021, month: 2, day: 29 });
+console.log(d2.toString()); // "2021-02-28"
+
+const d3 = Temporal.PlainDate.from("2021-02-29");
+console.log(d3.toString()); // "2021-02-28"
+```
+
+You can change this behavior to throw an error instead:
+
+```js
+const d3 = Temporal.PlainDate.from(
+ { year: 2021, month: 13, day: 1 },
+ { overflow: "reject" },
+);
+// RangeError: date value "month" not in 1..12: 13
+```
+
+### Creating a PlainDate from a string
+
+```js
+const d = Temporal.PlainDate.from("2021-07-01");
+console.log(d.toLocaleString("en-US", { dateStyle: "full" }));
+// Thursday, July 1, 2021
+
+// Providing a calendar
+const d2 = Temporal.PlainDate.from("2021-07-01[u-ca=japanese]");
+console.log(
+ d2.toLocaleString("ja-JP", { calendar: "japanese", dateStyle: "full" }),
+);
+// 令和3年7月1日木曜日
+
+// Providing a time and an offset (ignored)
+const d3 = Temporal.PlainDate.from("2021-07-01T00:00+08:00");
+console.log(d3.toString()); // "2021-07-01"
+```
+
+### Creating a PlainDate from another Temporal instance
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01T12:00");
+const d = Temporal.PlainDate.from(dt);
+console.log(d.toString()); // "2021-07-01"
+
+const zdt = Temporal.ZonedDateTime.from(
+ "2021-07-01T00:00+08:00[Asia/Shanghai]",
+);
+const d2 = Temporal.PlainDate.from(zdt);
+console.log(d2.toString()); // "2021-07-01"
+
+const d3 = Temporal.PlainDate.from(d);
+console.log(d3.toString()); // "2021-07-01"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/PlainDate", "Temporal.PlainDate()")}}
+- {{jsxref("Temporal/PlainDate/with", "Temporal.PlainDate.prototype.with()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/index.md
new file mode 100644
index 000000000000000..472e4319f646db3
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/index.md
@@ -0,0 +1,147 @@
+---
+title: Temporal.PlainDate
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate
+page-type: javascript-class
+browser-compat: javascript.builtins.Temporal.PlainDate
+---
+
+{{JSRef}}
+
+The **`Temporal.PlainDate`** object represents a calendar date (a date without a time or time zone); for example, an event on a calendar which happens during the whole day no matter which time zone it's happening in. It is fundamentally represented as an ISO 8601 calendar date, with year, month, and day fields, and an associated calendar system.
+
+## Description
+
+A `PlainDate` is essentially the date part of a {{jsxref("Temporal.PlainDateTime")}} object, with the time information removed. Because the date and time information don't have much interaction, all general information about date properties is documented here.
+
+### RFC 9557 format
+
+`PlainDate` objects can be serialized and parsed using the [RFC 9557](https://datatracker.ietf.org/doc/html/rfc9557) format, an extension to the [ISO 8601 / RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) format. The string has the following form (spaces are only for readability and should not be present in the actual string):
+
+```plain
+YYYY-MM-DD [u-ca=calendar_id]
+```
+
+- `YYYY`
+ - : Either a four-digit number, or a six-digit number with a `+` or `-` sign.
+- `MM`
+ - : A two-digit number from `01` to `12`.
+- `DD`
+ - : A two-digit number from `01` to `31`. The `YYYY`, `MM`, and `DD` components can be separated by `-` or nothing.
+- `[u-ca=calendar_id]` {{optional_inline}}
+ - : Replace `calendar_id` with the calendar to use. May have a _critical flag_ by prefixing the key with `!`: e.g., `[!u-ca=iso8601]`. This flag generally tells other systems that it cannot be ignored if they don't support it. The `Temporal` parser will throw an error if the annotations contain two or more calendar annotations and one of them is critical. Defaults to `[u-ca=iso8601]`. Note that the `YYYY-MM-DD` is always interpreted as an ISO 8601 calendar date and then converted to the specified calendar.
+
+As an input, you may optionally include the time, offset, and time zone identifier, in the same format as [`PlainDateTime`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime#rfc_9557_format), but they will be ignored. Other annotations in the `[key=value]` format are also ignored, and they must not have the critical flag.
+
+When serializing, you can configure whether to display the calendar ID, and whether to add a critical flag for it.
+
+### Invalid date clamping
+
+The {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}}, {{jsxref("Temporal/PlainDate/with", "Temporal.PlainDate.prototype.with()")}}, {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}, {{jsxref("Temporal/PlainDate/subtract", "Temporal.PlainDate.prototype.subtract()")}} methods, and their counterparts in other `Temporal` objects, allow constructing dates using calendar-specific properties. The date components may be out of range. In the ISO calendar, this is always an _overflow_, such as the month being greater than 12 or the day being greater than the number of days, and fixing it would only involve clamping the value to the maximum allowed value. In other calendars, the invalid case may be more complex. When using the `overflow: "constrain"` option, invalid dates are fixed to a valid one in the following way:
+
+- If the day doesn't exist but the month does: pick the closest day in the same month. If there are two equally-close dates in that month, pick the later one.
+- If the month is a leap month that doesn't exist in the year: pick another date according to the cultural conventions of that calendar's users. Usually this will result in the same day in the month before or after where that month would normally fall in a leap year.
+- If the month doesn't exist in the year for other reasons: pick the closest date that is still in the same year. If there are two equally-close dates in that year, pick the later one.
+- If the entire year doesn't exist: pick the closest date in a different year. If there are two equally-close dates, pick the later one.
+
+## Constructor
+
+- {{jsxref("Temporal/PlainDate/PlainDate", "Temporal.PlainDate()")}}
+ - : Creates a new `Temporal.PlainDate` object by directly supplying the underlying data.
+
+## Static methods
+
+- {{jsxref("Temporal/PlainDate/compare", "Temporal.PlainDate.compare()")}}
+ - : Returns a number (-1, 0, or 1) indicating whether the first date comes before, is the same as, or comes after the second date. Equivalent to comparing the year, month, and day fields of the underlying ISO 8601 dates.
+- {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}}
+ - : Creates a new `Temporal.PlainDate` object from another `Temporal.PlainDate` object, an object with date properties, or an [RFC 9557](#rfc_9557_format) string.
+
+## Instance properties
+
+These properties are defined on `Temporal.PlainDate.prototype` and shared by all `Temporal.PlainDate` instances.
+
+- {{jsxref("Temporal/PlainDate/calendarId", "Temporal.PlainDate.prototype.calendarId")}}
+ - : Returns a string representing the [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars) used to interpret the internal ISO 8601 date.
+- {{jsxref("Object/constructor", "Temporal.PlainDate.prototype.constructor")}}
+ - : The constructor function that created the instance object. For `Temporal.PlainDate` instances, the initial value is the {{jsxref("Temporal/PlainDate/PlainDate", "Temporal.PlainDate()")}} constructor.
+- {{jsxref("Temporal/PlainDate/day", "Temporal.PlainDate.prototype.day")}}
+ - : Returns a positive integer representing the 1-based day index in the month of this date, which is the same day number you would see on a calendar. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Generally starts at 1 and is continuous, but not always.
+- {{jsxref("Temporal/PlainDate/dayOfWeek", "Temporal.PlainDate.prototype.dayOfWeek")}}
+ - : Returns a positive integer representing the 1-based day index in the week of this date. Days in a week are numbered sequentially from `1` to {{jsxref("Temporal/PlainDate/daysInWeek", "daysInWeek")}}, with each number mapping to its name. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. 1 usually represents Monday in the calendar, even when locales using the calendar may consider a different day as the first day of the week (see {{jsxref("Intl/Locale/getWeekInfo", "Intl.Locale.prototype.getWeekInfo()")}}).
+- {{jsxref("Temporal/PlainDate/dayOfYear", "Temporal.PlainDate.prototype.dayOfYear")}}
+ - : Returns a positive integer representing the 1-based day index in the year of this date. The first day of this year is `1`, and the last day is the {{jsxref("Temporal/PlainDate/daysInYear", "daysInYear")}}. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+- {{jsxref("Temporal/PlainDate/daysInMonth", "Temporal.PlainDate.prototype.daysInMonth")}}
+ - : Returns a positive integer representing the number of days in the month of this date. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+- {{jsxref("Temporal/PlainDate/daysInWeek", "Temporal.PlainDate.prototype.daysInWeek")}}
+ - : Returns a positive integer representing the number of days in the week of this date. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. For the ISO 8601 calendar, this is always 7, but in other calendar systems it may differ from week to week.
+- {{jsxref("Temporal/PlainDate/daysInYear", "Temporal.PlainDate.prototype.daysInYear")}}
+ - : Returns a positive integer representing the number of days in the year of this date. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. For the ISO 8601 calendar, this is 365, or 366 in a leap year.
+- {{jsxref("Temporal/PlainDate/era", "Temporal.PlainDate.prototype.era")}}
+ - : Returns a calendar-specific lowercase string representing the era of this date, or `undefined` if the calendar does not use eras (e.g. ISO 8601). `era` and `eraYear` together uniquely identify a year in a calendar, in the same way that `year` does. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. For Gregorian, it is either `"gregory"` or `"gregory-inverse"`.
+- {{jsxref("Temporal/PlainDate/eraYear", "Temporal.PlainDate.prototype.eraYear")}}
+ - : Returns a non-negative integer representing the year of this date within the era, or `undefined` if the calendar does not use eras (e.g. ISO 8601). The year index usually starts from 1 (more common) or 0, and years in an era can decrease with time (e.g. Gregorian BCE). `era` and `eraYear` together uniquely identify a year in a calendar, in the same way that `year` does. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+- {{jsxref("Temporal/PlainDate/inLeapYear", "Temporal.PlainDate.prototype.inLeapYear")}}
+ - : Returns a boolean indicating whether this date is in a leap year. A leap year is a year that has more days (due to a leap day or leap month) than a common year. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+- {{jsxref("Temporal/PlainDate/month", "Temporal.PlainDate.prototype.month")}}
+ - : Returns a positive integer representing the 1-based month index in the year of this date. The first month of this year is `1`, and the last month is the {{jsxref("Temporal/PlainDate/monthsInYear", "monthsInYear")}}. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Note that unlike {{jsxref("Date.prototype.getMonth()")}}, the index is 1-based. If the calendar has leap months, then the month with the same {{jsxref("Temporal/PlainDate/monthCode", "monthCode")}} may have different `month` indexes for different years.
+- {{jsxref("Temporal/PlainDate/monthCode", "Temporal.PlainDate.prototype.monthCode")}}
+ - : Returns a calendar-specific string representing the month of this date. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Usually it is `M` plus a two-digit month number. For leap months, it is the previous month's code followed by `L`. If the leap month is the first month of the year, the code is `M00L`.
+- {{jsxref("Temporal/PlainDate/monthsInYear", "Temporal.PlainDate.prototype.monthsInYear")}}
+ - : Returns a positive integer representing the number of months in the year of this date. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. For the ISO 8601 calendar, this is always 12, but in other calendar systems it may differ.
+- {{jsxref("Temporal/PlainDate/weekOfYear", "Temporal.PlainDate.prototype.weekOfYear")}}
+ - : Returns a positive integer representing the 1-based week index in the {{jsxref("Temporal/PlainDate/yearOfWeek", "yearOfWeek")}} of this date, or `undefined` if the calendar does not have a well-defined week system. The first week of the year is `1`. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Note that for ISO 8601, the first and last few days of the year may be attributed to the last week of the previous year or the first week of the next year.
+- {{jsxref("Temporal/PlainDate/year", "Temporal.PlainDate.prototype.year")}}
+ - : Returns an integer representing the number of years of this date relative to the start of a calendar-specific epoch year. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Usually year 1 is either the first year of the latest era or the ISO 8601 year `0001`. If the epoch is in the middle of the year, that year will have the same value before and after the start date of the era.
+- {{jsxref("Temporal/PlainDate/yearOfWeek", "Temporal.PlainDate.prototype.yearOfWeek")}}
+ - : Returns an integer representing the year to be paired with the {{jsxref("Temporal/PlainDate/weekOfYear", "weekOfYear")}} of this date, or `undefined` if the calendar does not have a well-defined week system. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Usually this is the year of the date, but for ISO 8601, the first and last few days of the year may be attributed to the last week of the previous year or the first week of the next year, causing the `yearOfWeek` to differ by 1.
+- `Temporal.PlainDate.prototype[Symbol.toStringTag]`
+ - : The initial value of the [`[Symbol.toStringTag]`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) property is the string `"Temporal.PlainDate"`. This property is used in {{jsxref("Object.prototype.toString()")}}.
+
+## Instance methods
+
+- {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}
+ - : Returns a new `Temporal.PlainDate` object representing this date moved forward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}).
+- {{jsxref("Temporal/PlainDate/equals", "Temporal.PlainDate.prototype.equals()")}}
+ - : Returns `true` if this date is equivalent in value to another date (in a form convertible by {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}}), and `false` otherwise. They are compared both by their date values and their calendars.
+- {{jsxref("Temporal/PlainDate/since", "Temporal.PlainDate.prototype.since()")}}
+ - : Returns a new {{jsxref("Temporal.Duration")}} object representing the duration from another date (in a form convertible by {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}}) to this date. The duration is positive if the other date is before this date, and negative if after.
+- {{jsxref("Temporal/PlainDate/subtract", "Temporal.PlainDate.prototype.subtract()")}}
+ - : Returns a new `Temporal.PlainDate` object representing this date moved backward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}).
+- {{jsxref("Temporal/PlainDate/toJSON", "Temporal.PlainDate.prototype.toJSON()")}}
+ - : Returns a string representing this date in the same [RFC 9557 format](#rfc_9557_format) as calling {{jsxref("Temporal/PlainDate/toString", "toString()")}}. Intended to be implicitly called by {{jsxref("JSON.stringify()")}}.
+- {{jsxref("Temporal/PlainDate/toLocaleString", "Temporal.PlainDate.prototype.toLocaleString()")}}
+ - : Returns a string with a language-sensitive representation of this date.
+- {{jsxref("Temporal/PlainDate/toPlainDateTime", "Temporal.PlainDate.prototype.toPlainDateTime()")}}
+ - : Returns a new {{jsxref("Temporal.PlainDateTime")}} object representing this date and a supplied time in the same calendar system.
+- {{jsxref("Temporal/PlainDate/toPlainMonthDay", "Temporal.PlainDate.prototype.toPlainMonthDay()")}}
+ - : Returns a new {{jsxref("Temporal.PlainMonthDay")}} object representing the {{jsxref("Temporal/PlainDate/monthCode", "monthCode")}} and {{jsxref("Temporal/PlainDate/day", "day")}} of this date in the same calendar system.
+- {{jsxref("Temporal/PlainDate/toPlainYearMonth", "Temporal.PlainDate.prototype.toPlainYearMonth()")}}
+ - : Returns a new {{jsxref("Temporal.PlainYearMonth")}} object representing the {{jsxref("Temporal/PlainDate/year", "year")}} and {{jsxref("Temporal/PlainDate/month", "month")}} of this date in the same calendar system.
+- {{jsxref("Temporal/PlainDate/toString", "Temporal.PlainDate.prototype.toString()")}}
+ - : Returns a string representing this date in the [RFC 9557 format](#rfc_9557_format).
+- {{jsxref("Temporal/PlainDate/toZonedDateTime", "Temporal.PlainDate.prototype.toZonedDateTime()")}}
+ - : Returns a new {{jsxref("Temporal.ZonedDateTime")}} object representing this date, a supplied time, and a supplied time zone, in the same calendar system.
+- {{jsxref("Temporal/PlainDate/until", "Temporal.PlainDate.prototype.until()")}}
+ - : Returns a new {{jsxref("Temporal.Duration")}} object representing the duration from this date to another date (in a form convertible by {{jsxref("Temporal/Instant/from", "Temporal.Instant.from()")}}). The duration is positive if the other date is after this date, and negative if before.
+- {{jsxref("Temporal/PlainDate/valueOf", "Temporal.PlainDate.prototype.valueOf()")}}
+ - : Throws a {{jsxref("TypeError")}}, which prevents `Temporal.PlainDate` instances from being [implicitly converted to primitives](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) when used in arithmetic or comparison operations.
+- {{jsxref("Temporal/PlainDate/with", "Temporal.PlainDate.prototype.with()")}}
+ - : Returns a new `Temporal.PlainDate` object representing this date with some fields replaced by new values.
+- {{jsxref("Temporal/PlainDate/withCalendar", "Temporal.PlainDate.prototype.withCalendar()")}}
+ - : Returns a new `Temporal.PlainDate` object representing this date interpreted in the new calendar system.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal.PlainMonthDay")}}
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal.ZonedDateTime")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/inleapyear/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/inleapyear/index.md
new file mode 100644
index 000000000000000..694bf9031d197f1
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/inleapyear/index.md
@@ -0,0 +1,58 @@
+---
+title: Temporal.PlainDate.prototype.inLeapYear
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/inLeapYear
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDate.inLeapYear
+---
+
+{{JSRef}}
+
+The **`inLeapYear`** accessor property of {{jsxref("Temporal.PlainDate")}} instances returns a boolean indicating whether this date is in a leap year. A leap year is a year that has more days (due to a leap day or leap month) than a common year. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+For the ISO 8601 calendar, a leap year is a year that is evenly divisible by 4, except for years that are evenly divisible by 100, unless the year is also evenly divisible by 400. For the ISO 8601 calendar, leap years have 366 days, while common years have 365 days. For other calendar systems, the rules likely differ, and leap years may have more days added (such as a leap month).
+
+The set accessor of `inLeapYear` is `undefined`. You cannot change this property directly.
+
+## Examples
+
+### Using inLeapYear
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+console.log(date.inLeapYear); // false
+console.log(date.daysInYear); // 365
+console.log(date.monthsInYear); // 12
+
+const date2 = Temporal.PlainDate.from("2020-07-01");
+console.log(date2.inLeapYear); // true
+console.log(date2.daysInYear); // 366
+console.log(date2.monthsInYear); // 12
+
+const date3 = Temporal.PlainDate.from("2021-07-01[u-ca=chinese]");
+console.log(date3.inLeapYear); // false
+console.log(date3.daysInYear); // 354
+console.log(date3.monthsInYear); // 12
+
+const date4 = Temporal.PlainDate.from("2023-07-01[u-ca=chinese]");
+console.log(date4.inLeapYear); // true
+console.log(date4.daysInYear); // 384
+console.log(date4.monthsInYear); // 13
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/with", "Temporal.PlainDate.prototype.with()")}}
+- {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}
+- {{jsxref("Temporal/PlainDate/subtract", "Temporal.PlainDate.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDate/year", "Temporal.PlainDate.prototype.year")}}
+- {{jsxref("Temporal/PlainDate/daysInYear", "Temporal.PlainDate.prototype.daysInYear")}}
+- {{jsxref("Temporal/PlainDate/monthsInYear", "Temporal.PlainDate.prototype.monthsInYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/month/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/month/index.md
new file mode 100644
index 000000000000000..eeb1ebbc9f2e8ce
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/month/index.md
@@ -0,0 +1,101 @@
+---
+title: Temporal.PlainDate.prototype.month
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/month
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDate.month
+---
+
+{{JSRef}}
+
+The **`month`** accessor property of {{jsxref("Temporal.PlainDate")}} instances returns a positive integer representing the 1-based month index in the year of this date. The first month of this year is `1`, and the last month is the {{jsxref("Temporal/PlainDate/monthsInYear", "monthsInYear")}}. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+Note that unlike {{jsxref("Date.prototype.getMonth()")}}, the index is 1-based. If the calendar has leap months, then the month with the same {{jsxref("Temporal/PlainDate/monthCode", "monthCode")}} may have different `month` indexes for different years.
+
+> [!NOTE]
+> Do not use this property to identify the actual month, including its name. Use {{jsxref("Temporal/PlainDate/monthCode", "monthCode")}} for that purpose. Use `month` only for identifying months within the context of a year, or to figure out their order.
+
+The set accessor of `month` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainDate/with", "with()")}} method to create a new `Temporal.PlainDate` object with the desired new value.
+
+## Examples
+
+### Using month
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01"); // ISO 8601 calendar
+console.log(date.monthCode); // "M07"
+console.log(date.month); // 7
+
+const date2 = Temporal.PlainDate.from("2021-05-01[u-ca=chinese]");
+console.log(date2.monthCode); // "M03"
+console.log(date2.month); // 3; it is March 20 in the Chinese calendar
+
+const date3 = Temporal.PlainDate.from("2023-05-01[u-ca=chinese]");
+console.log(date3.monthCode); // "M03"
+console.log(date3.month); // 4, although it is also March (M03)!
+
+const date4 = Temporal.PlainDate.from("2023-04-01[u-ca=chinese]");
+console.log(date4.monthCode); // "M02L"
+console.log(date4.month); // 3, this month is a leap month, i.e. a duplicate February
+```
+
+### Looping through all months in a year
+
+```js
+const year = Temporal.PlainDate.from("2021-07-14"); // An arbitrary date in the year
+for (
+ let month = year.with({ month: 1 });
+ month.year === year.year;
+ month = month.add({ months: 1 })
+) {
+ console.log(month.month);
+}
+
+// Alternatively, this is also a safe way (unlike the day example):
+for (let month = 1; month <= year.monthsInYear; month++) {
+ const monthDate = year.with({ month });
+}
+```
+
+### Changing month
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+const newDate = date.with({ month: 2 });
+console.log(newDate.toString()); // 2021-02-01
+```
+
+You can also use {{jsxref("Temporal/PlainDate/add", "add()")}} or {{jsxref("Temporal/PlainDate/subtract", "subtract()")}} to move a certain number of months from the current date.
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+const newDate = date.add({ months: 3 });
+console.log(newDate.toString()); // 2021-10-01
+```
+
+By default, `with()` constrains the day to the range of valid values. Both of the following will set the month to the last month of the year:
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+const lastMonth = date.with({ month: date.monthsInYear }); // 2021-12-01
+const lastMonth2 = date.with({ month: Number.MAX_VALUE }); // 2021-12-01
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/with", "Temporal.PlainDate.prototype.with()")}}
+- {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}
+- {{jsxref("Temporal/PlainDate/subtract", "Temporal.PlainDate.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDate/year", "Temporal.PlainDate.prototype.year")}}
+- {{jsxref("Temporal/PlainDate/day", "Temporal.PlainDate.prototype.day")}}
+- {{jsxref("Temporal/PlainDate/monthCode", "Temporal.PlainDate.prototype.monthCode")}}
+- {{jsxref("Temporal/PlainDate/daysInMonth", "Temporal.PlainDate.prototype.daysInMonth")}}
+- {{jsxref("Temporal/PlainDate/monthsInYear", "Temporal.PlainDate.prototype.monthsInYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/monthcode/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/monthcode/index.md
new file mode 100644
index 000000000000000..c830cafac1af69e
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/monthcode/index.md
@@ -0,0 +1,120 @@
+---
+title: Temporal.PlainDate.prototype.monthCode
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/monthCode
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDate.monthCode
+---
+
+{{JSRef}}
+
+The **`monthCode`** accessor property of {{jsxref("Temporal.PlainDate")}} instances returns a calendar-specific string representing the month of this date. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+Usually it is `M` plus a two-digit month number. For leap months, it is the previous month's code followed by `L` (even if it's conceptually a derivative of the following month; for example, in the Hebrew calendar, Adar I has code `M05L` but Adar II has code `M06`). If the leap month is the first month of the year, the code is `M00L`.
+
+> [!NOTE]
+> Don't assume that `monthCode` is a user-friendly string; use `toLocaleString()` to format your date instead. Generally, don't cache the name of months in an array or object. Even though `monthCode` usually maps to the month's name within one calendar, we recommend always computing the month's name using, for example, `date.toLocaleString("en-US", { calendar: date.calendarId, month: "long" })`.
+
+The set accessor of `monthCode` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainDate/with", "with()")}} method to create a new `Temporal.PlainDate` object with the desired new value.
+
+## Examples
+
+### Using monthCode
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01"); // ISO 8601 calendar
+console.log(date.monthCode); // "M07"
+console.log(date.month); // 7
+
+const date2 = Temporal.PlainDate.from("2021-05-01[u-ca=chinese]");
+console.log(date2.monthCode); // "M03"
+console.log(date2.month); // 3; it is March 20 in the Chinese calendar
+
+const date3 = Temporal.PlainDate.from("2023-05-01[u-ca=chinese]");
+console.log(date3.monthCode); // "M03"
+console.log(date3.month); // 4, although it is also March (M03)!
+
+const date4 = Temporal.PlainDate.from("2023-04-01[u-ca=chinese]");
+console.log(date4.monthCode); // "M02L"
+console.log(date4.month); // 3, this month is a leap month, i.e. a duplicate February
+```
+
+### Changing monthCode
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+const newDate = date.with({ month: 2 });
+console.log(newDate.toString()); // 2021-02-01
+```
+
+You can also use {{jsxref("Temporal/PlainDate/add", "add()")}} or {{jsxref("Temporal/PlainDate/subtract", "subtract()")}} to move a certain number of months from the current date.
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+const newDate = date.add({ months: 3 });
+console.log(newDate.toString()); // 2021-10-01
+```
+
+By default, `with()` constrains the day to the range of valid values. Both of the following will set the month to the last month of the year:
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+const lastMonth = date.with({ month: date.monthsInYear }); // 2021-12-01
+const lastMonth2 = date.with({ month: Number.MAX_VALUE }); // 2021-12-01
+```
+
+### Formatting month names
+
+Don't do this:
+
+
+```js example-bad
+const names = [
+ "January", "February", "March", "April", "May", "June",
+ "July", "August", "September", "October", "November", "December"
+];
+
+const date = Temporal.PlainDate.from("2021-07-01");
+console.log(names[date.month - 1]); // July
+```
+
+Also don't do this:
+
+
+```js example-bad
+const names = {
+ "M01": "January", "M02": "February", "M03": "March", "M04": "April",
+ "M05": "May", "M06": "June", "M07": "July", "M08": "August",
+ "M09": "September", "M10": "October", "M11": "November", "M12": "December"
+};
+
+const date = Temporal.PlainDate.from("2021-07-01");
+console.log(names[date.monthCode]); // July
+```
+
+Instead, always do this, which is more user-friendly and less error-prone, and easily generalizes to other calendars:
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+console.log(
+ date.toLocaleString("en-US", { calendar: date.calendarId, month: "long" }),
+); // July
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/with", "Temporal.PlainDate.prototype.with()")}}
+- {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}
+- {{jsxref("Temporal/PlainDate/subtract", "Temporal.PlainDate.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDate/year", "Temporal.PlainDate.prototype.year")}}
+- {{jsxref("Temporal/PlainDate/month", "Temporal.PlainDate.prototype.month")}}
+- {{jsxref("Temporal/PlainDate/daysInMonth", "Temporal.PlainDate.prototype.daysInMonth")}}
+- {{jsxref("Temporal/PlainDate/monthsInYear", "Temporal.PlainDate.prototype.monthsInYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/monthsinyear/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/monthsinyear/index.md
new file mode 100644
index 000000000000000..cd2aa5b608dafca
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/monthsinyear/index.md
@@ -0,0 +1,58 @@
+---
+title: Temporal.PlainDate.prototype.monthsInYear
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/monthsInYear
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDate.monthsInYear
+---
+
+{{JSRef}}
+
+The **`monthsInYear`** accessor property of {{jsxref("Temporal.PlainDate")}} instances returns a positive integer representing the number of months in the year of this date. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+For the ISO 8601 calendar, this is always 12, but in other calendar systems it may differ. For example, in calendars using leap months, leap years will have one more month than common years.
+
+The set accessor of `monthsInYear` is `undefined`. You cannot change this property directly.
+
+## Examples
+
+### Using monthsInYear
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+console.log(date.monthsInYear); // 12
+
+const date2 = Temporal.PlainDate.from("2021-07-01[u-ca=chinese]");
+console.log(date2.monthsInYear); // 12
+
+const date3 = Temporal.PlainDate.from("2023-07-01[u-ca=chinese]");
+console.log(date3.monthsInYear); // 13; 2023 is a Chinese leap year
+```
+
+### Changing to the second last month of the year
+
+You can use `monthsInYear` to change to the second last day of the month:
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+const secondLastMonth = date.with({ month: date.monthsInYear - 1 });
+console.log(secondLastMonth.toString()); // 2021-11-01
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/with", "Temporal.PlainDate.prototype.with()")}}
+- {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}
+- {{jsxref("Temporal/PlainDate/subtract", "Temporal.PlainDate.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDate/year", "Temporal.PlainDate.prototype.year")}}
+- {{jsxref("Temporal/PlainDate/month", "Temporal.PlainDate.prototype.month")}}
+- {{jsxref("Temporal/PlainDate/monthCode", "Temporal.PlainDate.prototype.monthCode")}}
+- {{jsxref("Temporal/PlainDate/daysInMonth", "Temporal.PlainDate.prototype.daysInMonth")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/plaindate/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/plaindate/index.md
new file mode 100644
index 000000000000000..aca2cb3e5b22d6b
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/plaindate/index.md
@@ -0,0 +1,77 @@
+---
+title: Temporal.PlainDate()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/PlainDate
+page-type: javascript-constructor
+browser-compat: javascript.builtins.Temporal.PlainDate.PlainDate
+---
+
+{{JSRef}}
+
+The **`Temporal.PlainDate()`** constructor creates {{jsxref("Temporal.PlainDate")}} objects.
+
+This constructor allows you to create instances by directly supplying the underlying data. Like all other `Temporal` classes, you should usually construct `Temporal.PlainDate` objects using the {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}} static method, which can handle a variety of input types.
+
+## Syntax
+
+```js-nolint
+new Temporal.PlainDate(year, month, day)
+new Temporal.PlainDate(year, month, day, calendar)
+```
+
+> **Note:** `Temporal.PlainDate()` can only be constructed with [`new`](/en-US/docs/Web/JavaScript/Reference/Operators/new). Attempting to call it without `new` throws a {{jsxref("TypeError")}}.
+
+### Parameters
+
+- `year`
+ - : A number, truncated to an integer, representing the year in the ISO calendar system.
+- `month`
+ - : A number, truncated to an integer, representing the month in the ISO calendar system.
+- `day`
+ - : A number, truncated to an integer, representing the day of the month in the ISO calendar system.
+- `calendar` {{optional_inline}}
+ - : A string representing the [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars) to use. Note that irrespective of the `calendar`, the `year`, `month`, and `day` must be in the ISO 8601 calendar system. Defaults to `"iso8601"`.
+
+### Return value
+
+A new `Temporal.PlainDate` object, representing the date specified by `year`, `month`, `day` (in the ISO calendar), interpreted in the calendar system specified by `calendar`.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Thrown if `calendar` is not a string or `undefined`.
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - `year`, `month`, or `day` is not a finite number, or do not represent a valid date in the ISO calendar system.
+ - `calendar` is not a valid calendar identifier.
+
+## Examples
+
+### Using Temporal.PlainDate()
+
+```js
+const plainDate = new Temporal.PlainDate(2021, 7, 1);
+console.log(plainDate.toString()); // 2021-07-01
+
+// Note that the date is stored internally as ISO 8601, even when it's
+// interpreted in a different calendar system. For example, even though
+// 2021-07-01 is 4658-05-22 in the Chinese calendar, you still pass the
+// ISO date to the constructor.
+const plainDate2 = new Temporal.PlainDate(2021, 7, 1, "chinese");
+console.log(plainDate2.toString()); // 2021-07-01[u-ca=chinese]
+console.log(plainDate2.year); // 4658
+console.log(plainDate2.month); // 5
+console.log(plainDate2.day); // 22
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/since/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/since/index.md
new file mode 100644
index 000000000000000..740081f0cb24f0b
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/since/index.md
@@ -0,0 +1,103 @@
+---
+title: Temporal.PlainDate.prototype.since()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/since
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDate.since
+---
+
+{{JSRef}}
+
+The **`since()`** method of {{jsxref("Temporal.PlainDate")}} instances returns a new {{jsxref("Temporal.Duration")}} object representing the duration from another date (in a form convertible by {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}}) to this date. The duration is positive if the other date is before this date, and negative if after.
+
+This method does `this - other`. To do `other - this`, use the {{jsxref("Temporal/PlainDate/until", "until()")}} method.
+
+## Syntax
+
+```js-nolint
+since(other)
+since(other, options)
+```
+
+### Parameters
+
+- `other`
+ - : A string, an object, or a {{jsxref("Temporal.PlainDate")}} instance representing a date to subtract from this date. It is converted to a `Temporal.PlainDate` object using the same algorithm as {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}}. It must have the same calendar as `this`.
+- `options` {{optional_inline}}
+ - : An object containing the options for {{jsxref("Temporal/Duration/round", "Temporal.Duration.prototype.round()")}}, which includes `largestUnit`, `roundingIncrement`, `roundingMode`, and `smallestUnit`. `largestUnit` and `smallestUnit` only accept the units: `"year"`, `"month"`, `"week"`, `"day"`, or their plural forms. For `largestUnit`, the default value `"auto"` means `"day"` or `smallestUnit`, whichever is greater. For `smallestUnit`, the default value is `"day"`. The current date is used as the `relativeTo` option. Note that using [units larger than `"day"`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#calendar_durations) may make the duration not portable to other calendars or dates.
+
+### Return value
+
+A new {{jsxref("Temporal.Duration")}} object representing the duration _since_ `other` to this date. The duration is positive if `other` is before this date, and negative if after.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - `other` has a different calendar than `this`.
+ - Any of the options is invalid.
+
+## Examples
+
+### Using since()
+
+```js
+const date = Temporal.PlainDate.from("2022-12-25");
+const now = Temporal.Now.plainDateISO();
+const duration = now.since(date);
+const formatter = new Intl.DurationFormat("en-US", { style: "long" });
+console.log(`It's been ${formatter.format(duration)} since that Christmas...`);
+// Expected output: "It's been [number] days since that Christmas..."
+
+const duration2 = now.since(date, { smallestUnit: "month" });
+console.log(`It's been ${formatter.format(duration2)} since that Christmas...`);
+// Expected output: "It's been [number] months since that Christmas..."
+
+const duration3 = now.since(date, {
+ largestUnit: "year",
+ smallestUnit: "month",
+});
+console.log(`It's been ${formatter.format(duration3)} since that Christmas...`);
+// Expected output: "It's been [number] years, [number] months since that Christmas..."
+```
+
+### Rounding the result
+
+By default the fractional part of the `smallestUnit` is truncated. You can round it up using the `roundingIncrement` and `roundingMode` options.
+
+```js
+const date1 = Temporal.PlainDate.from("2022-01-01");
+const date2 = Temporal.PlainDate.from("2022-01-28");
+const duration = date2.since(date1, {
+ smallestUnit: "day",
+ roundingIncrement: 5,
+ roundingMode: "ceil",
+});
+console.log(duration.toString()); // "P30D"
+```
+
+### Comparing different calendars
+
+By default, the two dates must have the same calendar. This is to avoid ambiguity in the meaning of months and years. If you want to compare dates from different calendars, you can convert them to the same calendar first.
+
+```js
+const date1 = Temporal.PlainDate.from("2022-01-01");
+const date2 = Temporal.PlainDate.from("2022-01-28[u-ca=chinese]");
+const duration = date2.withCalendar("iso8601").since(date1);
+console.log(duration.toString()); // "P27D"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}
+- {{jsxref("Temporal/PlainDate/subtract", "Temporal.PlainDate.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDate/until", "Temporal.PlainDate.prototype.until()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/subtract/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/subtract/index.md
new file mode 100644
index 000000000000000..2ce7b03151900a0
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/subtract/index.md
@@ -0,0 +1,68 @@
+---
+title: Temporal.PlainDate.prototype.subtract()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/subtract
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDate.subtract
+---
+
+{{JSRef}}
+
+The **`subtract()`** method of {{jsxref("Temporal.PlainDate")}} instances returns a new `Temporal.PlainDate` object representing this date moved backward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}).
+
+If you want to subtract two dates and get a duration, use {{jsxref("Temporal/PlainDate/since", "since()")}} or {{jsxref("Temporal/PlainDate/until", "until()")}} instead.
+
+## Syntax
+
+```js-nolint
+subtract(duration)
+subtract(duration, options)
+```
+
+### Parameters
+
+- `duration`
+ - : A string, an object, or a {{jsxref("Temporal.Duration")}} instance representing a duration to subtract from this date. It is converted to a `Temporal.Duration` object using the same algorithm as {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}.
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `overflow` {{optional_inline}}
+ - : A string specifying the behavior when a date component is out of range. Possible values are:
+ - `"constrain"` (default)
+ - : The date component is [clamped](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#invalid_date_clamping) to the valid range.
+ - `"reject"`
+ - : A {{jsxref("RangeError")}} is thrown if the date component is out of range.
+
+### Return value
+
+A new `Temporal.PlainDate` object representing the date specified by the original `PlainDate`, minus the duration.
+
+## Description
+
+Subtracting a duration is equivalent to [adding](Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/add) its [negation](Web/JavaScript/Reference/Global_Objects/Temporal/Duration/negated), so all the same considerations apply.
+
+## Examples
+
+### Subtracting a duration
+
+```js
+const start = Temporal.PlainDate.from("2022-01-01");
+const end = start.subtract({ years: 1, months: 2, weeks: 3, days: 4 });
+console.log(end.toString()); // 2020-10-07
+```
+
+For more examples, see {{jsxref("Temporal/PlainDate/add", "add()")}}.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}
+- {{jsxref("Temporal/PlainDate/since", "Temporal.PlainDate.prototype.since()")}}
+- {{jsxref("Temporal/PlainDate/until", "Temporal.PlainDate.prototype.until()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/tojson/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/tojson/index.md
new file mode 100644
index 000000000000000..159ace79fc48397
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/tojson/index.md
@@ -0,0 +1,68 @@
+---
+title: Temporal.PlainDate.prototype.toJSON()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/toJSON
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDate.toJSON
+---
+
+{{JSRef}}
+
+The **`toJSON()`** method of {{jsxref("Temporal.PlainDate")}} instances returns a string representing this date in the same [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#rfc_9557_format) as calling {{jsxref("Temporal/PlainDate/toString", "toString()")}}. It is intended to be implicitly called by {{jsxref("JSON.stringify()")}}.
+
+## Syntax
+
+```js-nolint
+toJSON()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A string representing the given date in the [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#rfc_9557_format), with the calendar annotation included if it is not `"iso8601"`.
+
+## Description
+
+The `toJSON()` method is automatically called by {{jsxref("JSON.stringify()")}} when a `Temporal.PlainDate` object is stringified. This method is generally intended to, by default, usefully serialize `Temporal.PlainDate` objects during [JSON](/en-US/docs/Glossary/JSON) serialization, which can then be deserialized using the {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}} function as the reviver of {{jsxref("JSON.parse()")}}.
+
+## Examples
+
+### Using toJSON()
+
+```js
+const date = Temporal.PlainDate.from({ year: 2021, month: 8, day: 1 });
+const dateStr = date.toJSON(); // '2021-08-01'
+const d2 = Temporal.PlainDate.from(dateStr);
+```
+
+### JSON serialization and parsing
+
+This example shows how `Temporal.PlainDate` can be serialized as JSON without extra effort, and how to parse it back.
+
+```js
+const date = Temporal.PlainDate.from({ year: 2021, month: 8, day: 1 });
+const jsonStr = JSON.stringify({ date }); // '{"date":"2021-08-01"}'
+const obj = JSON.parse(jsonStr, (key, value) => {
+ if (key === "date") {
+ return Temporal.PlainDate.from(value);
+ }
+ return value;
+});
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}}
+- {{jsxref("Temporal/PlainDate/toString", "Temporal.PlainDate.prototype.toString()")}}
+- {{jsxref("Temporal/PlainDate/toLocaleString", "Temporal.PlainDate.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/tolocalestring/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/tolocalestring/index.md
new file mode 100644
index 000000000000000..1cd226190aa5c06
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/tolocalestring/index.md
@@ -0,0 +1,104 @@
+---
+title: Temporal.PlainDate.prototype.toLocaleString()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/toLocaleString
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDate.toLocaleString
+---
+
+{{JSRef}}
+
+The **`toLocaleString()`** method of {{jsxref("Temporal.PlainDate")}} instances returns a string with a language-sensitive representation of this date. In implementations with [`Intl.DateTimeFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat) support, this method delegates to `Intl.DateTimeFormat`.
+
+Every time `toLocaleString` is called, it has to perform a search in a big database of localization strings, which is potentially inefficient. When the method is called many times with the same arguments, it is better to create a {{jsxref("Intl.DateTimeFormat")}} object and use its {{jsxref("Intl/DateTimeFormat/format", "format()")}} method, because a `DateTimeFormat` object remembers the arguments passed to it and may decide to cache a slice of the database, so future `format` calls can search for localization strings within a more constrained context.
+
+## Syntax
+
+```js-nolint
+toLocaleString()
+toLocaleString(locales)
+toLocaleString(locales, options)
+```
+
+### Parameters
+
+The `locales` and `options` parameters customize the behavior of the function and let applications specify the language whose formatting conventions should be used.
+
+In implementations that support the [`Intl.DateTimeFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat), these parameters correspond exactly to the [`Intl.DateTimeFormat()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat) constructor's parameters. Implementations without `Intl.DateTimeFormat` support return the exact same string as {{jsxref("Temporal/PlainDate/toString", "toString()")}}, ignoring both parameters.
+
+- `locales` {{optional_inline}}
+ - : A string with a BCP 47 language tag, or an array of such strings. Corresponds to the [`locales`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#locales) parameter of the `Intl.DateTimeFormat()` constructor.
+- `options` {{optional_inline}}
+
+ - : An object adjusting the output format. Corresponds to the [`options`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#options) parameter of the `Intl.DateTimeFormat()` constructor. If this date's calendar is not `"iso8601"`, the `calendar` option must be provided with the same value; otherwise, if this date's calendar is `"iso8601"`, the `calendar` option can be any value. Regarding the [date-time component options](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#date-time_component_options) and the style shortcuts (`dateStyle` and `timeStyle`), the options should follow one of these forms:
+
+ - Provide none of them: `year`, `month`, and `day` will default to `"numeric"`.
+ - Provide `dateStyle` only: it expands to `weekday`, `era`, `year`, `month`, and `day` formats.
+ - Provide some date-time component options, where at least one of them is a date option (`weekday`, `year`, `month`, `day`). Only the specified date components will be included in the output.
+
+See the [`Intl.DateTimeFormat()` constructor](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat) for details on these parameters and how to use them.
+
+### Return value
+
+A string representing the given date according to language-specific conventions.
+
+In implementations with `Intl.DateTimeFormat`, this is equivalent to `new Intl.DateTimeFormat(locales, options).format(date)`, where `options` has been normalized as described above.
+
+> [!NOTE]
+> Most of the time, the formatting returned by `toLocaleString()` is consistent. However, the output may vary between implementations, even within the same locale — output variations are by design and allowed by the specification. It may also not be what you expect. For example, the string may use non-breaking spaces or be surrounded by bidirectional control characters. You should not compare the results of `toLocaleString()` to hardcoded constants.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+- {{jsxref("TypeError")}}
+ - : Thrown if any of the options is not of the expected type.
+
+## Examples
+
+### Using toLocaleString()
+
+Basic use of this method without specifying a `locale` returns a formatted string in the default locale and with default options.
+
+```js
+const date = Temporal.PlainDate.from("2021-08-01");
+
+console.log(date.toLocaleString()); // 8/1/2021 (assuming en-US locale)
+```
+
+If the date's calendar doesn't match the locale's default calendar, and the date's calendar is not `iso8601`, an explicit `calendar` option must be provided with the same value.
+
+```js
+const date = Temporal.PlainDate.from("2021-08-01[u-ca=japanese]");
+// The ja-JP locale uses the Gregorian calendar by default
+date.toLocaleString("ja-JP", { calendar: "japanese" }); // R3/8/1
+```
+
+### Using toLocaleString() with options
+
+You can customize which parts of the date are included in the output by providing the `options` parameter.
+
+```js
+const date = Temporal.PlainDate.from("2021-08-01");
+date.toLocaleString("en-US", { dateStyle: "full" }); // Sunday, August 1, 2021
+date.toLocaleString("en-US", {
+ year: "numeric",
+ month: "long",
+ day: "numeric",
+}); // August 1, 2021
+date.toLocaleString("en-US", { year: "numeric", month: "long" }); // August 2021
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Intl.DateTimeFormat")}}
+- {{jsxref("Temporal/PlainDate/toJSON", "Temporal.PlainDate.prototype.toJSON()")}}
+- {{jsxref("Temporal/PlainDate/toString", "Temporal.PlainDate.prototype.toString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/toplaindatetime/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/toplaindatetime/index.md
new file mode 100644
index 000000000000000..0764e27ae6b9d59
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/toplaindatetime/index.md
@@ -0,0 +1,61 @@
+---
+title: Temporal.PlainDate.prototype.toPlainDateTime()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/toPlainDateTime
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDate.toPlainDateTime
+---
+
+{{JSRef}}
+
+The **`toPlainDateTime()`** method of {{jsxref("Temporal.PlainDate")}} instances returns a new {{jsxref("Temporal.PlainDateTime")}} object representing this date and a supplied time in the same calendar system.
+
+## Syntax
+
+```js-nolint
+toPlainDateTime()
+toPlainDateTime(plainTime)
+```
+
+### Parameters
+
+- `plainTime` {{optional_inline}}
+ - : A string, an object, or a {{jsxref("Temporal.PlainTime")}} instance representing the time component of the resulting `PlainDateTime`. It is converted to a `Temporal.PlainTime` object using the same algorithm as {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}. Defaults to `"00:00:00"`.
+
+### Return value
+
+A new `Temporal.PlainDateTime` object representing the date and time specified by this date and `plainTime`, interpreted in the calendar system of this date.
+
+## Examples
+
+### Using toPlainDateTime()
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+const dateTime = date.toPlainDateTime("12:34:56");
+console.log(dateTime.toString()); // 2021-07-01T12:34:56
+
+const midnight = date.toPlainDateTime();
+console.log(midnight.toString()); // 2021-07-01T00:00:00
+
+const date2 = Temporal.PlainDate.from("2021-07-01[u-ca=chinese]");
+const dateTime2 = date2.toPlainDateTime("12:34:56");
+console.log(dateTime2.toString()); // 2021-07-01T12:34:56[u-ca=chinese]
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal/PlainDate/toPlainMonthDay", "Temporal.PlainDate.prototype.toPlainMonthDay()")}}
+- {{jsxref("Temporal/PlainDate/toPlainYearMonth", "Temporal.PlainDate.prototype.toPlainYearMonth()")}}
+- {{jsxref("Temporal/PlainDate/toZonedDateTime", "Temporal.PlainDate.prototype.toZonedDateTime()")}}
+- {{jsxref("Temporal/PlainDateTime/toPlainDate", "Temporal.PlainDateTime.prototype.toPlainDate()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/toplainmonthday/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/toplainmonthday/index.md
new file mode 100644
index 000000000000000..bec062d14802886
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/toplainmonthday/index.md
@@ -0,0 +1,53 @@
+---
+title: Temporal.PlainDate.prototype.toPlainMonthDay()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/toPlainMonthDay
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDate.toPlainMonthDay
+---
+
+{{JSRef}}
+
+The **`toPlainMonthDay()`** method of {{jsxref("Temporal.PlainDate")}} instances returns a new {{jsxref("Temporal.PlainMonthDay")}} object representing the {{jsxref("Temporal/PlainDate/monthCode", "monthCode")}} and {{jsxref("Temporal/PlainDate/day", "day")}} of this date in the same calendar system.
+
+Note that `PlainMonthDay` objects do not have a `month` component, because months with the same name can have different `month` indexes in different years due to leap months.
+
+## Syntax
+
+```js-nolint
+toPlainMonthDay()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A new `Temporal.PlainMonthDay` object representing the {{jsxref("Temporal/PlainDate/monthCode", "monthCode")}} and {{jsxref("Temporal/PlainDate/day", "day")}} of this date in the same calendar system.
+
+## Examples
+
+### Using toPlainMonthDay()
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+const monthDay = date.toPlainMonthDay();
+console.log(monthDay.toString()); // 07-01
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal.PlainMonthDay")}}
+- {{jsxref("Temporal/PlainDate/toPlainDateTime", "Temporal.PlainDate.prototype.toPlainDateTime()")}}
+- {{jsxref("Temporal/PlainDate/toPlainYearMonth", "Temporal.PlainDate.prototype.toPlainYearMonth()")}}
+- {{jsxref("Temporal/PlainDate/toZonedDateTime", "Temporal.PlainDate.prototype.toZonedDateTime()")}}
+- {{jsxref("Temporal/PlainMonthDay/toPlainDate", "Temporal.PlainMonthDay.prototype.toPlainDate()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/toplainyearmonth/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/toplainyearmonth/index.md
new file mode 100644
index 000000000000000..d4e48aec26dc405
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/toplainyearmonth/index.md
@@ -0,0 +1,51 @@
+---
+title: Temporal.PlainDate.prototype.toPlainYearMonth()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/toPlainYearMonth
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDate.toPlainYearMonth
+---
+
+{{JSRef}}
+
+The **`toPlainYearMonth()`** method of {{jsxref("Temporal.PlainDate")}} instances returns a new {{jsxref("Temporal.PlainYearMonth")}} object representing the {{jsxref("Temporal/PlainDate/year", "year")}} and {{jsxref("Temporal/PlainDate/month", "month")}} of this date in the same calendar system.
+
+## Syntax
+
+```js-nolint
+toPlainYearMonth()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A new `Temporal.PlainYearMonth` object representing the {{jsxref("Temporal/PlainDate/year", "year")}} and {{jsxref("Temporal/PlainDate/month", "month")}} of this date in the same calendar system.
+
+## Examples
+
+### Using toPlainYearMonth()
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+const yearMonth = date.toPlainYearMonth();
+console.log(yearMonth.toString()); // 2021-07
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal/PlainDate/toPlainDateTime", "Temporal.PlainDate.prototype.toPlainDateTime()")}}
+- {{jsxref("Temporal/PlainDate/toPlainMonthDay", "Temporal.PlainDate.prototype.toPlainMonthDay()")}}
+- {{jsxref("Temporal/PlainDate/toZonedDateTime", "Temporal.PlainDate.prototype.toZonedDateTime()")}}
+- {{jsxref("Temporal/PlainYearMonth/toPlainDate", "Temporal.PlainYearMonth.prototype.toPlainDate()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/tostring/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/tostring/index.md
new file mode 100644
index 000000000000000..794e617cc6493b1
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/tostring/index.md
@@ -0,0 +1,86 @@
+---
+title: Temporal.PlainDate.prototype.toString()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/toString
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDate.toString
+---
+
+{{JSRef}}
+
+The **`toString()`** method of {{jsxref("Temporal.PlainDate")}} instances returns a string representing this date in the [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#rfc_9557_format).
+
+## Syntax
+
+```js-nolint
+toString()
+toString(options)
+```
+
+### Parameters
+
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `calendarName` {{optional_inline}}
+ - : Whether to show the calendar annotation (`[u-ca=calendar_id]`) in the return value. Possible values are:
+ - `"auto"` (default)
+ - : Include the calendar annotation if the calendar is not `"iso8601"`.
+ - `"always"`
+ - : Always include the calendar annotation.
+ - `"never"`
+ - : Never include the calendar annotation. This makes the returned string not recoverable to the same {{jsxref("Temporal.PlainDate")}} instance, although the date value still remains the same.
+ - `"critical"`
+ - : Always include the calendar annotation, and add a critical flag: `[!u-ca=calendar_id]`. Useful when sending the string to certain systems, but not useful for Temporal itself.
+
+### Return value
+
+A string in the [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#rfc_9557_format) representing this date. The calendar annotation is included as specified.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+- {{jsxref("TypeError")}}
+ - : Thrown if `options` is not an object or `undefined`.
+
+## Examples
+
+### Using toString()
+
+```js
+const date = Temporal.PlainDate.from("2021-08-01");
+console.log(date.toString()); // '2021-08-01'
+```
+
+### Using options
+
+```js
+const isoDate = Temporal.PlainDate.from({ year: 2021, month: 8, day: 1 });
+const date = Temporal.PlainDate.from({
+ year: 2021,
+ month: 8,
+ day: 1,
+ calendar: "islamic",
+});
+console.log(isoDate.toString({ calendarName: "auto" })); // '2021-08-01'
+console.log(date.toString({ calendarName: "auto" })); // '2582-12-18[u-ca=islamic]'
+console.log(isoDate.toString({ calendarName: "always" })); // '2021-08-01[u-ca=iso8601]'
+console.log(date.toString({ calendarName: "always" })); // '2582-12-18[u-ca=islamic]'
+console.log(date.toString({ calendarName: "never" })); // '2582-12-18'
+console.log(isoDate.toString({ calendarName: "critical" })); // '2021-08-01[!u-ca=iso8601]'
+console.log(date.toString({ calendarName: "critical" })); // '2582-12-18[!u-ca=islamic]'
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}}
+- {{jsxref("Temporal/PlainDate/toJSON", "Temporal.PlainDate.prototype.toJSON()")}}
+- {{jsxref("Temporal/PlainDate/toLocaleString", "Temporal.PlainDate.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/tozoneddatetime/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/tozoneddatetime/index.md
new file mode 100644
index 000000000000000..3ba2ba42bc0a673
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/tozoneddatetime/index.md
@@ -0,0 +1,86 @@
+---
+title: Temporal.PlainDate.prototype.toZonedDateTime()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/toZonedDateTime
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDate.toZonedDateTime
+---
+
+{{JSRef}}
+
+The **`toZonedDateTime()`** method of {{jsxref("Temporal.PlainDate")}} instances returns a new {{jsxref("Temporal.ZonedDateTime")}} object representing this date, a supplied time, and a supplied time zone, in the same calendar system.
+
+## Syntax
+
+```js-nolint
+toZonedDateTime(timeZone)
+toZonedDateTime(info)
+```
+
+### Parameters
+
+- `timeZone`
+ - : Either a string or a {{jsxref("Temporal.ZonedDateTime")}} instance representing the [`timeZone`](#timezone_2) option. This is a convenience overload, so `toZonedDateTime(timeZone)` is equivalent to `toZonedDateTime({ timeZone })`, where `timeZone` is a string or {{jsxref("Temporal.ZonedDateTime")}}. This overload is chosen when the first argument is not an object, or the object's `timeZone` property is `undefined` (because `ZonedDateTime` instances have a {{jsxref("Temporal/ZonedDateTime/timeZoneId", "timeZoneId")}} property instead).
+- `info`
+ - : An object containing some or all of the following properties (in the order they are retrieved and validated):
+ - `plainTime` {{optional_inline}}
+ - : A string, an object, or a {{jsxref("Temporal.PlainTime")}} instance representing the time component of the resulting `ZonedDateTime`. It is converted to a `Temporal.PlainTime` object using the same algorithm as {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}. Defaults to the first valid time in this time zone on this calendar date, which is usually `"00:00:00"`, but may be different if, for example, daylight saving time skips midnight.
+ - `timeZone`
+ - : Either a string or a {{jsxref("Temporal.ZonedDateTime")}} instance representing the time zone to use. If a `Temporal.ZonedDateTime` instance, its time zone is used. If a string, it can be a named time zone identifier, an offset time zone identifier, or a date-time string containing a time zone identifier or an offset (see [time zones and offsets](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets) for more information).
+
+### Return value
+
+A new `Temporal.ZonedDateTime` object representing the date and time specified by this date, `plainTime`, and `timeZone`, interpreted in the calendar system of this date.
+
+In the case of [ambiguities](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#ambiguity_and_gaps_from_local_time_to_utc_time), the `compatible` behavior is always used: if the time falls into a gap, we move forward by the gap length; if the time falls into an ambiguity, we choose the earlier of the two possibilities. This means the resulting `ZonedDateTime` may have a potentially different date or time than the input.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Thrown if `timeZone` is not a string or a `Temporal.ZonedDateTime` instance.
+- {{jsxref("RangeError")}}
+ - : Thrown if `timeZone` is a string that is not a valid time zone identifier.
+
+## Examples
+
+### Using toZonedDateTime()
+
+```js
+const summer = Temporal.PlainDate.from("2021-07-01");
+// Just time zone
+const summerTime = summer.toZonedDateTime("America/New_York");
+console.log(summerTime.toString()); // 2021-07-01T00:00:00-04:00[America/New_York]
+
+const winter = Temporal.PlainDate.from("2021-01-01");
+// Time zone and time
+const winterTime = winter.toZonedDateTime({
+ plainTime: "12:34:56",
+ timeZone: "America/New_York",
+});
+console.log(winterTime.toString()); // 2021-01-01T12:34:56-05:00[America/New_York]
+
+const spring = Temporal.PlainDate.from("2021-03-01");
+// Time zone as object and time as object
+const springTime = spring.toZonedDateTime({
+ plainTime: summerTime.toPlainTime(),
+ timeZone: winterTime,
+});
+console.log(springTime.toString()); // 2021-03-01T00:00:00-05:00[America/New_York]
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal/PlainDate/toPlainDateTime", "Temporal.PlainDate.prototype.toPlainDateTime()")}}
+- {{jsxref("Temporal/PlainDate/toPlainMonthDay", "Temporal.PlainDate.prototype.toPlainMonthDay()")}}
+- {{jsxref("Temporal/PlainDate/toPlainYearMonth", "Temporal.PlainDate.prototype.toPlainYearMonth()")}}
+- {{jsxref("Temporal/ZonedDateTime/toPlainDate", "Temporal.ZonedDateTime.prototype.toPlainDate()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/until/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/until/index.md
new file mode 100644
index 000000000000000..8b113468dd30406
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/until/index.md
@@ -0,0 +1,66 @@
+---
+title: Temporal.PlainDate.prototype.until()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/until
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDate.until
+---
+
+{{JSRef}}
+
+The **`until()`** method of {{jsxref("Temporal.PlainDate")}} instances returns a new {{jsxref("Temporal.Duration")}} object representing the duration from this date to another date (in a form convertible by {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}}). The duration is positive if the other date is after this date, and negative if before.
+
+This method does `other - this`. To do `this - other`, use the {{jsxref("Temporal/PlainDate/since", "since()")}} method.
+
+## Syntax
+
+```js-nolint
+until(other)
+until(other, options)
+```
+
+### Parameters
+
+- `other`
+ - : A string, an object, or a {{jsxref("Temporal.PlainDate")}} instance representing a date to subtract this date from. It is converted to a `Temporal.PlainDate` object using the same algorithm as {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}}. It must have the same calendar as `this`.
+- `options` {{optional_inline}}
+ - : The same options as [`since()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/since#options).
+
+### Return value
+
+A new {{jsxref("Temporal.Duration")}} object representing the duration from this date _until_ `other`. The duration is positive if `other` is after this date, and negative if before.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - `other` has a different calendar than `this`.
+ - Any of the options is invalid.
+
+## Examples
+
+### Using until()
+
+```js
+const launch = Temporal.PlainDate.from("2035-01-01");
+const now = Temporal.Now.plainDateISO();
+const duration = now.until(launch);
+console.log(`It will be ${duration.toLocaleString("en-US")} until the launch`);
+```
+
+For more examples, see [`since()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/since).
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}
+- {{jsxref("Temporal/PlainDate/subtract", "Temporal.PlainDate.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDate/since", "Temporal.PlainDate.prototype.since()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/valueof/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/valueof/index.md
new file mode 100644
index 000000000000000..245b6d6b94c8169
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/valueof/index.md
@@ -0,0 +1,64 @@
+---
+title: Temporal.PlainDate.prototype.valueOf()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/valueOf
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDate.valueOf
+---
+
+{{JSRef}}
+
+The **`valueOf()`** method of {{jsxref("Temporal.PlainDate")}} instances throws a {{jsxref("TypeError")}}, which prevents `Temporal.PlainDate` instances from being [implicitly converted to primitives](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) when used in arithmetic or comparison operations.
+
+## Syntax
+
+```js-nolint
+valueOf()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+None.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Always thrown.
+
+## Description
+
+Because both [primitive conversion](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) and [number conversion](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number#number_coercion) call `valueOf()` before `toString()`, if `valueOf()` is absent, then an expression like `date1 > date2` would implicitly compare them as strings, which may have unexpected results. By throwing a `TypeError`, `Temporal.PlainDate` instances prevent such implicit conversions. You need to explicitly convert them to strings using {{jsxref("Temporal/PlainDate/toString", "Temporal.PlainDate.prototype.toString()")}}, or use the {{jsxref("Temporal/PlainDate/compare", "Temporal.PlainDate.compare()")}} static method to compare them.
+
+## Examples
+
+### Arithmetic and comparison operations on Temporal.PlainDate
+
+All arithmetic and comparison operations on `Temporal.PlainDate` instances should use the dedicated methods or convert them to primitives explicitly.
+
+```js
+const date1 = Temporal.PlainDate.from("2022-01-01");
+const date2 = Temporal.PlainDate.from("2022-07-01");
+date1 > date2; // TypeError: can't convert PlainDate to primitive type
+Temporal.PlainDate.compare(date1, date2); // -1
+
+date2 - date1; // TypeError: can't convert PlainDate to primitive type
+date2.since(date1).toString(); // "P181D"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/toString", "Temporal.PlainDate.prototype.toString()")}}
+- {{jsxref("Temporal/PlainDate/toJSON", "Temporal.PlainDate.prototype.toJSON()")}}
+- {{jsxref("Temporal/PlainDate/toLocaleString", "Temporal.PlainDate.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/weekofyear/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/weekofyear/index.md
new file mode 100644
index 000000000000000..0feb1c764efa8f0
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/weekofyear/index.md
@@ -0,0 +1,70 @@
+---
+title: Temporal.PlainDate.prototype.weekOfYear
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/weekOfYear
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDate.weekOfYear
+---
+
+{{JSRef}}
+
+The **`weekOfYear`** accessor property of {{jsxref("Temporal.PlainDate")}} instances returns a positive integer representing the 1-based week index in the {{jsxref("Temporal/PlainDate/yearOfWeek", "yearOfWeek")}} of this date, or `undefined` if the calendar does not have a well-defined week system. The first week of the year is `1`. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+Note that for ISO 8601, the first and last few days of the year may be attributed to the last week of the previous year or the first week of the next year. Namely, if a week crosses two years, then it belongs to the year that has the majority of its days. To get the year that the `weekOfYear` belongs to, use the {{jsxref("Temporal/PlainDate/yearOfWeek", "yearOfWeek")}} property, not the {{jsxref("Temporal/PlainDate/year", "year")}} property.
+
+The set accessor of `weekOfYear` is `undefined`. You cannot change this property directly. To create a new `Temporal.PlainDate` object with the desired new `weekOfYear` value, use the {{jsxref("Temporal/PlainDate/add", "add()")}} or {{jsxref("Temporal/PlainDate/subtract", "subtract()")}} method with the appropriate number of `weeks`.
+
+## Examples
+
+### Using weekOfYear
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+console.log(date.weekOfYear); // 26
+
+// If 01-01 is a Friday/Saturday/Sunday, it belongs to the last week of the previous year
+const date2 = Temporal.PlainDate.from("2021-01-01");
+console.log(date2.dayOfWeek); // 5
+console.log(date2.weekOfYear); // 53; 2020 has 53 weeks
+console.log(date2.yearOfWeek); // 2020
+
+// Otherwise, it belongs to the first week of the year
+const date3 = Temporal.PlainDate.from("2020-01-01");
+console.log(date3.dayOfWeek); // 3
+console.log(date3.weekOfYear); // 1
+console.log(date3.yearOfWeek); // 2020
+
+// Similarly, if 12-31 is a Monday/Tuesday/Wednesday, it belongs to the first week of the next year
+const date4 = Temporal.PlainDate.from("2019-12-31");
+console.log(date4.dayOfWeek); // 2
+console.log(date4.weekOfYear); // 1
+console.log(date4.yearOfWeek); // 2020
+```
+
+### Changing weekOfYear
+
+`PlainDate` does not support changing `weekOfYear` directly. To change the week, you need to first figure out the difference in weeks to your desired week, then use `add` or `subtract` to adjust the date accordingly. For example, to change to the previous week:
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+const previousWeek = date.subtract({ weeks: 1 });
+console.log(previousWeek.toString()); // 2021-06-24
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/with", "Temporal.PlainDate.prototype.with()")}}
+- {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}
+- {{jsxref("Temporal/PlainDate/subtract", "Temporal.PlainDate.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDate/yearOfWeek", "Temporal.PlainDate.prototype.yearOfWeek")}}
+- {{jsxref("Temporal/PlainDate/dayOfWeek", "Temporal.PlainDate.prototype.dayOfWeek")}}
+- {{jsxref("Temporal/PlainDate/daysInWeek", "Temporal.PlainDate.prototype.daysInWeek")}}
+- {{jsxref("Temporal/PlainDate/daysInYear", "Temporal.PlainDate.prototype.daysInYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/with/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/with/index.md
new file mode 100644
index 000000000000000..cdafbdcdf97ea5d
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/with/index.md
@@ -0,0 +1,78 @@
+---
+title: Temporal.PlainDate.prototype.with()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/with
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDate.with
+---
+
+{{JSRef}}
+
+The **`with()`** method of {{jsxref("Temporal.PlainDate")}} instances returns a new `Temporal.PlainDate` object representing this date with some fields replaced by new values. Because all `Temporal` objects are designed to be immutable, this method essentially functions as the setter for the date's fields.
+
+To replace the {{jsxref("Temporal/PlainDate/calendarId", "calendarId")}} property, use the {{jsxref("Temporal/PlainDate/withCalendar", "withCalendar()")}} method instead.
+
+## Syntax
+
+```js-nolint
+with(info)
+with(info, options)
+```
+
+### Parameters
+
+- `info`
+ - : An object containing at least one of the properties recognized by {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}} (except `calendar`): `day`, `era` and `eraYear`, `month`, `monthCode`, `year`. Unspecified properties use the values from the original date. You only need to provide one of `month` or `monthCode`, and one of `era` and `eraYear` or `year`, and the other will be updated accordingly.
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `overflow` {{optional_inline}}
+ - : A string specifying the behavior when a date component is out of range. Possible values are:
+ - `"constrain"` (default)
+ - : The date component is [clamped](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#invalid_date_clamping) to the valid range.
+ - `"reject"`
+ - : A {{jsxref("RangeError")}} is thrown if the date component is out of range.
+
+### Return value
+
+A new `Temporal.PlainDate` object, where the fields specified in `info` that are not `undefined` are replaced by the corresponding values, and the rest of the fields are copied from the original date.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Thrown in one of the following cases:
+ - `info` is not an object.
+ - `options` is not an object or `undefined`.
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - The provided properties that specify the same component are inconsistent.
+ - The provided non-numerical properties are not valid; for example, if `monthCode` is never a valid month code in this calendar.
+ - The provided numerical properties are out of range, and `options.overflow` is set to `"reject"`.
+
+## Examples
+
+### Using with()
+
+```js
+const date = Temporal.PlainDate.from("2021-07-06");
+const newDate = date.with({ day: date.daysInMonth });
+console.log(newDate.toString()); // 2021-07-31
+const nextDecade = date.with({ year: date.year + 10 });
+console.log(nextDecade.toString()); // 2031-07-06
+```
+
+For more examples, see the documentation for the individual properties that can be set using `with()`.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/withCalendar", "Temporal.PlainDate.prototype.withCalendar()")}}
+- {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}}
+- {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}
+- {{jsxref("Temporal/PlainDate/subtract", "Temporal.PlainDate.prototype.subtract()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/withcalendar/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/withcalendar/index.md
new file mode 100644
index 000000000000000..6ea818fdb1e3d53
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/withcalendar/index.md
@@ -0,0 +1,60 @@
+---
+title: Temporal.PlainDate.prototype.withCalendar()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/withCalendar
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDate.withCalendar
+---
+
+{{JSRef}}
+
+The **`withCalendar()`** method of {{jsxref("Temporal.PlainDate")}} instances returns a new `Temporal.PlainDate` object representing this date interpreted in the new calendar system. Because all `Temporal` objects are designed to be immutable, this method essentially functions as the setter for the date's {{jsxref("Temporal/PlainDate/calendarId", "calendarId")}} property.
+
+To replace the date component properties, use the {{jsxref("Temporal/PlainDate/with", "with()")}} method instead.
+
+## Syntax
+
+```js-nolint
+withCalendar(calendar)
+```
+
+### Parameters
+
+- `calendar`
+ - : A string that corresponds to the {{jsxref("Temporal/PlainDate/calendarId", "calendarId")}} property.
+
+### Return value
+
+A new `Temporal.PlainDate` object, representing the date specified by the original `PlainDate`, interpreted in the new calendar system.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Thrown if `calendar` is not a string.
+- {{jsxref("RangeError")}}
+ - : Thrown if `calendar` is not a valid calendar identifier.
+
+## Examples
+
+### Using withCalendar()
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01");
+const newDate = date.withCalendar("islamic");
+console.log(newDate.toLocaleString("en-US", { calendar: "islamic" }));
+// 11/21/1442 AH
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/with", "Temporal.PlainDate.prototype.with()")}}
+- {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}}
+- {{jsxref("Temporal/PlainDate/calendarId", "Temporal.PlainDate.prototype.calendarId")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/year/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/year/index.md
new file mode 100644
index 000000000000000..e90a1aa356af714
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/year/index.md
@@ -0,0 +1,53 @@
+---
+title: Temporal.PlainDate.prototype.year
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/year
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDate.year
+---
+
+{{JSRef}}
+
+The **`year`** accessor property of {{jsxref("Temporal.PlainDate")}} instances returns an integer representing the number of years of this date relative to the start of a calendar-specific epoch year. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+This property has the same function as the {{jsxref("Temporal/PlainDate/era", "era")}}/{{jsxref("Temporal/PlainDate/eraYear", "eraYear")}} pair as a unique identifier of a year in a calendar. Usually year 1 is either the first year of the latest era or the ISO 8601 year `0001`. Because `year` is relative to the start of the epoch year, not the epoch date, if the epoch is in the middle of the year, that year will have the same value before and after the start date of the era.
+
+The set accessor of `year` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainDate/with", "with()")}} method to create a new `Temporal.PlainDate` object with the desired new value.
+
+## Examples
+
+### Using year
+
+```js
+const date = Temporal.PlainDate.from("2021-07-01"); // ISO 8601 calendar
+console.log(date.year); // 2021
+
+const date2 = Temporal.PlainDate.from("-002021-07-01");
+console.log(date2.year); // -2021
+
+const date3 = Temporal.PlainDate.from("2021-07-01[u-ca=japanese]");
+console.log(date3.year); // 2021; although the Japanese calendar uses eras,
+// there's no obvious "default era", so the year is the same as the ISO year
+
+const date4 = Temporal.PlainDate.from("2021-07-01[u-ca=hebrew]");
+console.log(date4.year); // 5781; the Hebrew calendar uses the Anno Mundi epoch, which starts in 3761 BC
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/with", "Temporal.PlainDate.prototype.with()")}}
+- {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}
+- {{jsxref("Temporal/PlainDate/subtract", "Temporal.PlainDate.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDate/era", "Temporal.PlainDate.prototype.era")}}
+- {{jsxref("Temporal/PlainDate/eraYear", "Temporal.PlainDate.prototype.eraYear")}}
+- {{jsxref("Temporal/PlainDate/yearOfWeek", "Temporal.PlainDate.prototype.yearOfWeek")}}
+- {{jsxref("Temporal/PlainDate/month", "Temporal.PlainDate.prototype.month")}}
+- {{jsxref("Temporal/PlainDate/day", "Temporal.PlainDate.prototype.day")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/yearofweek/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/yearofweek/index.md
new file mode 100644
index 000000000000000..373dd37b05d8103
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindate/yearofweek/index.md
@@ -0,0 +1,38 @@
+---
+title: Temporal.PlainDate.prototype.yearOfWeek
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate/yearOfWeek
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDate.yearOfWeek
+---
+
+{{JSRef}}
+
+The **`yearOfWeek`** accessor property of {{jsxref("Temporal.PlainDate")}} instances returns an integer representing the year to be paired with the {{jsxref("Temporal/PlainDate/weekOfYear", "weekOfYear")}} of this date, or `undefined` if the calendar does not have a well-defined week system. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+Usually this is the year of the date, but for ISO 8601, the first and last few days of the year may be attributed to the last week of the previous year or the first week of the next year, causing the `yearOfWeek` to differ by 1. See {{jsxref("Temporal/PlainDate/weekOfYear", "weekOfYear")}} for more details.
+
+The set accessor of `yearOfWeek` is `undefined`. You cannot change this property directly.
+
+## Examples
+
+See the examples in the {{jsxref("Temporal/PlainDate/weekOfYear", "weekOfYear")}} page.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/with", "Temporal.PlainDate.prototype.with()")}}
+- {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}
+- {{jsxref("Temporal/PlainDate/subtract", "Temporal.PlainDate.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDate/year", "Temporal.PlainDate.prototype.year")}}
+- {{jsxref("Temporal/PlainDate/weekOfYear", "Temporal.PlainDate.prototype.weekOfYear")}}
+- {{jsxref("Temporal/PlainDate/dayOfWeek", "Temporal.PlainDate.prototype.dayOfWeek")}}
+- {{jsxref("Temporal/PlainDate/daysInWeek", "Temporal.PlainDate.prototype.daysInWeek")}}
+- {{jsxref("Temporal/PlainDate/daysInYear", "Temporal.PlainDate.prototype.daysInYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/add/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/add/index.md
new file mode 100644
index 000000000000000..982a03b3433e762
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/add/index.md
@@ -0,0 +1,75 @@
+---
+title: Temporal.PlainDateTime.prototype.add()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/add
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDateTime.add
+---
+
+{{JSRef}}
+
+The **`add()`** method of {{jsxref("Temporal.PlainDateTime")}} instances returns a new `Temporal.PlainDateTime` object representing this date-time moved forward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}).
+
+## Syntax
+
+```js-nolint
+add(duration)
+add(duration, options)
+```
+
+### Parameters
+
+- `duration`
+ - : A string, an object, or a {{jsxref("Temporal.Duration")}} instance representing a duration to add to this date-time. It is converted to a `Temporal.Duration` object using the same algorithm as {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}.
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `overflow` {{optional_inline}}
+ - : A string specifying the behavior when a date component is out of range. Possible values are:
+ - `"constrain"` (default)
+ - : The date component is [clamped](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#invalid_date_clamping) to the valid range.
+ - `"reject"`
+ - : A {{jsxref("RangeError")}} is thrown if the date component is out of range.
+
+### Return value
+
+A new `Temporal.PlainDateTime` object representing the date-time specified by the original `PlainDateTime`, plus the duration.
+
+## Description
+
+For how [calendar durations](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#calendar_durations) are added, see {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}.
+
+Adding a duration is equivalent to [subtracting](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/subtract) its [negation](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/negated).
+
+## Examples
+
+### Adding a duration
+
+```js
+const start = Temporal.PlainDateTime.from("2021-01-01T12:34:56");
+const end = start.add({
+ years: 1,
+ months: 2,
+ weeks: 3,
+ days: 4,
+ hours: 5,
+ minutes: 6,
+ seconds: 7,
+ milliseconds: 8,
+});
+console.log(end.toString()); // 2022-03-26T17:41:03.008
+```
+
+For more examples, especially with how different calendars and the `overflow` option interact with calendar durations, see {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/calendarid/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/calendarid/index.md
new file mode 100644
index 000000000000000..18413f1783c5bb9
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/calendarid/index.md
@@ -0,0 +1,41 @@
+---
+title: Temporal.PlainDateTime.prototype.calendarId
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/calendarId
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDateTime.calendarId
+---
+
+{{JSRef}}
+
+The **`calendarId`** accessor property of {{jsxref("Temporal.PlainDateTime")}} instances returns a string representing the [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars) used to interpret the internal ISO 8601 date.
+
+For a list of commonly supported values, see {{jsxref("Intl/Locale/getCalendars", "Intl.Locale.prototype.getCalendars()")}}.
+
+The set accessor of `calendarId` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainDateTime/withCalendar", "withCalendar()")}} method to create a new `Temporal.PlainDateTime` object with the desired new value.
+
+## Examples
+
+### Using calendarId
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01T08:00:00");
+console.log(dt.calendarId); // "iso8601"; default
+
+const dt2 = Temporal.PlainDateTime.from("2021-07-01T08:00:00[u-ca=chinese]");
+console.log(dt2.calendarId); // "chinese"
+
+const dt3 = dt2.withCalendar("hebrew");
+console.log(dt3.calendarId); // "hebrew"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/compare/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/compare/index.md
new file mode 100644
index 000000000000000..0f67685e254ad00
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/compare/index.md
@@ -0,0 +1,92 @@
+---
+title: Temporal.PlainDateTime.compare()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/compare
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.PlainDateTime.compare
+---
+
+{{JSRef}}
+
+The **`Temporal.PlainDateTime.compare()`** static method returns a number (-1, 0, or 1) indicating whether the first date-time comes before, is the same as, or comes after the second date-time. Equivalent to first comparing their dates, then comparing their times if the dates are the same.
+
+## Syntax
+
+```js-nolint
+Temporal.PlainDateTime.compare(dateTime1, dateTime2)
+```
+
+### Parameters
+
+- `dateTime1`
+ - : A string, an object, or a {{jsxref("Temporal.PlainDateTime")}} instance representing the first date-time to compare. It is converted to a `Temporal.PlainDateTime` object using the same algorithm as {{jsxref("Temporal/PlainDateTime/from", "Temporal.PlainDateTime.from()")}}.
+- `dateTime2`
+ - : The second date-time to compare, converted to a `Temporal.PlainDateTime` object using the same algorithm as `dateTime1`.
+
+### Return value
+
+Returns `-1` if `dateTime1` comes before `dateTime2`, `0` if they are the same, and `1` if `dateTime2` comes after. They are compared by their underlying date and time values, ignoring their calendars.
+
+## Examples
+
+### Using Temporal.PlainDateTime.compare()
+
+```js
+const dt1 = Temporal.PlainDateTime.from("2021-08-01T01:00:00");
+const dt2 = Temporal.PlainDateTime.from("2021-08-02T00:00:00");
+console.log(Temporal.PlainDateTime.compare(dt1, dt2)); // -1
+
+const dt3 = Temporal.PlainDateTime.from("2021-08-01T00:00:00");
+console.log(Temporal.PlainDateTime.compare(dt1, dt3)); // 1
+```
+
+### Comparing dates in different calendars
+
+```js
+const dt1 = Temporal.PlainDateTime.from({ year: 2021, month: 8, day: 1 });
+const dt2 = Temporal.PlainDateTime.from({
+ year: 2021,
+ month: 8,
+ day: 1,
+ calendar: "islamic",
+});
+const dt3 = Temporal.PlainDateTime.from({
+ year: 2021,
+ month: 8,
+ day: 1,
+ calendar: "hebrew",
+});
+console.log(dt1.toString()); // "2021-08-01T00:00:00"
+console.log(dt2.toString()); // "2582-12-17T00:00:00[u-ca=islamic]"
+console.log(dt3.toString()); // "-001739-04-06T00:00:00[u-ca=hebrew]"
+console.log(Temporal.PlainDateTime.compare(dt1, dt2)); // -1
+console.log(Temporal.PlainDateTime.compare(dt1, dt3)); // 1
+```
+
+### Sorting an array of date-times
+
+The purpose of this `compare()` function is to act as a comparator to be passed to {{jsxref("Array.prototype.sort()")}} and related functions.
+
+```js
+const dateTimes = [
+ Temporal.PlainDateTime.from("2021-08-01"),
+ Temporal.PlainDateTime.from("2021-08-02"),
+ Temporal.PlainDateTime.from("2021-08-01T01:00:00"),
+];
+
+dateTimes.sort(Temporal.PlainDateTime.compare);
+console.log(dateTimes.map((d) => d.toString()));
+// [ "2021-08-01T00:00:00", "2021-08-01T01:00:00", "2021-08-02T00:00:00" ]
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/equals", "Temporal.PlainDateTime.prototype.equals()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/day/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/day/index.md
new file mode 100644
index 000000000000000..b391d071f6effd4
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/day/index.md
@@ -0,0 +1,44 @@
+---
+title: Temporal.PlainDateTime.prototype.day
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/day
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDateTime.day
+---
+
+{{JSRef}}
+
+The **`day`** accessor property of {{jsxref("Temporal.PlainDateTime")}} instances returns a positive integer representing the 1-based day index in the month of this date, which is the same day number you would see on a calendar. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `day` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainDateTime/with", "with()")}} method to create a new `Temporal.PlainDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/day", "Temporal.PlainDate.prototype.day")}}.
+
+## Examples
+
+### Using day
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01"); // ISO 8601 calendar
+console.log(dt.day); // 1
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDateTime/year", "Temporal.PlainDateTime.prototype.year")}}
+- {{jsxref("Temporal/PlainDateTime/month", "Temporal.PlainDateTime.prototype.month")}}
+- {{jsxref("Temporal/PlainDateTime/daysInMonth", "Temporal.PlainDateTime.prototype.daysInMonth")}}
+- {{jsxref("Temporal/PlainDateTime/dayOfWeek", "Temporal.PlainDateTime.prototype.dayOfWeek")}}
+- {{jsxref("Temporal/PlainDateTime/dayOfYear", "Temporal.PlainDateTime.prototype.dayOfYear")}}
+- {{jsxref("Temporal/PlainDate/day", "Temporal.PlainDate.prototype.day")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/dayofweek/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/dayofweek/index.md
new file mode 100644
index 000000000000000..c121b1709998e01
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/dayofweek/index.md
@@ -0,0 +1,44 @@
+---
+title: Temporal.PlainDateTime.prototype.dayOfWeek
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/dayOfWeek
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDateTime.dayOfWeek
+---
+
+{{JSRef}}
+
+The **`dayOfWeek`** accessor property of {{jsxref("Temporal.PlainDateTime")}} instances returns a positive integer representing the 1-based day index in the week of this date. Days in a week are numbered sequentially from `1` to {{jsxref("Temporal/PlainDateTime/daysInWeek", "daysInWeek")}}, with each number mapping to its name. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `dayOfWeek` is `undefined`. You cannot change this property directly. To create a new `Temporal.PlainDateTime` object with the desired new `dayOfWeek` value, use the {{jsxref("Temporal/PlainDateTime/add", "add()")}} or {{jsxref("Temporal/PlainDateTime/subtract", "subtract()")}} method with the appropriate number of `days`.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/dayOfWeek", "Temporal.PlainDate.prototype.dayOfWeek")}}.
+
+## Examples
+
+### Using dayOfWeek
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01");
+console.log(dt.dayOfWeek); // 4; Thursday
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDateTime/day", "Temporal.PlainDateTime.prototype.day")}}
+- {{jsxref("Temporal/PlainDateTime/dayOfYear", "Temporal.PlainDateTime.prototype.dayOfYear")}}
+- {{jsxref("Temporal/PlainDateTime/daysInWeek", "Temporal.PlainDateTime.prototype.daysInWeek")}}
+- {{jsxref("Temporal/PlainDateTime/weekOfYear", "Temporal.PlainDateTime.prototype.weekOfYear")}}
+- {{jsxref("Temporal/PlainDateTime/yearOfWeek", "Temporal.PlainDateTime.prototype.yearOfWeek")}}
+- {{jsxref("Temporal/PlainDate/dayOfWeek", "Temporal.PlainDate.prototype.dayOfWeek")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/dayofyear/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/dayofyear/index.md
new file mode 100644
index 000000000000000..4ae32ce4db39912
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/dayofyear/index.md
@@ -0,0 +1,43 @@
+---
+title: Temporal.PlainDateTime.prototype.dayOfYear
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/dayOfYear
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDateTime.dayOfYear
+---
+
+{{JSRef}}
+
+The **`dayOfYear`** accessor property of {{jsxref("Temporal.PlainDateTime")}} instances returns a positive integer representing the 1-based day index in the year of this date. The first day of this year is `1`, and the last day is the {{jsxref("Temporal/PlainDateTime/daysInYear", "daysInYear")}}. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `dayOfYear` is `undefined`. You cannot change this property directly. To create a new `Temporal.PlainDateTime` object with the desired new `dayOfYear` value, use the {{jsxref("Temporal/PlainDateTime/add", "add()")}} or {{jsxref("Temporal/PlainDateTime/subtract", "subtract()")}} method with the appropriate number of `days`.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/dayOfYear", "Temporal.PlainDate.prototype.dayOfYear")}}.
+
+## Examples
+
+### Using dayOfYear
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01");
+console.log(dt.dayOfYear); // 182
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDateTime/year", "Temporal.PlainDateTime.prototype.year")}}
+- {{jsxref("Temporal/PlainDateTime/day", "Temporal.PlainDateTime.prototype.day")}}
+- {{jsxref("Temporal/PlainDateTime/dayOfWeek", "Temporal.PlainDateTime.prototype.dayOfWeek")}}
+- {{jsxref("Temporal/PlainDateTime/daysInYear", "Temporal.PlainDateTime.prototype.daysInYear")}}
+- {{jsxref("Temporal/PlainDate/dayOfYear", "Temporal.PlainDate.prototype.dayOfYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/daysinmonth/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/daysinmonth/index.md
new file mode 100644
index 000000000000000..8014207b9300141
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/daysinmonth/index.md
@@ -0,0 +1,44 @@
+---
+title: Temporal.PlainDateTime.prototype.daysInMonth
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/daysInMonth
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDateTime.daysInMonth
+---
+
+{{JSRef}}
+
+The **`daysInMonth`** accessor property of {{jsxref("Temporal.PlainDateTime")}} instances returns a positive integer representing the number of days in the month of this date. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `daysInMonth` is `undefined`. You cannot change this property directly.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/daysInMonth", "Temporal.PlainDate.prototype.daysInMonth")}}.
+
+## Examples
+
+### Using daysInMonth
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01");
+console.log(dt.daysInMonth); // 31
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDateTime/year", "Temporal.PlainDateTime.prototype.year")}}
+- {{jsxref("Temporal/PlainDateTime/month", "Temporal.PlainDateTime.prototype.month")}}
+- {{jsxref("Temporal/PlainDateTime/day", "Temporal.PlainDateTime.prototype.day")}}
+- {{jsxref("Temporal/PlainDateTime/daysInWeek", "Temporal.PlainDateTime.prototype.daysInWeek")}}
+- {{jsxref("Temporal/PlainDateTime/daysInYear", "Temporal.PlainDateTime.prototype.daysInYear")}}
+- {{jsxref("Temporal/PlainDate/daysInMonth", "Temporal.PlainDate.prototype.daysInMonth")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/daysinweek/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/daysinweek/index.md
new file mode 100644
index 000000000000000..d476c3622a02fb2
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/daysinweek/index.md
@@ -0,0 +1,44 @@
+---
+title: Temporal.PlainDateTime.prototype.daysInWeek
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/daysInWeek
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDateTime.daysInWeek
+---
+
+{{JSRef}}
+
+The **`daysInWeek`** accessor property of {{jsxref("Temporal.PlainDateTime")}} instances returns a positive integer representing the number of days in the week of this date. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `daysInWeek` is `undefined`. You cannot change this property directly.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/daysInWeek", "Temporal.PlainDate.prototype.daysInWeek")}}.
+
+## Examples
+
+### Using daysInWeek
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01");
+console.log(dt.daysInWeek); // 7
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDateTime/yearOfWeek", "Temporal.PlainDateTime.prototype.yearOfWeek")}}
+- {{jsxref("Temporal/PlainDateTime/weekOfYear", "Temporal.PlainDateTime.prototype.weekOfYear")}}
+- {{jsxref("Temporal/PlainDateTime/dayOfWeek", "Temporal.PlainDateTime.prototype.dayOfWeek")}}
+- {{jsxref("Temporal/PlainDateTime/daysInMonth", "Temporal.PlainDateTime.prototype.daysInMonth")}}
+- {{jsxref("Temporal/PlainDateTime/daysInYear", "Temporal.PlainDateTime.prototype.daysInYear")}}
+- {{jsxref("Temporal/PlainDate/daysInWeek", "Temporal.PlainDate.prototype.daysInWeek")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/daysinyear/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/daysinyear/index.md
new file mode 100644
index 000000000000000..691e9cf2ac7b862
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/daysinyear/index.md
@@ -0,0 +1,43 @@
+---
+title: Temporal.PlainDateTime.prototype.daysInYear
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/daysInYear
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDateTime.daysInYear
+---
+
+{{JSRef}}
+
+The **`daysInYear`** accessor property of {{jsxref("Temporal.PlainDateTime")}} instances returns a positive integer representing the number of days in the year of this date. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `daysInYear` is `undefined`. You cannot change this property directly.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/daysInYear", "Temporal.PlainDate.prototype.daysInYear")}}.
+
+## Examples
+
+### Using daysInYear
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01");
+console.log(dt.daysInYear); // 365
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDateTime/year", "Temporal.PlainDateTime.prototype.year")}}
+- {{jsxref("Temporal/PlainDateTime/dayOfYear", "Temporal.PlainDateTime.prototype.dayOfYear")}}
+- {{jsxref("Temporal/PlainDateTime/daysInMonth", "Temporal.PlainDateTime.prototype.daysInMonth")}}
+- {{jsxref("Temporal/PlainDateTime/daysInWeek", "Temporal.PlainDateTime.prototype.daysInWeek")}}
+- {{jsxref("Temporal/PlainDate/daysInYear", "Temporal.PlainDate.prototype.daysInYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/equals/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/equals/index.md
new file mode 100644
index 000000000000000..19253a88e9296d9
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/equals/index.md
@@ -0,0 +1,54 @@
+---
+title: Temporal.PlainDateTime.prototype.equals()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/equals
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDateTime.equals
+---
+
+{{JSRef}}
+
+The **`equals()`** method of {{jsxref("Temporal.PlainDateTime")}} instances returns `true` if this date-time is equivalent in value to another date-time (in a form convertible by {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDateTime.from()")}}), and `false` otherwise. They are compared both by their date and time values and their calendars, so two date-times from different calendars may be considered equal by {{jsxref("Temporal/PlainDateTime/compare", "Temporal.PlainDateTime.compare()")}} but not by `equals()`.
+
+## Syntax
+
+```js-nolint
+equals(other)
+```
+
+### Parameters
+
+- `other`
+ - : A string, an object, or a {{jsxref("Temporal.PlainDateTime")}} instance representing the other date-time to compare. It is converted to a `Temporal.PlainDateTime` object using the same algorithm as {{jsxref("Temporal/PlainDateTime/from", "Temporal.PlainDateTime.from()")}}.
+
+### Return value
+
+`true` if this date-time is equal to `other` both in their date/time value and their calendar, `false` otherwise.
+
+## Examples
+
+### Using equals()
+
+```js
+const dt1 = Temporal.PlainDateTime.from("2021-08-01");
+const dt2 = Temporal.PlainDateTime.from({ year: 2021, month: 8, day: 1 });
+console.log(dt1.equals(dt2)); // true
+
+const dt3 = Temporal.PlainDateTime.from("2021-08-01[u-ca=japanese]");
+console.log(dt1.equals(dt3)); // false
+
+const dt4 = Temporal.PlainDateTime.from("2021-08-01T01:00:00");
+console.log(dt1.equals(dt4)); // false
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/compare", "Temporal.PlainDateTime.compare()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/era/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/era/index.md
new file mode 100644
index 000000000000000..ec08dc0db7c8f59
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/era/index.md
@@ -0,0 +1,44 @@
+---
+title: Temporal.PlainDateTime.prototype.era
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/era
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDateTime.era
+---
+
+{{JSRef}}
+
+The **`era`** accessor property of {{jsxref("Temporal.PlainDateTime")}} instances returns a calendar-specific lowercase string representing the era of this date, or `undefined` if the calendar does not use eras (e.g. ISO 8601). `era` and `eraYear` together uniquely identify a year in a calendar, in the same way that `year` does. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `era` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainDateTime/with", "with()")}} method to create a new `Temporal.PlainDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/era", "Temporal.PlainDate.prototype.era")}}.
+
+## Examples
+
+### Using era
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01"); // ISO 8601 calendar
+console.log(dt.era); // undefined
+
+const dt2 = Temporal.PlainDateTime.from("2021-07-01[u-ca=gregory]");
+console.log(dt2.era); // gregory
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDateTime/year", "Temporal.PlainDateTime.prototype.year")}}
+- {{jsxref("Temporal/PlainDateTime/eraYear", "Temporal.PlainDateTime.prototype.eraYear")}}
+- {{jsxref("Temporal/PlainDate/era", "Temporal.PlainDate.prototype.era")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/erayear/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/erayear/index.md
new file mode 100644
index 000000000000000..d3e9ea25bb4b187
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/erayear/index.md
@@ -0,0 +1,50 @@
+---
+title: Temporal.PlainDateTime.prototype.eraYear
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/eraYear
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDateTime.eraYear
+---
+
+{{JSRef}}
+
+The **`eraYear`** accessor property of {{jsxref("Temporal.PlainDateTime")}} instances returns a non-negative integer representing the year of this date within the era, or `undefined` if the calendar does not use eras (e.g. ISO 8601). The year index usually starts from 1 (more common) or 0, and years in an era can decrease with time (e.g. Gregorian BCE). `era` and `eraYear` together uniquely identify a year in a calendar, in the same way that `year` does. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `eraYear` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainDateTime/with", "with()")}} method to create a new `Temporal.PlainDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/eraYear", "Temporal.PlainDate.prototype.eraYear")}}.
+
+## Examples
+
+### Using eraYear
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01"); // ISO 8601 calendar
+console.log(dt.eraYear); // undefined
+
+const dt2 = Temporal.PlainDateTime.from("2021-07-01[u-ca=gregory]");
+console.log(dt2.eraYear); // 2021
+
+const dt3 = Temporal.PlainDateTime.from("-002021-07-01[u-ca=gregory]");
+console.log(dt3.eraYear); // 2022; 0000 is used for the year 1 BC
+
+const dt4 = Temporal.PlainDateTime.from("2021-07-01[u-ca=japanese]");
+console.log(dt4.eraYear); // 3
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDateTime/year", "Temporal.PlainDateTime.prototype.year")}}
+- {{jsxref("Temporal/PlainDateTime/era", "Temporal.PlainDateTime.prototype.era")}}
+- {{jsxref("Temporal/PlainDate/eraYear", "Temporal.PlainDate.prototype.eraYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/from/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/from/index.md
new file mode 100644
index 000000000000000..73990cbdeb24704
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/from/index.md
@@ -0,0 +1,90 @@
+---
+title: Temporal.PlainDateTime.from()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/from
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.PlainDateTime.from
+---
+
+{{JSRef}}
+
+The **`Temporal.PlainDateTime.from()`** static method creates a new `Temporal.PlainDateTime` object from another `Temporal.PlainDateTime` object, an object with date and time properties, or an [RFC 9557](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime#rfc_9557_format) string.
+
+## Syntax
+
+```js-nolint
+Temporal.PlainDateTime.from(info)
+Temporal.PlainDateTime.from(info, options)
+```
+
+### Parameters
+
+- `info`
+ - : One of the following:
+ - A {{jsxref("Temporal.PlainDateTime")}} instance, which creates a copy of the instance.
+ - An [RFC 9557](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime#rfc_9557_format) string containing a date, optionally a time, and optionally a calendar.
+ - An object containing properties that are recognized by either {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}} (`calendar`, `era`, `eraYear`, `year`, `month`, `monthCode`, `day`) or {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}} (`hour`, `minute`, `second`, `millisecond`, `microsecond`, `nanosecond`). The info should explicitly specify a year (as `year` or `era` and `eraYear`), a month (as `month` or `monthCode`), and a day; others are optional and will be set to their default values.
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `overflow` {{optional_inline}}
+ - : A string specifying the behavior when a date component is out of range (when using the object `info`). Possible values are:
+ - `"constrain"` (default)
+ - : The date component is [clamped](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#invalid_date_clamping) to the valid range.
+ - `"reject"`
+ - : A {{jsxref("RangeError")}} is thrown if the date component is out of range.
+
+### Return value
+
+A new `Temporal.PlainDateTime` object, representing the date and time specified by `info` in the specified `calendar`.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Thrown in one of the following cases:
+ - `info` is not an object or a string.
+ - `options` is not an object or `undefined`.
+ - The provided properties are insufficient to unambiguously determine a date. You usually need to provide a `year` (or `era` and `eraYear`), a `month` (or `monthCode`), and a `day`.
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - The provided properties that specify the same component are inconsistent.
+ - The provided non-numerical properties are not valid; for example, if `monthCode` is never a valid month code in this calendar.
+ - The provided numerical properties are out of range, and `options.overflow` is set to `"reject"`.
+
+## Examples
+
+### Creating a PlainDateTime from an object
+
+```js
+// Year + month + day + hour + minute + second
+const dt = Temporal.PlainDateTime.from({
+ year: 2021,
+ month: 7,
+ day: 1,
+ hour: 12,
+ minute: 34,
+ second: 56,
+});
+console.log(dt.toString()); // "2021-07-01T12:34:56"
+```
+
+### Creating a PlainDateTime from a string
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01T12:34:56");
+console.log(dt.toLocaleString()); // "7/1/2021, 12:34:56 PM" (assuming en-US locale)
+```
+
+For more examples, especially regarding different calendars and overflow settings, see {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}} and {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/PlainDateTime", "Temporal.PlainDateTime()")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/hour/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/hour/index.md
new file mode 100644
index 000000000000000..c18c41dd0beedbc
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/hour/index.md
@@ -0,0 +1,39 @@
+---
+title: Temporal.PlainDateTime.prototype.hour
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/hour
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDateTime.hour
+---
+
+{{JSRef}}
+
+The **`hour`** accessor property of {{jsxref("Temporal.PlainDateTime")}} instances returns a integer from 0 to 23 representing the hour component of this time.
+
+The set accessor of `hour` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainDateTime/with", "with()")}} method to create a new `Temporal.PlainDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainTime/hour", "Temporal.PlainTime.prototype.hour")}}.
+
+## Examples
+
+### Using hour
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01T12:34:56.123456789");
+console.log(dt.hour); // 12
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainTime/hour", "Temporal.PlainTime.prototype.hour")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/index.md
new file mode 100644
index 000000000000000..c1faf0667031302
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/index.md
@@ -0,0 +1,161 @@
+---
+title: Temporal.PlainDateTime
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime
+page-type: javascript-class
+browser-compat: javascript.builtins.Temporal.PlainDateTime
+---
+
+{{JSRef}}
+
+The **`Temporal.PlainDateTime`** object represents a date (calendar date) and time (wall-clock time) without a time zone. It is fundamentally represented as a combination of a [date](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate) (with an associated calendar system) and a [time](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime).
+
+## Description
+
+A `PlainDateTime` is essentially the combination of a {{jsxref("Temporal.PlainDate")}} and a {{jsxref("Temporal.PlainTime")}}. Because the date and time information don't have much interaction, all general information about date properties is documented in the `PlainDate` object, and all general information about time properties is documented in the `PlainTime` object.
+
+If the date-time represents a specific instant that should remain invariant across time zones, you should use the {{jsxref("Temporal.ZonedDateTime")}} object instead. Use `PlainDateTime` when you need to represent an event happening at a specific wall-clock time that may be a different instant in different time zones.
+
+### RFC 9557 format
+
+`PlainDateTime` objects can be serialized and parsed using the [RFC 9557](https://datatracker.ietf.org/doc/html/rfc9557) format, an extension to the [ISO 8601 / RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) format. The string has the following form (spaces are only for readability and should not be present in the actual string):
+
+```plain
+YYYY-MM-DD T HH:mm:ss.sssssssss [u-ca=calendar_id]
+```
+
+- `YYYY`
+ - : Either a four-digit number, or a six-digit number with a `+` or `-` sign.
+- `MM`
+ - : A two-digit number from `01` to `12`.
+- `DD`
+ - : A two-digit number from `01` to `31`. The `YYYY`, `MM`, and `DD` components can be separated by `-` or nothing.
+- `T` {{optional_inline}}
+ - : The date-time separator, which can be `T`, `t`, or a space. Present if and only if `HH` is present.
+- `HH` {{optional_inline}}
+ - : A two-digit number from `00` to `23`. Defaults to `00`.
+- `mm` {{optional_inline}}
+ - : A two-digit number from `00` to `59`. Defaults to `00`.
+- `ss.sssssssss` {{optional_inline}}
+ - : A two-digit number from `00` to `59`. May optionally be followed by a `.` or `,` and one to nine digits. Defaults to `00`. The `HH`, `mm`, and `ss` components can be separated by `:` or nothing. You can omit either just `ss` or both `ss` and `mm`, so the time can be one of three forms: `HH`, `HH:mm`, or `HH:mm:ss.sssssssss`.
+- `[u-ca=calendar_id]` {{optional_inline}}
+ - : Replace `calendar_id` with the calendar to use. May have a _critical flag_ by prefixing the key with `!`: e.g., `[!u-ca=iso8601]`. This flag generally tells other systems that it cannot be ignored if they don't support it. The `Temporal` parser will throw an error if the annotations contain two or more calendar annotations and one of them is critical. Defaults to `[u-ca=iso8601]`. Note that the `YYYY-MM-DD` is always interpreted as an ISO 8601 calendar date and then converted to the specified calendar.
+
+As an input, you may optionally include the offset and time zone identifier, in the same format as [`ZonedDateTime`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#rfc_9557_format), but they will be ignored. Note that the offset must _not_ be `Z`. Other annotations in the `[key=value]` format are also ignored, and they must not have the critical flag.
+
+When serializing, you can configure the fractional second digits, whether to display the calendar ID, and whether to add a critical flag for it.
+
+## Constructor
+
+- {{jsxref("Temporal/PlainDateTime/PlainDateTime", "Temporal.PlainDateTime()")}}
+ - : Creates a new `Temporal.PlainDateTime` object by directly supplying the underlying data.
+
+## Static methods
+
+- {{jsxref("Temporal/PlainDateTime/compare", "Temporal.PlainDateTime.compare()")}}
+ - : Returns a number (-1, 0, or 1) indicating whether the first date-time comes before, is the same as, or comes after the second date-time. Equivalent to first comparing their dates, then comparing their times if the dates are the same.
+- {{jsxref("Temporal/PlainDateTime/from", "Temporal.PlainDateTime.from()")}}
+ - : Creates a new `Temporal.PlainDateTime` object from another `Temporal.PlainDateTime` object, an object with date and time properties, or an [RFC 9557](#rfc_9557_format) string.
+
+## Instance properties
+
+These properties are defined on `Temporal.PlainDateTime.prototype` and shared by all `Temporal.PlainDateTime` instances.
+
+- {{jsxref("Temporal/PlainDateTime/calendarId", "Temporal.PlainDateTime.prototype.calendarId")}}
+ - : Returns a string representing the [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars) used to interpret the internal ISO 8601 date.
+- {{jsxref("Object/constructor", "Temporal.PlainDateTime.prototype.constructor")}}
+ - : The constructor function that created the instance object. For `Temporal.PlainDateTime` instances, the initial value is the {{jsxref("Temporal/PlainDateTime/PlainDateTime", "Temporal.PlainDateTime()")}} constructor.
+- {{jsxref("Temporal/PlainDateTime/day", "Temporal.PlainDateTime.prototype.day")}}
+ - : Returns a positive integer representing the 1-based day index in the month of this date, which is the same day number you would see on a calendar. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Generally starts at 1 and is continuous, but not always.
+- {{jsxref("Temporal/PlainDateTime/dayOfWeek", "Temporal.PlainDateTime.prototype.dayOfWeek")}}
+ - : Returns a positive integer representing the 1-based day index in the week of this date. Days in a week are numbered sequentially from `1` to {{jsxref("Temporal/PlainDateTime/daysInWeek", "daysInWeek")}}, with each number mapping to its name. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. 1 usually represents Monday in the calendar, even when locales using the calendar may consider a different day as the first day of the week (see {{jsxref("Intl/Locale/getWeekInfo", "Intl.Locale.prototype.getWeekInfo()")}}).
+- {{jsxref("Temporal/PlainDateTime/dayOfYear", "Temporal.PlainDateTime.prototype.dayOfYear")}}
+ - : Returns a positive integer representing the 1-based day index in the year of this date. The first day of this year is `1`, and the last day is the {{jsxref("Temporal/PlainDateTime/daysInYear", "daysInYear")}}. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+- {{jsxref("Temporal/PlainDateTime/daysInMonth", "Temporal.PlainDateTime.prototype.daysInMonth")}}
+ - : Returns a positive integer representing the number of days in the month of this date. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+- {{jsxref("Temporal/PlainDateTime/daysInWeek", "Temporal.PlainDateTime.prototype.daysInWeek")}}
+ - : Returns a positive integer representing the number of days in the week of this date. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. For the ISO 8601 calendar, this is always 7, but in other calendar systems it may differ from week to week.
+- {{jsxref("Temporal/PlainDateTime/daysInYear", "Temporal.PlainDateTime.prototype.daysInYear")}}
+ - : Returns a positive integer representing the number of days in the year of this date. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. For the ISO 8601 calendar, this is 365, or 366 in a leap year.
+- {{jsxref("Temporal/PlainDateTime/era", "Temporal.PlainDateTime.prototype.era")}}
+ - : Returns a calendar-specific lowercase string representing the era of this date, or `undefined` if the calendar does not use eras (e.g. ISO 8601). `era` and `eraYear` together uniquely identify a year in a calendar, in the same way that `year` does. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. For Gregorian, it is either `"gregory"` or `"gregory-inverse"`.
+- {{jsxref("Temporal/PlainDateTime/eraYear", "Temporal.PlainDateTime.prototype.eraYear")}}
+ - : Returns a non-negative integer representing the year of this date within the era, or `undefined` if the calendar does not use eras (e.g. ISO 8601). The year index usually starts from 1 (more common) or 0, and years in an era can decrease with time (e.g. Gregorian BCE). `era` and `eraYear` together uniquely identify a year in a calendar, in the same way that `year` does. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+- {{jsxref("Temporal/PlainDateTime/hour", "Temporal.PlainDateTime.prototype.hour")}}
+ - : Returns a integer from 0 to 23 representing the hour component of this time.
+- {{jsxref("Temporal/PlainDateTime/inLeapYear", "Temporal.PlainDateTime.prototype.inLeapYear")}}
+ - : Returns a boolean indicating whether this date is in a leap year. A leap year is a year that has more days (due to a leap day or leap month) than a common year. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+- {{jsxref("Temporal/PlainDateTime/microsecond", "Temporal.PlainDateTime.prototype.microsecond")}}
+ - : Returns a integer from 0 to 999 representing the microsecond (10-6 second) component of this time.
+- {{jsxref("Temporal/PlainDateTime/millisecond", "Temporal.PlainDateTime.prototype.millisecond")}}
+ - : Returns a integer from 0 to 999 representing the millisecond (10-3 second) component of this time.
+- {{jsxref("Temporal/PlainDateTime/minute", "Temporal.PlainDateTime.prototype.minute")}}
+ - : Returns a integer from 0 to 59 representing the minute component of this time.
+- {{jsxref("Temporal/PlainDateTime/month", "Temporal.PlainDateTime.prototype.month")}}
+ - : Returns a positive integer representing the 1-based month index in the year of this date. The first month of this year is `1`, and the last month is the {{jsxref("Temporal/PlainDateTime/monthsInYear", "monthsInYear")}}. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Note that unlike {{jsxref("Date.prototype.getMonth()")}}, the index is 1-based. If the calendar has leap months, then the month with the same {{jsxref("Temporal/PlainDateTime/monthCode", "monthCode")}} may have different `month` indexes for different years.
+- {{jsxref("Temporal/PlainDateTime/monthCode", "Temporal.PlainDateTime.prototype.monthCode")}}
+ - : Returns a calendar-specific string representing the month of this date. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Usually it is `M` plus a two-digit month number. For leap months, it is the previous month's code followed by `L`. If the leap month is the first month of the year, the code is `M00L`.
+- {{jsxref("Temporal/PlainDateTime/monthsInYear", "Temporal.PlainDateTime.prototype.monthsInYear")}}
+ - : Returns a positive integer representing the number of months in the year of this date. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. For the ISO 8601 calendar, this is always 12, but in other calendar systems it may differ.
+- {{jsxref("Temporal/PlainDateTime/nanosecond", "Temporal.PlainDateTime.prototype.nanosecond")}}
+ - : Returns a integer from 0 to 999 representing the nanosecond (10-9 second) component of this time.
+- {{jsxref("Temporal/PlainDateTime/second", "Temporal.PlainDateTime.prototype.second")}}
+ - : Returns a integer from 0 to 59 representing the second component of this time.
+- {{jsxref("Temporal/PlainDateTime/weekOfYear", "Temporal.PlainDateTime.prototype.weekOfYear")}}
+ - : Returns a positive integer representing the 1-based week index in the {{jsxref("Temporal/PlainDateTime/yearOfWeek", "yearOfWeek")}} of this date, or `undefined` if the calendar does not have a well-defined week system. The first week of the year is `1`. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Note that for ISO 8601, the first and last few days of the year may be attributed to the last week of the previous year or the first week of the next year.
+- {{jsxref("Temporal/PlainDateTime/year", "Temporal.PlainDateTime.prototype.year")}}
+ - : Returns an integer representing the number of years of this date relative to the start of a calendar-specific epoch year. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Usually year 1 is either the first year of the latest era or the ISO 8601 year `0001`. If the epoch is in the middle of the year, that year will have the same value before and after the start date of the era.
+- {{jsxref("Temporal/PlainDateTime/yearOfWeek", "Temporal.PlainDateTime.prototype.yearOfWeek")}}
+ - : Returns an integer representing the year to be paired with the {{jsxref("Temporal/PlainDateTime/weekOfYear", "weekOfYear")}} of this date, or `undefined` if the calendar does not have a well-defined week system. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Usually this is the year of the date, but for ISO 8601, the first and last few days of the year may be attributed to the last week of the previous year or the first week of the next year, causing the `yearOfWeek` to differ by 1.
+- `Temporal.PlainDateTime.prototype[Symbol.toStringTag]`
+ - : The initial value of the [`[Symbol.toStringTag]`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) property is the string `"Temporal.PlainDateTime"`. This property is used in {{jsxref("Object.prototype.toString()")}}.
+
+## Instance methods
+
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+ - : Returns a new `Temporal.PlainDateTime` object representing this date-time moved forward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}).
+- {{jsxref("Temporal/PlainDateTime/equals", "Temporal.PlainDateTime.prototype.equals()")}}
+ - : Returns `true` if this date-time is equivalent in value to another date-time (in a form convertible by {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}}), and `false` otherwise. They are compared both by their date and time values and their calendars, so two date-times from different calendars may be considered equal by {{jsxref("Temporal/PlainDateTime/compare", "Temporal.PlainDateTime.compare()")}} but not by `equals()`.
+- {{jsxref("Temporal/PlainDateTime/round", "Temporal.PlainDateTime.prototype.round()")}}
+ - : Returns a new `Temporal.PlainDateTime` object representing this date-time rounded to the given unit.
+- {{jsxref("Temporal/PlainDateTime/since", "Temporal.PlainDateTime.prototype.since()")}}
+ - : Returns a new {{jsxref("Temporal.Duration")}} object representing the duration from another date-time (in a form convertible by {{jsxref("Temporal/PlainDateTime/from", "Temporal.PlainDateTime.from()")}}) to this date-time. The duration is positive if the other date-time is before this date-time, and negative if after.
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+ - : Returns a new `Temporal.PlainDateTime` object representing this date-time moved backward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}).
+- {{jsxref("Temporal/PlainDateTime/toJSON", "Temporal.PlainDateTime.prototype.toJSON()")}}
+ - : Returns a string representing this date-time in the same [RFC 9557 format](#rfc_9557_format) as calling {{jsxref("Temporal/PlainDateTime/toString", "toString()")}}. Intended to be implicitly called by {{jsxref("JSON.stringify()")}}.
+- {{jsxref("Temporal/PlainDateTime/toLocaleString", "Temporal.PlainDateTime.prototype.toLocaleString()")}}
+ - : Returns a string with a language-sensitive representation of this date-time.
+- {{jsxref("Temporal/PlainDateTime/toPlainDate", "Temporal.PlainDateTime.prototype.toPlainDate()")}}
+ - : Returns a new {{jsxref("Temporal.PlainDate")}} object representing the date part (year, month, day) of this date-time in the same calendar system.
+- {{jsxref("Temporal/PlainDateTime/toPlainTime", "Temporal.PlainDateTime.prototype.toPlainTime()")}}
+ - : Returns a new {{jsxref("Temporal.PlainTime")}} object representing the time part (hour, minute, second, and subsecond components) of this date-time.
+- {{jsxref("Temporal/PlainDateTime/toString", "Temporal.PlainDateTime.prototype.toString()")}}
+ - : Returns a string representing this date-time in the [RFC 9557 format](#rfc_9557_format).
+- {{jsxref("Temporal/PlainDateTime/toZonedDateTime", "Temporal.PlainDateTime.prototype.toZonedDateTime()")}}
+ - : Returns a new {{jsxref("Temporal.ZonedDateTime")}} instance representing the same date-time as this plain date-time, but in the specified time zone.
+- {{jsxref("Temporal/PlainDateTime/until", "Temporal.PlainDateTime.prototype.until()")}}
+ - : Returns a new {{jsxref("Temporal.Duration")}} object representing the duration from this date-time to another date-time (in a form convertible by {{jsxref("Temporal/PlainDateTime/from", "Temporal.PlainDateTime.from()")}}). The duration is positive if the other date-time is after this date-time, and negative if before.
+- {{jsxref("Temporal/PlainDateTime/valueOf", "Temporal.PlainDateTime.prototype.valueOf()")}}
+ - : Throws a {{jsxref("TypeError")}}, which prevents `Temporal.PlainDateTime` instances from being [implicitly converted to primitives](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) when used in arithmetic or comparison operations.
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+ - : Returns a new `Temporal.PlainDateTime` object representing this date-time with some fields replaced by new values.
+- {{jsxref("Temporal/PlainDateTime/withCalendar", "Temporal.PlainDateTime.prototype.withCalendar()")}}
+ - : Returns a new `Temporal.PlainDateTime` object representing this date-time interpreted in the new calendar system.
+- {{jsxref("Temporal/PlainDateTime/withPlainTime", "Temporal.PlainDateTime.prototype.withPlainTime()")}}
+ - : Returns a new `Temporal.PlainDateTime` object representing this date-time with the time part entirely replaced by the new time (in a form convertible by {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}).
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal.ZonedDateTime")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/inleapyear/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/inleapyear/index.md
new file mode 100644
index 000000000000000..f12ca5455415922
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/inleapyear/index.md
@@ -0,0 +1,44 @@
+---
+title: Temporal.PlainDateTime.prototype.inLeapYear
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/inLeapYear
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDateTime.inLeapYear
+---
+
+{{JSRef}}
+
+The **`inLeapYear`** accessor property of {{jsxref("Temporal.PlainDateTime")}} instances returns a boolean indicating whether this date is in a leap year. A leap year is a year that has more days (due to a leap day or leap month) than a common year. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `inLeapYear` is `undefined`. You cannot change this property directly.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/inLeapYear", "Temporal.PlainDate.prototype.inLeapYear")}}.
+
+## Examples
+
+### Using inLeapYear
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01");
+console.log(dt.inLeapYear); // false
+console.log(dt.daysInYear); // 365
+console.log(dt.monthsInYear); // 12
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDateTime/year", "Temporal.PlainDateTime.prototype.year")}}
+- {{jsxref("Temporal/PlainDateTime/daysInYear", "Temporal.PlainDateTime.prototype.daysInYear")}}
+- {{jsxref("Temporal/PlainDateTime/monthsInYear", "Temporal.PlainDateTime.prototype.monthsInYear")}}
+- {{jsxref("Temporal/PlainDate/inLeapYear", "Temporal.PlainDate.prototype.inLeapYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/microsecond/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/microsecond/index.md
new file mode 100644
index 000000000000000..efe9fc104cf0cf7
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/microsecond/index.md
@@ -0,0 +1,42 @@
+---
+title: Temporal.PlainDateTime.prototype.microsecond
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/microsecond
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDateTime.microsecond
+---
+
+{{JSRef}}
+
+The **`microsecond`** accessor property of {{jsxref("Temporal.PlainDateTime")}} instances returns a integer from 0 to 999 representing the microsecond (10-6 second) component of this time.
+
+The set accessor of `microsecond` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainDateTime/with", "with()")}} method to create a new `Temporal.PlainDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainTime/microsecond", "Temporal.PlainTime.prototype.microsecond")}}.
+
+## Examples
+
+### Using microsecond
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01T12:34:56.123456789");
+console.log(dt.microsecond); // 456
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDateTime/second", "Temporal.PlainDateTime.prototype.second")}}
+- {{jsxref("Temporal/PlainDateTime/millisecond", "Temporal.PlainDateTime.prototype.millisecond")}}
+- {{jsxref("Temporal/PlainDateTime/nanosecond", "Temporal.PlainDateTime.prototype.nanosecond")}}
+- {{jsxref("Temporal/PlainTime/microsecond", "Temporal.PlainTime.prototype.microsecond")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/millisecond/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/millisecond/index.md
new file mode 100644
index 000000000000000..48d8166b4757eff
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/millisecond/index.md
@@ -0,0 +1,42 @@
+---
+title: Temporal.PlainDateTime.prototype.millisecond
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/millisecond
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDateTime.millisecond
+---
+
+{{JSRef}}
+
+The **`millisecond`** accessor property of {{jsxref("Temporal.PlainDateTime")}} instances returns a integer from 0 to 999 representing the millisecond (10-3 second) component of this time.
+
+The set accessor of `millisecond` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainDateTime/with", "with()")}} method to create a new `Temporal.PlainDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainTime/millisecond", "Temporal.PlainTime.prototype.millisecond")}}.
+
+## Examples
+
+### Using millisecond
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01T12:34:56.123456789");
+console.log(dt.millisecond); // 123
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDateTime/second", "Temporal.PlainDateTime.prototype.second")}}
+- {{jsxref("Temporal/PlainDateTime/microsecond", "Temporal.PlainDateTime.prototype.microsecond")}}
+- {{jsxref("Temporal/PlainDateTime/nanosecond", "Temporal.PlainDateTime.prototype.nanosecond")}}
+- {{jsxref("Temporal/PlainTime/millisecond", "Temporal.PlainTime.prototype.millisecond")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/minute/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/minute/index.md
new file mode 100644
index 000000000000000..dcef6df794c3ce9
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/minute/index.md
@@ -0,0 +1,39 @@
+---
+title: Temporal.PlainDateTime.prototype.minute
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/minute
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDateTime.minute
+---
+
+{{JSRef}}
+
+The **`minute`** accessor property of {{jsxref("Temporal.PlainDateTime")}} instances returns a integer from 0 to 59 representing the minute component of this time.
+
+The set accessor of `minute` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainDateTime/with", "with()")}} method to create a new `Temporal.PlainDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainTime/minute", "Temporal.PlainTime.prototype.minute")}}.
+
+## Examples
+
+### Using minute
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01T12:34:56.123456789");
+console.log(dt.minute); // 34
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainTime/minute", "Temporal.PlainDateTime.prototype.minute")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/month/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/month/index.md
new file mode 100644
index 000000000000000..b3add32074d8df3
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/month/index.md
@@ -0,0 +1,45 @@
+---
+title: Temporal.PlainDateTime.prototype.month
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/month
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDateTime.month
+---
+
+{{JSRef}}
+
+The **`month`** accessor property of {{jsxref("Temporal.PlainDateTime")}} instances returns a positive integer representing the 1-based month index in the year of this date. The first month of this year is `1`, and the last month is the {{jsxref("Temporal/PlainDateTime/monthsInYear", "monthsInYear")}}. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `month` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainDateTime/with", "with()")}} method to create a new `Temporal.PlainDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/month", "Temporal.PlainDate.prototype.month")}}.
+
+## Examples
+
+### Using month
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01"); // ISO 8601 calendar
+console.log(dt.monthCode); // "M07"
+console.log(dt.month); // 7
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDateTime/year", "Temporal.PlainDateTime.prototype.year")}}
+- {{jsxref("Temporal/PlainDateTime/day", "Temporal.PlainDateTime.prototype.day")}}
+- {{jsxref("Temporal/PlainDateTime/monthCode", "Temporal.PlainDateTime.prototype.monthCode")}}
+- {{jsxref("Temporal/PlainDateTime/daysInMonth", "Temporal.PlainDateTime.prototype.daysInMonth")}}
+- {{jsxref("Temporal/PlainDateTime/monthsInYear", "Temporal.PlainDateTime.prototype.monthsInYear")}}
+- {{jsxref("Temporal/PlainDate/month", "Temporal.PlainDate.prototype.month")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/monthcode/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/monthcode/index.md
new file mode 100644
index 000000000000000..9c3b9f017359eda
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/monthcode/index.md
@@ -0,0 +1,46 @@
+---
+title: Temporal.PlainDateTime.prototype.monthCode
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/monthCode
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDateTime.monthCode
+---
+
+{{JSRef}}
+
+The **`monthCode`** accessor property of {{jsxref("Temporal.PlainDateTime")}} instances returns a calendar-specific string representing the month of this date. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+Usually it is `M` plus a two-digit month number. For leap months, it is the previous month's code followed by `L` (even if it's conceptually a derivative of the following month; for example, in the Hebrew calendar, Adar I has code `M05L` but Adar II has code `M06`). If the leap month is the first month of the year, the code is `M00L`.
+
+The set accessor of `monthCode` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainDateTime/with", "with()")}} method to create a new `Temporal.PlainDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/monthCode", "Temporal.PlainDate.prototype.monthCode")}}.
+
+## Examples
+
+### Using monthCode
+
+```js
+const date = Temporal.PlainDateTime.from("2021-07-01"); // ISO 8601 calendar
+console.log(date.monthCode); // "M07"
+console.log(date.month); // 7
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDateTime/year", "Temporal.PlainDateTime.prototype.year")}}
+- {{jsxref("Temporal/PlainDateTime/month", "Temporal.PlainDateTime.prototype.month")}}
+- {{jsxref("Temporal/PlainDateTime/daysInMonth", "Temporal.PlainDateTime.prototype.daysInMonth")}}
+- {{jsxref("Temporal/PlainDateTime/monthsInYear", "Temporal.PlainDateTime.prototype.monthsInYear")}}
+- {{jsxref("Temporal/PlainDate/monthCode", "Temporal.PlainDate.prototype.monthCode")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/monthsinyear/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/monthsinyear/index.md
new file mode 100644
index 000000000000000..25aa0a9d880a6c6
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/monthsinyear/index.md
@@ -0,0 +1,43 @@
+---
+title: Temporal.PlainDateTime.prototype.monthsInYear
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/monthsInYear
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDateTime.monthsInYear
+---
+
+{{JSRef}}
+
+The **`monthsInYear`** accessor property of {{jsxref("Temporal.PlainDateTime")}} instances returns a positive integer representing the number of months in the year of this date. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `monthsInYear` is `undefined`. You cannot change this property directly.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/monthsInYear", "Temporal.PlainDate.prototype.monthsInYear")}}.
+
+## Examples
+
+### Using monthsInYear
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01");
+console.log(dt.monthsInYear); // 12
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDateTime/year", "Temporal.PlainDateTime.prototype.year")}}
+- {{jsxref("Temporal/PlainDateTime/month", "Temporal.PlainDateTime.prototype.month")}}
+- {{jsxref("Temporal/PlainDateTime/monthCode", "Temporal.PlainDateTime.prototype.monthCode")}}
+- {{jsxref("Temporal/PlainDateTime/daysInMonth", "Temporal.PlainDateTime.prototype.daysInMonth")}}
+- {{jsxref("Temporal/PlainDate/monthsInYear", "Temporal.PlainDate.prototype.monthsInYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/nanosecond/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/nanosecond/index.md
new file mode 100644
index 000000000000000..7286cd76aa6236f
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/nanosecond/index.md
@@ -0,0 +1,42 @@
+---
+title: Temporal.PlainDateTime.prototype.nanosecond
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/nanosecond
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDateTime.nanosecond
+---
+
+{{JSRef}}
+
+The **`nanosecond`** accessor property of {{jsxref("Temporal.PlainDateTime")}} instances returns a integer from 0 to 999 representing the nanosecond (10-9 second) component of this time.
+
+The set accessor of `nanosecond` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainDateTime/with", "with()")}} method to create a new `Temporal.PlainDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainTime/nanosecond", "Temporal.PlainTime.prototype.nanosecond")}}.
+
+## Examples
+
+### Using nanosecond
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01T12:34:56.123456789");
+console.log(dt.nanosecond); // 789
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDateTime/second", "Temporal.PlainDateTime.prototype.second")}}
+- {{jsxref("Temporal/PlainDateTime/millisecond", "Temporal.PlainDateTime.prototype.millisecond")}}
+- {{jsxref("Temporal/PlainDateTime/microsecond", "Temporal.PlainDateTime.prototype.microsecond")}}
+- {{jsxref("Temporal/PlainTime/nanosecond", "Temporal.PlainTime.prototype.nanosecond")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/plaindatetime/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/plaindatetime/index.md
new file mode 100644
index 000000000000000..83189021ed776b2
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/plaindatetime/index.md
@@ -0,0 +1,84 @@
+---
+title: Temporal.PlainDateTime()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/PlainDateTime
+page-type: javascript-constructor
+browser-compat: javascript.builtins.Temporal.PlainDateTime.PlainDateTime
+---
+
+{{JSRef}}
+
+The **`Temporal.PlainDateTime()`** constructor creates {{jsxref("Temporal.PlainDateTime")}} objects.
+
+This constructor allows you to create instances by directly supplying the underlying data. Like all other `Temporal` classes, you should usually construct `Temporal.PlainDateTime` objects using the {{jsxref("Temporal/PlainDateTime/from", "Temporal.PlainDateTime.from()")}} static method, which can handle a variety of input types.
+
+## Syntax
+
+```js-nolint
+new Temporal.PlainDateTime(year, month, day)
+new Temporal.PlainDateTime(year, month, day, hour)
+new Temporal.PlainDateTime(year, month, day, hour, minute)
+new Temporal.PlainDateTime(year, month, day, hour, minute, second)
+new Temporal.PlainDateTime(year, month, day, hour, minute, second, millisecond)
+new Temporal.PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond)
+new Temporal.PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond)
+new Temporal.PlainDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar)
+```
+
+> **Note:** `Temporal.PlainDateTime()` can only be constructed with [`new`](/en-US/docs/Web/JavaScript/Reference/Operators/new). Attempting to call it without `new` throws a {{jsxref("TypeError")}}.
+
+### Parameters
+
+- `year`
+ - : A number, truncated to an integer, representing the year in the ISO calendar system.
+- `month`
+ - : A number, truncated to an integer, representing the month in the ISO calendar system.
+- `day`
+ - : A number, truncated to an integer, representing the day of the month in the ISO calendar system.
+- `hour` {{optional_inline}}
+ - : A number, truncated to an integer, representing the hour component.
+- `minute` {{optional_inline}}
+ - : A number, truncated to an integer, representing the minute component.
+- `second` {{optional_inline}}
+ - : A number, truncated to an integer, representing the second component.
+- `millisecond` {{optional_inline}}
+ - : A number, truncated to an integer, representing the millisecond component.
+- `microsecond` {{optional_inline}}
+ - : A number, truncated to an integer, representing the microsecond component.
+- `nanosecond` {{optional_inline}}
+ - : A number, truncated to an integer, representing the nanosecond component.
+- `calendar` {{optional_inline}}
+ - : A string representing the [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars) to use. Note that irrespective of the `calendar`, the `year`, `month`, and `day` must be in the ISO 8601 calendar system. Defaults to `"iso8601"`.
+
+### Return value
+
+A new `Temporal.PlainDateTime` object, representing the date-time specified by the parameters.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the components is not a finite number, or they don't represent a valid date-time.
+
+## Examples
+
+### Using Temporal.PlainDateTime()
+
+```js
+const dt = new Temporal.PlainDateTime(2021, 7, 1);
+console.log(dt.toString()); // 2021-07-01T00:00:00
+
+const dt2 = new Temporal.PlainDateTime(2021, 7, 1, 0, 0, 0, 0, 0, 0, "hebrew");
+console.log(dt2.toString()); // 2021-07-01T00:00:00[u-ca=hebrew]
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/from", "Temporal.PlainDateTime.from()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/round/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/round/index.md
new file mode 100644
index 000000000000000..e6a538cb9a0abf8
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/round/index.md
@@ -0,0 +1,70 @@
+---
+title: Temporal.PlainDateTime.prototype.round()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/round
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDateTime.round
+---
+
+{{JSRef}}
+
+The **`round()`** method of {{jsxref("Temporal.PlainDateTime")}} instances returns a new `Temporal.PlainDateTime` object representing this date-time rounded to the given unit.
+
+## Syntax
+
+```js-nolint
+round(smallestUnit)
+round(options)
+```
+
+### Parameters
+
+- `smallestUnit`
+ - : A string representing the [`smallestUnit`](#smallestunit_2) option. This is a convenience overload, so `round(smallestUnit)` is equivalent to `round({ smallestUnit })`, where `smallestUnit` is a string.
+- `options`
+ - : An object containing some or all of the following properties (in the order they are retrieved and validated):
+ - `roundingIncrement` {{optional_inline}}
+ - : A number (truncated to an integer) representing the rounding increment in the given `smallestUnit`. Defaults to `1`. For all values of `smallestUnit` except `"day"`, the increment must be a divisor of the maximum value of the unit; for example, if the unit is hours, the increment must be a divisor of 24 and must not be 24 itself, which means it can be 1, 2, 3, 4, 6, 8, or 12. For `"day"`, the increment must be 1.
+ - `roundingMode` {{optional_inline}}
+ - : A string specifying how to round off the fractional part of `smallestUnit`. See [`Intl.NumberFormat()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#roundingmode). Defaults to `"halfExpand"`.
+ - `smallestUnit`
+ - : A string representing the smallest unit to include in the output. The value must be one of the following: `"day"`, `"hour"`, `"minute"`, `"second"`, `"millisecond"`, `"microsecond"`, `"nanosecond"`, or their plural forms. For units larger than `"nanosecond"`, fractional parts of the `smallestUnit` will be rounded according to the `roundingIncrement` and `roundingMode` settings.
+
+### Return value
+
+A new {{jsxref("Temporal.PlainDateTime")}} object representing this date-time rounded to the given unit, where all units smaller than `smallestUnit` are zeroed out.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+
+## Examples
+
+### Rounding off small units
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01T12:34:56.123456789");
+const nearestMillisecond = dt.round("millisecond");
+console.log(nearestMillisecond.toString()); // 2021-07-01T12:34:56.123
+
+const nearestHalfHour = dt.round({
+ smallestUnit: "minute",
+ roundingIncrement: 30,
+});
+console.log(nearestHalfHour.toString()); // 2021-07-01T12:30:00
+
+const nextDay = dt.round({ smallestUnit: "day", roundingMode: "ceil" });
+console.log(nextDay.toString()); // 2021-07-02T00:00:00
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/second/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/second/index.md
new file mode 100644
index 000000000000000..9690f2b0522368f
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/second/index.md
@@ -0,0 +1,42 @@
+---
+title: Temporal.PlainDateTime.prototype.second
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/second
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDateTime.second
+---
+
+{{JSRef}}
+
+The **`second`** accessor property of {{jsxref("Temporal.PlainDateTime")}} instances returns a integer from 0 to 59 representing the second component of this time.
+
+The set accessor of `second` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainDateTime/with", "with()")}} method to create a new `Temporal.PlainDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainTime/second", "Temporal.PlainTime.prototype.second")}}.
+
+## Examples
+
+### Using second
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01T12:34:56.123456789");
+console.log(dt.second); // 56
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDateTime/millisecond", "Temporal.PlainDateTime.prototype.millisecond")}}
+- {{jsxref("Temporal/PlainDateTime/microsecond", "Temporal.PlainDateTime.prototype.microsecond")}}
+- {{jsxref("Temporal/PlainDateTime/nanosecond", "Temporal.PlainDateTime.prototype.nanosecond")}}
+- {{jsxref("Temporal/PlainTime/second", "Temporal.PlainTime.prototype.second")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/since/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/since/index.md
new file mode 100644
index 000000000000000..0b65034d030eb95
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/since/index.md
@@ -0,0 +1,98 @@
+---
+title: Temporal.PlainDateTime.prototype.since()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/since
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDateTime.since
+---
+
+{{JSRef}}
+
+The **`since()`** method of {{jsxref("Temporal.PlainDateTime")}} instances returns a new {{jsxref("Temporal.Duration")}} object representing the duration from another date-time (in a form convertible by {{jsxref("Temporal/PlainDateTime/from", "Temporal.PlainDateTime.from()")}}) to this date-time. The duration is positive if the other date-time is before this date-time, and negative if after.
+
+This method does `this - other`. To do `other - this`, use the {{jsxref("Temporal/PlainDateTime/until", "until()")}} method.
+
+## Syntax
+
+```js-nolint
+since(other)
+since(other, options)
+```
+
+### Parameters
+
+- `other`
+ - : A string, an object, or a {{jsxref("Temporal.PlainDateTime")}} instance representing a date-time to subtract from this date-time. It is converted to a `Temporal.PlainDateTime` object using the same algorithm as {{jsxref("Temporal/PlainDateTime/from", "Temporal.PlainDateTime.from()")}}. It must have the same calendar as `this`.
+- `options` {{optional_inline}}
+ - : An object containing the options for {{jsxref("Temporal/Duration/round", "Temporal.Duration.prototype.round()")}}, which includes `largestUnit`, `roundingIncrement`, `roundingMode`, and `smallestUnit`. `largestUnit` and `smallestUnit` accept all possible units. For `largestUnit`, the default value `"auto"` means `"day"` or `smallestUnit`, whichever is greater. For `smallestUnit`, the default value is `"nanosecond"`. The current date is used as the `relativeTo` option. Note that using [units larger than `"day"`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#calendar_durations) may make the duration not portable to other calendars or dates.
+
+### Return value
+
+A new {{jsxref("Temporal.Duration")}} object representing the duration _since_ `other` to this date-time. The duration is positive if `other` is before this date-time, and negative if after.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - `other` has a different calendar than `this`.
+ - Any of the options is invalid.
+
+## Examples
+
+### Using since()
+
+```js
+let lastBilling = Temporal.PlainDateTime.from({
+ year: Temporal.Now.plainDateISO().year,
+ month: 4,
+ day: 1,
+});
+const now = Temporal.Now.plainDateTimeISO().round("second");
+if (Temporal.PlainDateTime.compare(lastBilling, now) > 0) {
+ lastBilling = lastBilling.subtract({ years: 1 });
+}
+const duration = now.since(lastBilling);
+console.log(`${duration.toLocaleString("en-US")} since last billing`);
+// Expected output: "[number] days, [number] hr, [number] min, [number] sec since last billing"
+
+const duration2 = now.since(lastBilling, { smallestUnit: "day" });
+console.log(`${duration2.toLocaleString("en-US")} since last billing`);
+// Expected output: "[number] days since last billing
+
+const duration3 = now.since(lastBilling, {
+ largestUnit: "year",
+ smallestUnit: "day",
+});
+console.log(`${duration3.toLocaleString("en-US")} since last billing`);
+// Expected output: "[number] months, [number] days since last billing"
+```
+
+### Rounding the result
+
+By default the fractional part of the `smallestUnit` is truncated. You can round it up using the `roundingIncrement` and `roundingMode` options.
+
+```js
+const dt1 = Temporal.PlainDateTime.from("2022-01-01T00:00:00");
+const dt2 = Temporal.PlainDateTime.from("2022-01-28T12:34:56");
+const duration = dt2.since(dt1, {
+ smallestUnit: "day",
+ roundingIncrement: 5,
+ roundingMode: "ceil",
+});
+console.log(duration.toString()); // "P30D"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDateTime/until", "Temporal.PlainDateTime.prototype.until()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/subtract/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/subtract/index.md
new file mode 100644
index 000000000000000..49c99e3d8d1afdd
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/subtract/index.md
@@ -0,0 +1,75 @@
+---
+title: Temporal.PlainDateTime.prototype.subtract()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/subtract
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDateTime.subtract
+---
+
+{{JSRef}}
+
+The **`subtract()`** method of {{jsxref("Temporal.PlainDateTime")}} instances returns a new `Temporal.PlainDateTime` object representing this date-time moved backward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}).
+
+If you want to subtract two date-times and get a duration, use {{jsxref("Temporal/PlainDateTime/since", "since()")}} or {{jsxref("Temporal/PlainDateTime/until", "until()")}} instead.
+
+## Syntax
+
+```js-nolint
+subtract(duration)
+subtract(duration, options)
+```
+
+### Parameters
+
+- `duration`
+ - : A string, an object, or a {{jsxref("Temporal.Duration")}} instance representing a duration to subtract from this date-time. It is converted to a `Temporal.Duration` object using the same algorithm as {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}.
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `overflow` {{optional_inline}}
+ - : A string specifying the behavior when a date component is out of range. Possible values are:
+ - `"constrain"` (default)
+ - : The date component is [clamped](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#invalid_date_clamping) to the valid range.
+ - `"reject"`
+ - : A {{jsxref("RangeError")}} is thrown if the date component is out of range.
+
+### Return value
+
+A new `Temporal.PlainDateTime` object representing the date-time specified by the original `PlainDateTime`, minus the duration.
+
+## Description
+
+Subtracting a duration is equivalent to [adding](Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/add) its [negation](Web/JavaScript/Reference/Global_Objects/Temporal/Duration/negated), so all the same considerations apply.
+
+## Examples
+
+### Subtracting a duration
+
+```js
+const start = Temporal.PlainDateTime.from("2022-01-01T12:34:56");
+const end = start.subtract({
+ years: 1,
+ months: 2,
+ weeks: 3,
+ days: 4,
+ hours: 5,
+ minutes: 6,
+ seconds: 7,
+ milliseconds: 8,
+});
+console.log(end.toString()); // 2020-10-07T07:28:48.992
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/since", "Temporal.PlainDateTime.prototype.since()")}}
+- {{jsxref("Temporal/PlainDateTime/until", "Temporal.PlainDateTime.prototype.until()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/tojson/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/tojson/index.md
new file mode 100644
index 000000000000000..bd68804cffcf64a
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/tojson/index.md
@@ -0,0 +1,68 @@
+---
+title: Temporal.PlainDateTime.prototype.toJSON()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/toJSON
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDateTime.toJSON
+---
+
+{{JSRef}}
+
+The **`toJSON()`** method of {{jsxref("Temporal.PlainDateTime")}} instances returns a string representing this date-time in the same [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime#rfc_9557_format) as calling {{jsxref("Temporal/PlainDateTime/toString", "toString()")}}. It is intended to be implicitly called by {{jsxref("JSON.stringify()")}}.
+
+## Syntax
+
+```js-nolint
+toJSON()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A string representing the given date-time in the [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime#rfc_9557_format), with the calendar annotation included if it is not `"iso8601"`.
+
+## Description
+
+The `toJSON()` method is automatically called by {{jsxref("JSON.stringify()")}} when a `Temporal.PlainDateTime` object is stringified. This method is generally intended to, by default, usefully serialize `Temporal.PlainDateTime` objects during [JSON](/en-US/docs/Glossary/JSON) serialization, which can then be deserialized using the {{jsxref("Temporal/PlainDateTime/from", "Temporal.PlainDateTime.from()")}} function as the reviver of {{jsxref("JSON.parse()")}}.
+
+## Examples
+
+### Using toJSON()
+
+```js
+const dt = Temporal.PlainDateTime.from({ year: 2021, month: 8, day: 1 });
+const dtStr = dt.toJSON(); // '2021-08-01T00:00:00'
+const dt2 = Temporal.PlainDateTime.from(dtStr);
+```
+
+### JSON serialization and parsing
+
+This example shows how `Temporal.PlainDateTime` can be serialized as JSON without extra effort, and how to parse it back.
+
+```js
+const dt = Temporal.PlainDateTime.from({ year: 2021, month: 8, day: 1 });
+const jsonStr = JSON.stringify({ nextBilling: dt }); // '{"nextBilling":"2021-08-01T00:00:00"}'
+const obj = JSON.parse(jsonStr, (key, value) => {
+ if (key === "nextBilling") {
+ return Temporal.PlainDateTime.from(value);
+ }
+ return value;
+});
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/from", "Temporal.PlainDateTime.from()")}}
+- {{jsxref("Temporal/PlainDateTime/toString", "Temporal.PlainDateTime.prototype.toString()")}}
+- {{jsxref("Temporal/PlainDateTime/toLocaleString", "Temporal.PlainDateTime.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/tolocalestring/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/tolocalestring/index.md
new file mode 100644
index 000000000000000..ae7359f7b2e2cf8
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/tolocalestring/index.md
@@ -0,0 +1,108 @@
+---
+title: Temporal.PlainDateTime.prototype.toLocaleString()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/toLocaleString
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDateTime.toLocaleString
+---
+
+{{JSRef}}
+
+The **`toLocaleString()`** method of {{jsxref("Temporal.PlainDateTime")}} instances returns a string with a language-sensitive representation of this date-time. In implementations with [`Intl.DateTimeFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat) support, this method delegates to `Intl.DateTimeFormat`.
+
+Every time `toLocaleString` is called, it has to perform a search in a big database of localization strings, which is potentially inefficient. When the method is called many times with the same arguments, it is better to create a {{jsxref("Intl.DateTimeFormat")}} object and use its {{jsxref("Intl/DateTimeFormat/format", "format()")}} method, because a `DateTimeFormat` object remembers the arguments passed to it and may decide to cache a slice of the database, so future `format` calls can search for localization strings within a more constrained context.
+
+## Syntax
+
+```js-nolint
+toLocaleString()
+toLocaleString(locales)
+toLocaleString(locales, options)
+```
+
+### Parameters
+
+The `locales` and `options` parameters customize the behavior of the function and let applications specify the language whose formatting conventions should be used.
+
+In implementations that support the [`Intl.DateTimeFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat), these parameters correspond exactly to the [`Intl.DateTimeFormat()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat) constructor's parameters. Implementations without `Intl.DateTimeFormat` support return the exact same string as {{jsxref("Temporal/PlainDateTime/toString", "toString()")}}, ignoring both parameters.
+
+- `locales` {{optional_inline}}
+ - : A string with a BCP 47 language tag, or an array of such strings. Corresponds to the [`locales`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#locales) parameter of the `Intl.DateTimeFormat()` constructor.
+- `options` {{optional_inline}}
+
+ - : An object adjusting the output format. Corresponds to the [`options`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#options) parameter of the `Intl.DateTimeFormat()` constructor. If this date-time's calendar is not `"iso8601"`, the `calendar` option must be provided with the same value; otherwise, if this date-time's calendar is `"iso8601"`, the `calendar` option can be any value. Regarding the [date-time component options](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#date-time_component_options) and the style shortcuts (`dateStyle` and `timeStyle`), the options should follow one of these forms:
+
+ - Provide none of them: `year`, `month`, `day`, `hour`, `minute`, and `second` will default to `"numeric"`.
+ - Provide at least one of `dateStyle` or `timeStyle`: the date-time components will be set according to the specified style and the locale.
+ - Provide some date-time component options. Only the specified date-time components will be included in the output.
+
+See the [`Intl.DateTimeFormat()` constructor](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat) for details on these parameters and how to use them.
+
+### Return value
+
+A string representing the given date-time according to language-specific conventions.
+
+In implementations with `Intl.DateTimeFormat`, this is equivalent to `new Intl.DateTimeFormat(locales, options).format(dateTime)`, where `options` has been normalized as described above.
+
+> [!NOTE]
+> Most of the time, the formatting returned by `toLocaleString()` is consistent. However, the output may vary between implementations, even within the same locale — output variations are by design and allowed by the specification. It may also not be what you expect. For example, the string may use non-breaking spaces or be surrounded by bidirectional control characters. You should not compare the results of `toLocaleString()` to hardcoded constants.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+- {{jsxref("TypeError")}}
+ - : Thrown if any of the options is not of the expected type.
+
+## Examples
+
+### Using toLocaleString()
+
+Basic use of this method without specifying a `locale` returns a formatted string in the default locale and with default options.
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-08-01T12:34:56");
+
+console.log(dt.toLocaleString()); // 8/1/2021, 12:34:56 PM (assuming en-US locale)
+```
+
+If the date's calendar doesn't match the locale's default calendar, and the date's calendar is not `iso8601`, an explicit `calendar` option must be provided with the same value.
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-08-01T12:34:56[u-ca=japanese]");
+// The ja-JP locale uses the Gregorian calendar by default
+dt.toLocaleString("ja-JP", { calendar: "japanese" }); // R3/8/1 12:34:56
+```
+
+### Using toLocaleString() with options
+
+You can customize which parts of the date are included in the output by providing the `options` parameter.
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-08-01T12:34:56");
+dt.toLocaleString("en-US", { dateStyle: "full", timeStyle: "full" }); // Sunday, August 1, 2021 at 12:34:56 PM
+dt.toLocaleString("en-US", {
+ year: "numeric",
+ month: "long",
+ hour: "numeric",
+}); // August 2021 at 12 PM
+dt.toLocaleString("en-US", {
+ year: "numeric",
+ hour: "numeric",
+ minute: "numeric",
+}); // 2021, 12:34 PM
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Intl.DateTimeFormat")}}
+- {{jsxref("Temporal/PlainDateTime/toJSON", "Temporal.PlainDateTime.prototype.toJSON()")}}
+- {{jsxref("Temporal/PlainDateTime/toString", "Temporal.PlainDateTime.prototype.toString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/toplaindate/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/toplaindate/index.md
new file mode 100644
index 000000000000000..942d0003af60d81
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/toplaindate/index.md
@@ -0,0 +1,50 @@
+---
+title: Temporal.PlainDateTime.prototype.toPlainDate()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/toPlainDate
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDateTime.toPlainDate
+---
+
+{{JSRef}}
+
+The **`toPlainDate()`** method of {{jsxref("Temporal.PlainDateTime")}} instances returns a new {{jsxref("Temporal.PlainDate")}} object representing the date part (year, month, day) of this date-time in the same calendar system.
+
+## Syntax
+
+```js-nolint
+toPlainDate()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A new `Temporal.PlainDate` object representing the date part (year, month, day) of this date-time in the same calendar system.
+
+## Examples
+
+### Using toPlainDate()
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01T12:34:56");
+const date = dt.toPlainDate();
+console.log(date.toString()); // '2021-07-01'
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDateTime/toPlainTime", "Temporal.PlainDateTime.prototype.toPlainTime()")}}
+- {{jsxref("Temporal/PlainDateTime/toZonedDateTime", "Temporal.PlainDate.prototype.toZonedDateTime()")}}
+- {{jsxref("Temporal/PlainDate/toPlainDateTime", "Temporal.PlainDate.prototype.toPlainDateTime()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/toplaintime/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/toplaintime/index.md
new file mode 100644
index 000000000000000..8f187dc08300510
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/toplaintime/index.md
@@ -0,0 +1,49 @@
+---
+title: Temporal.PlainDateTime.prototype.toPlainTime()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/toPlainTime
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDateTime.toPlainTime
+---
+
+{{JSRef}}
+
+The **`toPlainTime()`** method of {{jsxref("Temporal.PlainDateTime")}} instances returns a new {{jsxref("Temporal.PlainTime")}} object representing the time part (hour, minute, second, and subsecond components) of this date-time.
+
+## Syntax
+
+```js-nolint
+toPlainTime()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A new `Temporal.PlainTime` object representing the time part (hour, minute, second, and subsecond components) of this date-time.
+
+## Examples
+
+### Using toPlainTime()
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01T12:34:56");
+const time = dt.toPlainTime();
+console.log(time.toString()); // '12:34:56'
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal/PlainDateTime/toPlainDate", "Temporal.PlainDateTime.prototype.toPlainDate()")}}
+- {{jsxref("Temporal/PlainDateTime/toZonedDateTime", "Temporal.PlainDateTime.prototype.toZonedDateTime()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/tostring/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/tostring/index.md
new file mode 100644
index 000000000000000..c71ad884f5bc1c3
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/tostring/index.md
@@ -0,0 +1,75 @@
+---
+title: Temporal.PlainDateTime.prototype.toString()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/toString
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDateTime.toString
+---
+
+{{JSRef}}
+
+The **`toString()`** method of {{jsxref("Temporal.PlainDateTime")}} instances returns a string representing this date-time in the [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime#rfc_9557_format).
+
+## Syntax
+
+```js-nolint
+toString()
+toString(options)
+```
+
+### Parameters
+
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `calendarName` {{optional_inline}}
+ - : Whether to show the calendar annotation (`[u-ca=calendar_id]`) in the return value. Possible values are:
+ - `"auto"` (default)
+ - : Include the calendar annotation if the calendar is not `"iso8601"`.
+ - `"always"`
+ - : Always include the calendar annotation.
+ - `"never"`
+ - : Never include the calendar annotation. This makes the returned string not recoverable to the same {{jsxref("Temporal.PlainDateTime")}} instance, although the date value still remains the same.
+ - `"critical"`
+ - : Always include the calendar annotation, and add a critical flag: `[!u-ca=calendar_id]`. Useful when sending the string to certain systems, but not useful for Temporal itself.
+ - `fractionalSecondDigits` {{optional_inline}}
+ - : Either an integer from 0 to 9, or the string `"auto"`. The default is `"auto"`. If `"auto"`, then trailing zeros are removed from the fractional seconds. Otherwise, the fractional part of the second component contains this many digits, padded with zeros or rounded as necessary.
+ - `roundingMode` {{optional_inline}}
+ - : A string specifying how to round off fractional second digits beyond `fractionalSecondDigits`. See [`Intl.NumberFormat()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#roundingmode). Defaults to `"trunc"`.
+ - `smallestUnit` {{optional_inline}}
+ - : A string specifying the smallest unit to include in the output. Possible values are `"minute"`, `"second"`, `"millisecond"`, `"microsecond"`, and `"nanosecond"`, or their plural forms, which (except `"minute"`) are equivalent to `fractionalSecondDigits` values of `0`, `3`, `6`, `9`, respectively. If specified, then `fractionalSecondDigits` is ignored.
+
+### Return value
+
+A string in the [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime#rfc_9557_format) representing this date-time. The calendar annotation is included as specified.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+- {{jsxref("TypeError")}}
+ - : Thrown if `options` is not an object or `undefined`.
+
+## Examples
+
+### Using toString()
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-08-01T12:34:56");
+console.log(dt.toString()); // '2021-08-01T12:34:56'
+```
+
+For examples with rounding times, see {{jsxref("Temporal/PlainTime/toString", "Temporal.PlainTime.prototype.toString()")}}. For examples with displaying calendars, see {{jsxref("Temporal/PlainDate/toString", "Temporal.PlainDate.prototype.toString()")}}.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/from", "Temporal.PlainDateTime.from()")}}
+- {{jsxref("Temporal/PlainDateTime/toJSON", "Temporal.PlainDateTime.prototype.toJSON()")}}
+- {{jsxref("Temporal/PlainDateTime/toLocaleString", "Temporal.PlainDateTime.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/tozoneddatetime/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/tozoneddatetime/index.md
new file mode 100644
index 000000000000000..da74708145d4576
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/tozoneddatetime/index.md
@@ -0,0 +1,114 @@
+---
+title: Temporal.PlainDateTime.prototype.toZonedDateTime()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/toZonedDateTime
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDateTime.toZonedDateTime
+---
+
+{{JSRef}}
+
+The **`toZonedDateTime()`** method of {{jsxref("Temporal.PlainDateTime")}} instances returns a new {{jsxref("Temporal.ZonedDateTime")}} instance representing the same date-time as this plain date-time, but in the specified time zone.
+
+## Syntax
+
+```js-nolint
+toZonedDateTime(timeZone)
+toZonedDateTime(timeZone, options)
+```
+
+### Parameters
+
+- `timeZone`
+ - : Either a string or a {{jsxref("Temporal.ZonedDateTime")}} instance representing the time zone to use. If a `Temporal.ZonedDateTime` instance, its time zone is used. If a string, it can be a named time zone identifier, an offset time zone identifier, or a date-time string containing a time zone identifier or an offset (see [time zones and offsets](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets) for more information).
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `disambiguation` {{optional_inline}}
+ - : A string specifying what to do when this plain time corresponds to zero or more than one instants in the time zone, usually because of daylight saving time shifts. Possible values are `"compatible"`, `"earlier"`, `"later"`, and `"reject"`. Defaults to `"compatible"`. For more information about these values, see [ambiguity and gaps from local time to UTC time](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#ambiguity_and_gaps_from_local_time_to_utc_time).
+
+### Return value
+
+A new {{jsxref("Temporal.ZonedDateTime")}} instance representing the same date-time as this plain date-time, but in the specified time zone.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid, or if `timeZone` is not a valid time zone identifier.
+- {{jsxref("TypeError")}}
+ - : Thrown if any of the arguments are not of the expected type.
+
+## Examples
+
+### Using toZonedDateTime()
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-08-01T12:34:56");
+const zdt = dt.toZonedDateTime("America/New_York");
+console.log(zdt.toString()); // '2021-08-01T12:34:56-04:00[America/New_York]'
+
+const dt2 = Temporal.PlainDateTime.from("2021-01-01T12:34:56");
+const zdt2 = dt2.toZonedDateTime("America/New_York");
+console.log(zdt2.toString()); // '2021-01-01T12:34:56-05:00[America/New_York]'
+```
+
+### Handling ambiguous times
+
+Below, we have two wall-clock times that we want to interpret in the `America/New_York` time zone. The first one, `dtNotExist`, never existed because of a forward daylight saving time shift, so we need to choose from the times `01:05:00-05:00` or `03:05:00-04:00`. The second one, `dtAmbiguous`, appeared twice because of a backward daylight saving time shift, so we need to choose from the times `01:05:00-04:00` or `01:05:00-05:00`. For a more detailed explanation of this situation, see [ambiguity and gaps from local time to UTC time](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#ambiguity_and_gaps_from_local_time_to_utc_time).
+
+```js
+const dtNotExist = Temporal.PlainDateTime.from("2024-03-10T02:05:00");
+const dtAmbiguous = Temporal.PlainDateTime.from("2024-11-03T01:05:00");
+
+// Default: compatible
+console.log(dtNotExist.toZonedDateTime("America/New_York").toString());
+// '2024-03-10T03:05:00-04:00[America/New_York]'
+console.log(dtAmbiguous.toZonedDateTime("America/New_York").toString());
+// '2024-11-03T01:05:00-04:00[America/New_York]'
+
+// Use the earlier time for ambiguous times
+console.log(
+ dtNotExist
+ .toZonedDateTime("America/New_York", { disambiguation: "earlier" })
+ .toString(),
+);
+// '2024-03-10T01:05:00-05:00[America/New_York]'
+console.log(
+ dtAmbiguous
+ .toZonedDateTime("America/New_York", { disambiguation: "earlier" })
+ .toString(),
+);
+// '2024-11-03T01:05:00-04:00[America/New_York]'
+
+// Use the later time for ambiguous times
+console.log(
+ dtNotExist
+ .toZonedDateTime("America/New_York", { disambiguation: "later" })
+ .toString(),
+);
+// '2024-03-10T03:05:00-04:00[America/New_York]'
+console.log(
+ dtAmbiguous
+ .toZonedDateTime("America/New_York", { disambiguation: "later" })
+ .toString(),
+);
+// '2024-11-03T01:05:00-05:00[America/New_York]'
+
+// Throw an error for ambiguous times
+dtNotExist.toZonedDateTime("America/New_York", { disambiguation: "reject" });
+// RangeError: instant is ambiguous
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/toPlainDate", "Temporal.PlainDateTime.prototype.toPlainDate()")}}
+- {{jsxref("Temporal/PlainDateTime/toPlainTime", "Temporal.PlainDateTime.prototype.toPlainTime()")}}
+- {{jsxref("Temporal/ZonedDateTime/toPlainDateTime", "Temporal.ZonedDateTime.prototype.toPlainDateTime()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/until/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/until/index.md
new file mode 100644
index 000000000000000..77a1c8ab17479be
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/until/index.md
@@ -0,0 +1,73 @@
+---
+title: Temporal.PlainDateTime.prototype.until()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/until
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDateTime.until
+---
+
+{{JSRef}}
+
+The **`until()`** method of {{jsxref("Temporal.PlainDateTime")}} instances returns a new {{jsxref("Temporal.Duration")}} object representing the duration from this date-time to another date-time (in a form convertible by {{jsxref("Temporal/PlainDateTime/from", "Temporal.PlainDateTime.from()")}}). The duration is positive if the other date-time is after this date-time, and negative if before.
+
+This method does `other - this`. To do `this - other`, use the {{jsxref("Temporal/PlainDateTime/since", "since()")}} method.
+
+## Syntax
+
+```js-nolint
+until(other)
+until(other, options)
+```
+
+### Parameters
+
+- `other`
+ - : A string, an object, or a {{jsxref("Temporal.PlainDateTime")}} instance representing a date-time to subtract this date-time from. It is converted to a `Temporal.PlainDateTime` object using the same algorithm as {{jsxref("Temporal/PlainDateTime/from", "Temporal.PlainDateTime.from()")}}. It must have the same calendar as `this`.
+- `options` {{optional_inline}}
+ - : The same options as [`since()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/since#options).
+
+### Return value
+
+A new {{jsxref("Temporal.Duration")}} object representing the duration from this date-time _until_ `other`. The duration is positive if `other` is after this date-time, and negative if before.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - `other` has a different calendar than `this`.
+ - Any of the options is invalid.
+
+## Examples
+
+### Using until()
+
+```js
+let nextBilling = Temporal.PlainDateTime.from({
+ year: Temporal.Now.plainDateISO().year,
+ month: 4,
+ day: 1,
+});
+const now = Temporal.Now.plainDateTimeISO().round("second");
+if (Temporal.PlainDateTime.compare(nextBilling, now) < 0) {
+ nextBilling = nextBilling.add({ years: 1 });
+}
+const duration = now.until(nextBilling);
+console.log(`${duration.toLocaleString("en-US")} until next billing`);
+```
+
+For more examples, see [`since()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/since).
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDateTime/since", "Temporal.PlainDateTime.prototype.since()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/valueof/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/valueof/index.md
new file mode 100644
index 000000000000000..65ca25caf118d40
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/valueof/index.md
@@ -0,0 +1,64 @@
+---
+title: Temporal.PlainDateTime.prototype.valueOf()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/valueOf
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDateTime.valueOf
+---
+
+{{JSRef}}
+
+The **`valueOf()`** method of {{jsxref("Temporal.PlainDateTime")}} instances throws a {{jsxref("TypeError")}}, which prevents `Temporal.PlainDateTime` instances from being [implicitly converted to primitives](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) when used in arithmetic or comparison operations.
+
+## Syntax
+
+```js-nolint
+valueOf()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+None.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Always thrown.
+
+## Description
+
+Because both [primitive conversion](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) and [number conversion](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number#number_coercion) call `valueOf()` before `toString()`, if `valueOf()` is absent, then an expression like `dateTime1 > dateTime2` would implicitly compare them as strings, which may have unexpected results. By throwing a `TypeError`, `Temporal.PlainDateTime` instances prevent such implicit conversions. You need to explicitly convert them to strings using {{jsxref("Temporal/PlainDateTime/toString", "Temporal.PlainDateTime.prototype.toString()")}}, or use the {{jsxref("Temporal/PlainDateTime/compare", "Temporal.PlainDateTime.compare()")}} static method to compare them.
+
+## Examples
+
+### Arithmetic and comparison operations on Temporal.PlainDateTime
+
+All arithmetic and comparison operations on `Temporal.PlainDateTime` instances should use the dedicated methods or convert them to primitives explicitly.
+
+```js
+const dt1 = Temporal.PlainDateTime.from("2022-01-01T00:00:00");
+const dt2 = Temporal.PlainDateTime.from("2022-07-01T00:00:00");
+dt1 > dt2; // TypeError: can't convert PlainDateTime to primitive type
+Temporal.PlainDateTime.compare(dt1, dt2); // -1
+
+dt2 - dt1; // TypeError: can't convert PlainDateTime to primitive type
+dt2.since(dt1).toString(); // "P181D"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/toString", "Temporal.PlainDateTime.prototype.toString()")}}
+- {{jsxref("Temporal/PlainDateTime/toJSON", "Temporal.PlainDateTime.prototype.toJSON()")}}
+- {{jsxref("Temporal/PlainDateTime/toLocaleString", "Temporal.PlainDateTime.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/weekofyear/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/weekofyear/index.md
new file mode 100644
index 000000000000000..56edce75046590a
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/weekofyear/index.md
@@ -0,0 +1,43 @@
+---
+title: Temporal.PlainDateTime.prototype.weekOfYear
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/weekOfYear
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDateTime.weekOfYear
+---
+
+{{JSRef}}
+
+The **`weekOfYear`** accessor property of {{jsxref("Temporal.PlainDateTime")}} instances returns a positive integer representing the 1-based week index in the {{jsxref("Temporal/PlainDateTime/yearOfWeek", "yearOfWeek")}} of this date, or `undefined` if the calendar does not have a well-defined week system. The first week of the year is `1`. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `weekOfYear` is `undefined`. You cannot change this property directly. To create a new `Temporal.PlainDateTime` object with the desired new `weekOfYear` value, use the {{jsxref("Temporal/PlainDateTime/add", "add()")}} or {{jsxref("Temporal/PlainDateTime/subtract", "subtract()")}} method with the appropriate number of `weeks`.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/weekOfYear", "Temporal.PlainDate.prototype.weekOfYear")}}.
+
+## Examples
+
+### Using weekOfYear
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01");
+console.log(dt.weekOfYear); // 26
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDateTime/yearOfWeek", "Temporal.PlainDateTime.prototype.yearOfWeek")}}
+- {{jsxref("Temporal/PlainDateTime/dayOfWeek", "Temporal.PlainDateTime.prototype.dayOfWeek")}}
+- {{jsxref("Temporal/PlainDateTime/daysInWeek", "Temporal.PlainDateTime.prototype.daysInWeek")}}
+- {{jsxref("Temporal/PlainDateTime/daysInYear", "Temporal.PlainDateTime.prototype.daysInYear")}}
+- {{jsxref("Temporal/PlainDate/weekOfYear", "Temporal.PlainDate.prototype.weekOfYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/with/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/with/index.md
new file mode 100644
index 000000000000000..c4a170d796852de
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/with/index.md
@@ -0,0 +1,81 @@
+---
+title: Temporal.PlainDateTime.prototype.with()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/with
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDateTime.with
+---
+
+{{JSRef}}
+
+The **`with()`** method of {{jsxref("Temporal.PlainDateTime")}} instances returns a new `Temporal.PlainDateTime` object representing this date-time with some fields replaced by new values. Because all `Temporal` objects are designed to be immutable, this method essentially functions as the setter for the date-time's fields.
+
+To replace the {{jsxref("Temporal/PlainDateTime/calendarId", "calendarId")}} property, use the {{jsxref("Temporal/PlainDateTime/withCalendar", "withCalendar()")}} method instead.
+
+## Syntax
+
+```js-nolint
+with(info)
+with(info, options)
+```
+
+### Parameters
+
+- `info`
+ - : An object containing at least one of the properties recognized by {{jsxref("Temporal/PlainDateTime/from", "Temporal.PlainDateTime.from()")}} (except `calendar`): `day`, `era` and `eraYear`, `hour`, `microsecond`, `millisecond`, `minute`, `month`, `monthCode`, `nanosecond`, `second`, `year`. Unspecified properties use the values from the original date-time. You only need to provide one of `month` or `monthCode`, and one of `era` and `eraYear` or `year`, and the other will be updated accordingly.
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `overflow` {{optional_inline}}
+ - : A string specifying the behavior when a date component is out of range. Possible values are:
+ - `"constrain"` (default)
+ - : The date component is [clamped](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#invalid_date_clamping) to the valid range.
+ - `"reject"`
+ - : A {{jsxref("RangeError")}} is thrown if the date component is out of range.
+
+### Return value
+
+A new `Temporal.PlainDateTime` object, where the fields specified in `info` that are not `undefined` are replaced by the corresponding values, and the rest of the fields are copied from the original date-time.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Thrown in one of the following cases:
+ - `info` is not an object.
+ - `options` is not an object or `undefined`.
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - The provided properties that specify the same component are inconsistent.
+ - The provided non-numerical properties are not valid; for example, if `monthCode` is never a valid month code in this calendar.
+ - The provided numerical properties are out of range, and `options.overflow` is set to `"reject"`.
+
+## Examples
+
+### Using with()
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01T12:34:56");
+const newDT = dt.with({ hour: 13 });
+console.log(newDT.toString()); // "2021-07-01T13:34:56"
+const newDT2 = dt.with({ month: 2, day: 22, millisecond: 222 });
+console.log(newDT2.toString()); // "2021-02-22T13:34:56.222"
+const nextDecade = dt.with({ year: dt.year + 10 });
+console.log(nextDecade.toString()); // "2031-07-01T13:34:56"
+```
+
+For more examples, see the documentation for the individual properties that can be set using `with()`.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/withCalendar", "Temporal.PlainDateTime.prototype.withCalendar()")}}
+- {{jsxref("Temporal/PlainDateTime/withPlainTime", "Temporal.PlainDateTime.prototype.withPlainTime()")}}
+- {{jsxref("Temporal/PlainDateTime/from", "Temporal.PlainDateTime.from()")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/withcalendar/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/withcalendar/index.md
new file mode 100644
index 000000000000000..5afa8bf44ed3c1d
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/withcalendar/index.md
@@ -0,0 +1,61 @@
+---
+title: Temporal.PlainDateTime.prototype.withCalendar()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/withCalendar
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDateTime.withCalendar
+---
+
+{{JSRef}}
+
+The **`withCalendar()`** method of {{jsxref("Temporal.PlainDateTime")}} instances returns a new `Temporal.PlainDateTime` object representing this date-time interpreted in the new calendar system. Because all `Temporal` objects are designed to be immutable, this method essentially functions as the setter for the date-time's {{jsxref("Temporal/PlainDateTime/calendarId", "calendarId")}} property.
+
+To replace the date-time component properties, use the {{jsxref("Temporal/PlainDateTime/with", "with()")}} method instead.
+
+## Syntax
+
+```js-nolint
+withCalendar(calendar)
+```
+
+### Parameters
+
+- `calendar`
+ - : A string that corresponds to the {{jsxref("Temporal/PlainDateTime/calendarId", "calendarId")}} property.
+
+### Return value
+
+A new `Temporal.PlainDateTime` object, representing the date-time specified by the original `PlainDateTime`, interpreted in the new calendar system.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Thrown if `calendar` is not a string.
+- {{jsxref("RangeError")}}
+ - : Thrown if `calendar` is not a valid calendar identifier.
+
+## Examples
+
+### Using withCalendar()
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01T12:34:56");
+const newDT = dt.withCalendar("islamic");
+console.log(newDT.toLocaleString("en-US", { calendar: "islamic" }));
+// 11/21/1442 AH, 12:34:56 PM
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/withPlainTime", "Temporal.PlainDateTime.prototype.withPlainTime()")}}
+- {{jsxref("Temporal/PlainDateTime/from", "Temporal.PlainDateTime.from()")}}
+- {{jsxref("Temporal/PlainDateTime/calendarId", "Temporal.PlainDateTime.prototype.calendarId")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/withplaintime/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/withplaintime/index.md
new file mode 100644
index 000000000000000..8af67ab0ff5834e
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/withplaintime/index.md
@@ -0,0 +1,65 @@
+---
+title: Temporal.PlainDateTime.prototype.withPlainTime()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/withPlainTime
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainDateTime.withPlainTime
+---
+
+{{JSRef}}
+
+The **`withPlainTime()`** method of {{jsxref("Temporal.PlainDateTime")}} instances returns a new `Temporal.PlainDateTime` object representing this date-time with the time part entirely replaced by the new time (in a form convertible by {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}})
+
+This method will replace all time properties, defaulting to `0` where properties are unspecified. If you only want to replace some of the time properties, use the {{jsxref("Temporal/PlainDateTime/with", "with()")}} method instead.
+
+## Syntax
+
+```js-nolint
+withPlainTime()
+withPlainTime(plainTime)
+```
+
+### Parameters
+
+- `plainTime` {{optional_inline}}
+ - : A string, an object, or a {{jsxref("Temporal.PlainTime")}} instance representing the new time. It is converted to a `Temporal.PlainTime` object using the same algorithm as {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}. If not specified, the time part is set to `00:00:00`.
+
+### Return value
+
+A new `Temporal.PlainDateTime` object, with the date part copied from the original date-time and the time part replaced by the new time.
+
+## Examples
+
+### Using withPlainTime()
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01T12:34:56");
+
+// You can pass a string
+const newDT = dt.withPlainTime("13:45:00");
+console.log(newDT.toString()); // "2021-07-01T13:45:00"
+
+// You can only specify some time properties, and the rest default to 0;
+// for the with() method, they would be copied from the original date-time
+const newDT2 = dt.withPlainTime({ hour: 13 });
+console.log(newDT2.toString()); // "2021-07-01T13:00:00"
+
+// You can pass nothing to set the time to midnight
+const newDT3 = dt.withPlainTime();
+console.log(newDT3.toString()); // "2021-07-01T00:00:00"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/withCalendar", "Temporal.PlainDateTime.prototype.withCalendar()")}}
+- {{jsxref("Temporal/PlainDateTime/toPlainTime", "Temporal.PlainDateTime.prototype.toPlainTime()")}}
+- {{jsxref("Temporal/PlainDateTime/from", "Temporal.PlainDateTime.from()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/year/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/year/index.md
new file mode 100644
index 000000000000000..f71d4e560dbac4e
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/year/index.md
@@ -0,0 +1,44 @@
+---
+title: Temporal.PlainDateTime.prototype.year
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/year
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDateTime.year
+---
+
+{{JSRef}}
+
+The **`year`** accessor property of {{jsxref("Temporal.PlainDateTime")}} instances returns an integer representing the number of years of this date relative to the start of a calendar-specific epoch year. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `year` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainDateTime/with", "with()")}} method to create a new `Temporal.PlainDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/year", "Temporal.PlainDate.prototype.year")}}.
+
+## Examples
+
+### Using year
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01"); // ISO 8601 calendar
+console.log(dt.year); // 2021
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDateTime/era", "Temporal.PlainDateTime.prototype.era")}}
+- {{jsxref("Temporal/PlainDateTime/eraYear", "Temporal.PlainDateTime.prototype.eraYear")}}
+- {{jsxref("Temporal/PlainDateTime/yearOfWeek", "Temporal.PlainDateTime.prototype.yearOfWeek")}}
+- {{jsxref("Temporal/PlainDateTime/month", "Temporal.PlainDateTime.prototype.month")}}
+- {{jsxref("Temporal/PlainDateTime/day", "Temporal.PlainDateTime.prototype.day")}}
+- {{jsxref("Temporal/PlainDate/year", "Temporal.PlainDate.prototype.year")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/yearofweek/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/yearofweek/index.md
new file mode 100644
index 000000000000000..2a1a1ca37bc9965
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaindatetime/yearofweek/index.md
@@ -0,0 +1,35 @@
+---
+title: Temporal.PlainDateTime.prototype.yearOfWeek
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime/yearOfWeek
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainDateTime.yearOfWeek
+---
+
+{{JSRef}}
+
+The **`yearOfWeek`** accessor property of {{jsxref("Temporal.PlainDateTime")}} instances returns an integer representing the year to be paired with the {{jsxref("Temporal/PlainDateTime/weekOfYear", "weekOfYear")}} of this date, or `undefined` if the calendar does not have a well-defined week system. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `yearOfWeek` is `undefined`. You cannot change this property directly.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/yearOfWeek", "Temporal.PlainDate.prototype.yearOfWeek")}}.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/PlainDateTime/with", "Temporal.PlainDateTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainDateTime/subtract", "Temporal.PlainDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainDateTime/year", "Temporal.PlainDateTime.prototype.year")}}
+- {{jsxref("Temporal/PlainDateTime/weekOfYear", "Temporal.PlainDateTime.prototype.weekOfYear")}}
+- {{jsxref("Temporal/PlainDateTime/dayOfWeek", "Temporal.PlainDateTime.prototype.dayOfWeek")}}
+- {{jsxref("Temporal/PlainDateTime/daysInWeek", "Temporal.PlainDateTime.prototype.daysInWeek")}}
+- {{jsxref("Temporal/PlainDateTime/daysInYear", "Temporal.PlainDateTime.prototype.daysInYear")}}
+- {{jsxref("Temporal/PlainDate/yearOfWeek", "Temporal.PlainDate.prototype.yearOfWeek")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/calendarid/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/calendarid/index.md
new file mode 100644
index 000000000000000..2d5bdc9c7ca0033
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/calendarid/index.md
@@ -0,0 +1,55 @@
+---
+title: Temporal.PlainMonthDay.prototype.calendarId
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainMonthDay/calendarId
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainMonthDay.calendarId
+---
+
+{{JSRef}}
+
+The **`calendarId`** accessor property of {{jsxref("Temporal.PlainMonthDay")}} instances returns a string representing the [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars) used to interpret the internal ISO 8601 date.
+
+For a list of commonly supported values, see {{jsxref("Intl/Locale/getCalendars", "Intl.Locale.prototype.getCalendars()")}}.
+
+The set accessor of `calendarId` is `undefined`. You cannot change this property directly. There's no obvious way to create a new `Temporal.PlainMonthDay` object with a different calendar that represents the same month-day, so you need to convert it to a {{jsxref("Temporal.PlainDate")}} object first using {{jsxref("Temporal/PlainMonthDay/toPlainDate", "toPlainDate()")}}, change the calendar, and then convert it back.
+
+## Examples
+
+### Using calendarId
+
+```js
+const md = Temporal.PlainMonthDay.from("07-01");
+console.log(md.calendarId); // "iso8601"; default
+
+const md2 = Temporal.PlainMonthDay.from("2021-07-01[u-ca=chinese]");
+console.log(md2.calendarId); // "chinese"
+```
+
+### Changing calendarId
+
+```js
+const md = Temporal.PlainMonthDay.from("07-01");
+const newMD = md
+ .toPlainDate({ year: 2021 })
+ .withCalendar("chinese")
+ .toPlainMonthDay();
+console.log(newMD.monthCode, newMD.day); // "M05" 22
+
+const newMD2 = md
+ .toPlainDate({ year: 2022 })
+ .withCalendar("chinese")
+ .toPlainMonthDay();
+console.log(newMD2.monthCode, newMD2.day); // "M06" 3
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainMonthDay")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/day/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/day/index.md
new file mode 100644
index 000000000000000..fde9d94f15bc797
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/day/index.md
@@ -0,0 +1,79 @@
+---
+title: Temporal.PlainMonthDay.prototype.day
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainMonthDay/day
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainMonthDay.day
+---
+
+{{JSRef}}
+
+The **`day`** accessor property of {{jsxref("Temporal.PlainMonthDay")}} instances returns a positive integer representing the 1-based day index in the month of this date, which is the same day number you would see on a calendar. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `day` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainMonthDay/with", "with()")}} method to create a new `Temporal.PlainMonthDay` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/day", "Temporal.PlainDate.prototype.day")}}.
+
+## Examples
+
+### Using day
+
+```js
+const md = Temporal.PlainMonthDay.from("07-01"); // ISO 8601 calendar
+console.log(md.day); // 1
+
+const md2 = Temporal.PlainMonthDay.from("2021-07-01[u-ca=chinese]");
+console.log(md2.day); // 22; it is May 22 in the Chinese calendar
+```
+
+### Changing day
+
+```js
+const md = Temporal.PlainMonthDay.from("07-01");
+const newMD = md.with({ day: 15 });
+console.log(newMD.toString()); // 07-15
+```
+
+By default, `with()` constrains the day to the range of valid values. So you can use `{ day: 1 }` to set the day to the first day of the month, even if the first day does not have the number `1`. Similarly, the following will set the day to the last day of the month:
+
+```js
+const md = Temporal.PlainMonthDay.from("07-01");
+const lastMD = md.with({ day: Number.MAX_VALUE }); // 07-31
+```
+
+For the purpose of `PlainMonthDay`, February is always considered to have 29 days.
+
+```js
+const md = Temporal.PlainMonthDay.from("02-01");
+const lastMD = md.with({ day: Number.MAX_VALUE }); // 02-29
+console.log(lastMD.day); // 29
+```
+
+For other calendars, as long as there exists a year in which the month-day is valid, the month-day is considered valid, and the underlying reference year may therefore change. For example:
+
+```js
+const md = Temporal.PlainMonthDay.from({
+ monthCode: "M02",
+ day: 29,
+ calendar: "hebrew",
+});
+console.log(md.toString()); // 1972-11-06[u-ca=hebrew]
+console.log(md.toLocaleString("en-US", { calendar: "hebrew" })); // 29 Heshvan
+const lastMD = md.with({ day: Number.MAX_VALUE });
+// 30 Heshvan does not exist in 1972, so the reference year changes to 1971
+console.log(lastMD.toString()); // 1971-11-18[u-ca=hebrew]
+console.log(lastMD.toLocaleString("en-US", { calendar: "hebrew" })); // 30 Heshvan
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainMonthDay")}}
+- {{jsxref("Temporal/PlainMonthDay/with", "Temporal.PlainMonthDay.prototype.with()")}}
+- {{jsxref("Temporal/PlainMonthDay/monthCode", "Temporal.PlainMonthDay.prototype.monthCode")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/equals/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/equals/index.md
new file mode 100644
index 000000000000000..4a7bb6fef46ce71
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/equals/index.md
@@ -0,0 +1,55 @@
+---
+title: Temporal.PlainMonthDay.prototype.equals()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainMonthDay/equals
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainMonthDay.equals
+---
+
+{{JSRef}}
+
+The **`equals()`** method of {{jsxref("Temporal.PlainMonthDay")}} instances returns `true` if this month-day is equivalent in value to another month-day (in a form convertible by {{jsxref("Temporal/PlainMonthDay/from", "Temporal.PlainMonthDay.from()")}}), and `false` otherwise. They are compared both by their underlying ISO date values and their calendars.
+
+> **Note:** `PlainMonthDay` objects keep track of a reference ISO year, which is also used in the comparison. This year is automatically set when using the {{jsxref("Temporal/PlainMonthDay/from", "Temporal.PlainMonthDay.from()")}} method, but can be set manually using the {{jsxref("Temporal/PlainMonthDay/PlainMonthDay", "Temporal.PlainMonthDay()")}} constructor, causing two equivalent month-days to be considered different if they have different reference years. For this reason, you should avoid using the constructor directly and prefer the `from()` method.
+
+## Syntax
+
+```js-nolint
+equals(other)
+```
+
+### Parameters
+
+- `other`
+ - : A string, an object, or a {{jsxref("Temporal.PlainMonthDay")}} instance representing the other month-day to compare. It is converted to a `Temporal.PlainMonthDay` object using the same algorithm as {{jsxref("Temporal/PlainMonthDay/from", "Temporal.PlainMonthDay.from()")}}.
+
+### Return value
+
+`true` if this month-day is equal to `other` both in their date value and their calendar, `false` otherwise.
+
+## Examples
+
+### Using equals()
+
+```js
+const md1 = Temporal.PlainMonthDay.from("2021-08-01");
+const md2 = Temporal.PlainMonthDay.from({ year: 2020, month: 8, day: 1 }); // Year doesn't matter
+console.log(md1.equals(md2)); // true
+
+const md3 = Temporal.PlainMonthDay.from("2021-08-01[u-ca=japanese]");
+console.log(md1.equals(md3)); // false
+
+const md4 = Temporal.PlainMonthDay.from("2021-08-02");
+console.log(md1.equals(md4)); // false
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainMonthDay")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/from/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/from/index.md
new file mode 100644
index 000000000000000..ab1b538fad4ccf8
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/from/index.md
@@ -0,0 +1,179 @@
+---
+title: Temporal.PlainMonthDay.from()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainMonthDay/from
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.PlainMonthDay.from
+---
+
+{{JSRef}}
+
+The **`Temporal.PlainMonthDay.from()`** static method creates a new `Temporal.PlainMonthDay` object from another `Temporal.PlainMonthDay` object, an object with month and day properties, or an [RFC 9557](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainMonthDay#rfc_9557_format) string.
+
+## Syntax
+
+```js-nolint
+Temporal.PlainMonthDay.from(info)
+Temporal.PlainMonthDay.from(info, options)
+```
+
+### Parameters
+
+- `info`
+
+ - : One of the following:
+
+ - A {{jsxref("Temporal.PlainMonthDay")}} instance, which creates a copy of the instance.
+ - An [RFC 9557](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainMonthDay#rfc_9557_format) string containing a date and optionally a calendar. If the calendar is not `iso8601`, a year is required.
+ - An object containing the following properties (in the order they are retrieved and validated):
+
+ - `calendar` {{optional_inline}}
+ - : A string that corresponds to the {{jsxref("Temporal/PlainMonthDay/calendarId", "calendarId")}} property. Defaults to `"iso8601"`. All other properties are interpreted in this calendar system (unlike the {{jsxref("Temporal/PlainMonthDay/PlainMonthDay", "Temporal.PlainMonthDay()")}} constructor, which interprets the values in the ISO calendar system).
+ - `day`
+ - : An integer that corresponds to the {{jsxref("Temporal/PlainMonthDay/day", "day")}} property. Must be positive regardless of the `overflow` option.
+ - `era` and `eraYear`
+ - : A string and an integer that can be used instead of `year`. See {{jsxref("Temporal/PlainDate/era", "era")}} and {{jsxref("Temporal/PlainDate/eraYear", "eraYear")}} of `PlainDate`. Are only used if the calendar system has eras. `era` and `eraYear` must be provided simultaneously. If `month` is specified, at least one of `era`+`eraYear` or `year` must be provided. If all of `era`, `eraYear`, and `year` are provided, they must be consistent.
+ - `month`
+ - : A positive integer that can be used instead of `monthCode`. See {{jsxref("Temporal/PlainDate/month", "month")}} of `PlainDate`. Must be positive regardless of the `overflow` option. If `month` is provided, and the calendar is not `iso8601`, then `year` (or `era` + `eraYear` as a substitution) must be provided too, because the same `month` may map to multiple possible `monthCode` values in different years. At least one of `month` or `monthCode` must be provided. If both `month` and `monthCode` are provided, they must be consistent.
+ - `monthCode`
+ - : Corresponds to the {{jsxref("Temporal/PlainMonthDay/monthCode", "monthCode")}} property. At least one of `month` or `monthCode` must be provided. If both `month` and `monthCode` are provided, they must be consistent.
+ - `year`
+ - : An integer used to disambiguate `month` if provided, because for some calendars, the same `month` can mean different `monthCode` in different years. See {{jsxref("Temporal/PlainDate/year", "year")}} of `PlainDate`. If a year is provided, then the `overflow` option validates the month-day in the given year, not just any year. If `month` is specified, at least one of `era`+`eraYear` or `year` must be provided. If all of `era`, `eraYear`, and `year` are provided, they must be consistent.
+
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `overflow` {{optional_inline}}
+ - : A string specifying the behavior when a date component is out of range (when using the object `info`). Possible values are:
+ - `"constrain"` (default)
+ - : The date component is [clamped](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#invalid_date_clamping) to the valid range.
+ - `"reject"`
+ - : A {{jsxref("RangeError")}} is thrown if the date component is out of range.
+
+### Return value
+
+A new `Temporal.PlainMonthDay` object, representing the month and day specified by `info` in the specified `calendar`.
+
+Each `PlainMonthDay` stores a whole ISO 8601 date internally, which has the same month-day in the target calendar as what's exposed. The reference year is visible when stringifying with {{jsxref("Temporal/PlainMonthDay/toString", "toString()")}}, which outputs an ISO date. The reference year is chosen arbitrarily but consistently (that is, every `(monthCode, day)` pair always maps to the same ISO reference year). It does not use the year provided in the input. Instead, the reference year is chosen by finding the latest date before December 31, 1972 that has the same month-day in the target calendar, or the earliest date after December 31, 1972 if no such date exists.
+
+For example, for Gregorian-derived calendars, the reference year is 1972. For the Hebrew calendar, the reference year is 1972 in the Gregorian calendar, but if the month is Adar I (`M05L`), which is a leap month, the reference year is 1970 (5730 in Hebrew calendar) instead, because the next leap year is 1973 (5733 in Hebrew calendar), which is after 1972.
+
+This reference year canonicalization ensures that {{jsxref("Temporal/PlainMonthDay/equals", "equals()")}} can directly compare the underlying ISO dates without extra computation.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Thrown in one of the following cases:
+ - `info` is not an object or a string.
+ - `options` is not an object or `undefined`.
+ - The provided properties are insufficient to unambiguously determine a date. You usually need to provide a `year` (or `era` and `eraYear`), a `month`, and a `day`, or a `monthCode` and a `day`.
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - The provided properties that specify the same component are inconsistent.
+ - The provided non-numerical properties are not valid; for example, if `monthCode` is never a valid month code in this calendar.
+ - The provided numerical properties are out of range, and `options.overflow` is set to `"reject"`.
+
+## Examples
+
+### Creating a PlainMonthDay from an object
+
+```js
+// Month code + day
+const md = Temporal.PlainMonthDay.from({ monthCode: "M05", day: 2 });
+console.log(md.toString()); // 05-02
+
+// Month + day (only for ISO calendar)
+const md2 = Temporal.PlainMonthDay.from({ month: 7, day: 1 });
+console.log(md2.toString()); // 07-01
+
+// Year + month + day
+const md3 = Temporal.PlainMonthDay.from({ year: 2021, month: 7, day: 1 });
+console.log(md3.toString()); // 07-01
+
+// Year + month + day in a different calendar (where year is required)
+const md4 = Temporal.PlainMonthDay.from({
+ year: 2021,
+ month: 7,
+ day: 1,
+ calendar: "hebrew",
+});
+console.log(md4.toString()); // 1972-03-16[u-ca=hebrew]
+
+// Month code + day in a different calendar
+const md5 = Temporal.PlainMonthDay.from({
+ monthCode: "M05L",
+ day: 1,
+ calendar: "hebrew",
+});
+console.log(md5.toString()); // 1970-02-07[u-ca=hebrew]
+```
+
+### Controlling overflow behavior
+
+By default, out-of-range values are clamped to the valid range. A month-day without an explicit reference year is valid as long as there exists one year in which it is valid, even if it doesn't appear every year. If year, month, and day are all given, then the rules for mapping to a valid month-day could be complex and specific to each calendar, but here's the usual behavior:
+
+- If the `year`/`month` combination is invalid, the `month` is clamped to obtain a valid `monthCode` in the year.
+- If the `year`/`monthCode` combination is invalid, a different year is chosen to keep the `monthCode` as-is.
+- The `day` is clamped in the given year-month to obtain a valid month-day.
+
+This is slightly different from usual [date clamping](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#invalid_date_clamping), which favors the year over the month code.
+
+```js
+// Month always out of range
+const md1 = Temporal.PlainMonthDay.from({ month: 13, day: 1 });
+console.log(md1.toString()); // 12-01
+
+// Month out of range for the specific year: 5732 is not a Hebrew leap year,
+// so month is clamped to 12 to resolve to a valid monthCode
+const md2 = Temporal.PlainMonthDay.from({
+ year: 5732,
+ month: 13,
+ day: 1,
+ calendar: "hebrew",
+});
+console.log(md2.toLocaleString("en-US", { calendar: "hebrew" })); // 1 Elul
+const underlyingDate = Temporal.PlainDate.from(md2.toString());
+console.log(underlyingDate.year, underlyingDate.month); // 5732 12
+
+// Month code exists but not for the specific year: 5731 is not a Hebrew leap year,
+// so a different year is chosen to keep the monthCode as M05L
+const md3 = Temporal.PlainMonthDay.from({
+ year: 5731,
+ monthCode: "M05L",
+ day: 1,
+ calendar: "hebrew",
+});
+console.log(md3.toLocaleString("en-US", { calendar: "hebrew" })); // 1 Adar I
+const underlyingDate2 = Temporal.PlainDate.from(md3.toString());
+console.log(underlyingDate2.year, underlyingDate2.monthCode); // 5730 M05L
+
+// Day always out of range
+const md4 = Temporal.PlainMonthDay.from({ month: 2, day: 30 });
+console.log(md4.toString()); // 02-29
+
+// Day out of range for the specific year-month
+const md5 = Temporal.PlainMonthDay.from({ year: 2021, month: 2, day: 29 });
+console.log(md5.toString()); // 02-28
+```
+
+You can change this behavior to throw an error instead:
+
+```js
+Temporal.PlainMonthDay.from(
+ { year: 2021, month: 13, day: 1 },
+ { overflow: "reject" },
+);
+// RangeError: date value "month" not in 1..12: 13
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainMonthDay")}}
+- {{jsxref("Temporal/PlainMonthDay/PlainMonthDay", "Temporal.PlainMonthDay()")}}
+- {{jsxref("Temporal/PlainMonthDay/with", "Temporal.PlainMonthDay.prototype.with()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/index.md
new file mode 100644
index 000000000000000..691fc103accff05
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/index.md
@@ -0,0 +1,112 @@
+---
+title: Temporal.PlainMonthDay
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainMonthDay
+page-type: javascript-class
+browser-compat: javascript.builtins.Temporal.PlainMonthDay
+---
+
+{{JSRef}}
+
+The **`Temporal.PlainMonthDay`** object represents the month and day of a calendar date, without a year or time zone; for example, an event on a calendar that recurs every year and happens during the whole day. It is fundamentally represented as an ISO 8601 calendar date, with year, month, and day fields, and an associated calendar system. The year is used to disambiguate the month-day in non-ISO calendar systems.
+
+## Description
+
+A `PlainMonthDay` is essentially the month-day part of a {{jsxref("Temporal.PlainDate")}} object, without the year. Because the meaning of a month-day can change from year to year (for example, whether it exists, or what the month-day of the next day is), this object doesn't provide much functionality on its own, such as comparison, addition, or subtraction. It doesn't even have a {{jsxref("Temporal/PlainDate/month", "month")}} property, because the month index is not meaningful without a year (for example, two months from two years with the same index can have different names in the case of leap months).
+
+### RFC 9557 format
+
+`PlainMonthDay` objects can be serialized and parsed using the [RFC 9557](https://datatracker.ietf.org/doc/html/rfc9557) format, an extension to the [ISO 8601 / RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) format. The string has the following form (spaces are only for readability and should not be present in the actual string):
+
+```plain
+YYYY-MM-DD [u-ca=calendar_id]
+```
+
+- `YYYY` {{optional_inline}}
+ - : Either a four-digit number, or a six-digit number with a `+` or `-` sign. It is required for non-ISO calendars, and optional otherwise. If omitted, you can either replace `YYYY-` with `--` (so the string looks like `--MM-DD` or `--MMDD`), or omit the `YYYY-` part entirely (so the string looks like `MM-DD` or `MMDD`). Note that the reference year actually stored may be different from the one you provide, but the represented month-day is the same. See {{jsxref("Temporal/PlainMonthDay/from", "Temporal.PlainMonthDay.from()")}} for more information.
+- `MM`
+ - : A two-digit number from `01` to `12`.
+- `DD`
+ - : A two-digit number from `01` to `31`. The `YYYY`, `MM`, and `DD` components can be separated by `-` or nothing.
+- `[u-ca=calendar_id]` {{optional_inline}}
+ - : Replace `calendar_id` with the calendar to use. May have a _critical flag_ by prefixing the key with `!`: e.g., `[!u-ca=iso8601]`. This flag generally tells other systems that it cannot be ignored if they don't support it. The `Temporal` parser will throw an error if the annotations contain two or more calendar annotations and one of them is critical. Defaults to `[u-ca=iso8601]`. Note that the `YYYY-MM-DD` is always interpreted as an ISO 8601 calendar date and then converted to the specified calendar.
+
+As an input, you may optionally include the time, offset, and time zone identifier, in the same format as [`PlainDateTime`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime#rfc_9557_format), but they will be ignored. Other annotations in the `[key=value]` format are also ignored, and they must not have the critical flag.
+
+When serializing, you can configure whether to display the calendar ID, and whether to add a critical flag for it.
+
+## Constructor
+
+- {{jsxref("Temporal/PlainMonthDay/PlainMonthDay", "Temporal.PlainMonthDay()")}}
+ - : Creates a new `Temporal.PlainMonthDay` object by directly supplying the underlying data.
+
+## Static methods
+
+- {{jsxref("Temporal/PlainMonthDay/from", "Temporal.PlainMonthDay.from()")}}
+ - : Creates a new `Temporal.PlainMonthDay` object from another `Temporal.PlainMonthDay` object, an object with month and day properties, or an [RFC 9557](#rfc_9557_format) string.
+
+## Instance properties
+
+These properties are defined on `Temporal.PlainMonthDay.prototype` and shared by all `Temporal.PlainMonthDay` instances.
+
+- {{jsxref("Temporal/PlainMonthDay/calendarId", "Temporal.PlainMonthDay.prototype.calendarId")}}
+ - : Returns a string representing the [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars) used to interpret the internal ISO 8601 date.
+- {{jsxref("Object/constructor", "Temporal.PlainMonthDay.prototype.constructor")}}
+ - : The constructor function that created the instance object. For `Temporal.PlainMonthDay` instances, the initial value is the {{jsxref("Temporal/PlainMonthDay/PlainMonthDay", "Temporal.PlainMonthDay()")}} constructor.
+- {{jsxref("Temporal/PlainMonthDay/day", "Temporal.PlainMonthDay.prototype.day")}}
+ - : Returns a positive integer representing the 1-based day index in the month of this date, which is the same day number you would see on a calendar. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Generally starts at 1 and is continuous, but not always.
+- {{jsxref("Temporal/PlainMonthDay/monthCode", "Temporal.PlainMonthDay.prototype.monthCode")}}
+ - : Returns a calendar-specific string representing the month of this date. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Usually it is `M` plus a two-digit month number. For leap months, it is the previous month's code followed by `L`. If the leap month is the first month of the year, the code is `M00L`.
+- `Temporal.PlainMonthDay.prototype[Symbol.toStringTag]`
+ - : The initial value of the [`[Symbol.toStringTag]`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) property is the string `"Temporal.PlainMonthDay"`. This property is used in {{jsxref("Object.prototype.toString()")}}.
+
+## Instance methods
+
+- {{jsxref("Temporal/PlainMonthDay/equals", "Temporal.PlainMonthDay.prototype.equals()")}}
+ - : Returns `true` if this month-day is equivalent in value to another month-day (in a form convertible by {{jsxref("Temporal/PlainMonthDay/from", "Temporal.PlainMonthDay.from()")}}), and `false` otherwise. They are compared both by their date values and their calendars.
+- {{jsxref("Temporal/PlainMonthDay/toJSON", "Temporal.PlainMonthDay.prototype.toJSON()")}}
+ - : Returns a string representing this month-day in the same [RFC 9557 format](#rfc_9557_format) as calling {{jsxref("Temporal/PlainMonthDay/toString", "toString()")}}. Intended to be implicitly called by {{jsxref("JSON.stringify()")}}.
+- {{jsxref("Temporal/PlainMonthDay/toLocaleString", "Temporal.PlainMonthDay.prototype.toLocaleString()")}}
+ - : Returns a string with a language-sensitive representation of this month-day.
+- {{jsxref("Temporal/PlainMonthDay/toPlainDate", "Temporal.PlainMonthDay.prototype.toPlainDate()")}}
+ - : Returns a new {{jsxref("Temporal.PlainDate")}} object representing this month-day and a supplied year in the same calendar system.
+- {{jsxref("Temporal/PlainMonthDay/toString", "Temporal.PlainMonthDay.prototype.toString()")}}
+ - : Returns a string representing this month-day in the [RFC 9557 format](#rfc_9557_format).
+- {{jsxref("Temporal/PlainMonthDay/valueOf", "Temporal.PlainMonthDay.prototype.valueOf()")}}
+ - : Throws a {{jsxref("TypeError")}}, which prevents `Temporal.PlainMonthDay` instances from being [implicitly converted to primitives](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) when used in arithmetic or comparison operations.
+- {{jsxref("Temporal/PlainMonthDay/with", "Temporal.PlainMonthDay.prototype.with()")}}
+ - : Returns a new `Temporal.PlainMonthDay` object representing this month-day with some fields replaced by new values.
+
+## Examples
+
+### Getting the next occurrence of a festival
+
+```js
+// Chinese New Years are on 1/1 in the Chinese calendar
+const chineseNewYear = Temporal.PlainMonthDay.from({
+ monthCode: "M01",
+ day: 1,
+ calendar: "chinese",
+});
+const currentYear = Temporal.Now.plainDateISO().withCalendar("chinese").year;
+let nextCNY = chineseNewYear.toPlainDate({ year: currentYear });
+if (Temporal.PlainDate.compare(nextCNY, Temporal.Now.plainDateISO()) <= 0) {
+ nextCNY = nextCNY.add({ years: 1 });
+}
+console.log(
+ `The next Chinese New Year is on ${nextCNY.withCalendar("iso8601").toLocaleString()}`,
+);
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal")}}
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal.PlainYearMonth")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/monthcode/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/monthcode/index.md
new file mode 100644
index 000000000000000..37b4bbb306dffed
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/monthcode/index.md
@@ -0,0 +1,71 @@
+---
+title: Temporal.PlainMonthDay.prototype.monthCode
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainMonthDay/monthCode
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainMonthDay.monthCode
+---
+
+{{JSRef}}
+
+The **`monthCode`** accessor property of {{jsxref("Temporal.PlainMonthDay")}} instances returns a calendar-specific string representing the month of this date. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+Usually it is `M` plus a two-digit month number. For leap months, it is the previous month's code followed by `L` (even if it's conceptually a derivative of the following month; for example, in the Hebrew calendar, Adar I has code `M05L` but Adar II has code `M06`). If the leap month is the first month of the year, the code is `M00L`.
+
+Because {{jsxref("Temporal/PlainDate/month", "month")}} is an index within a year, but `PlainMonthDay` doesn't have a year, there's no `month` property for `PlainMonthDay`. Therefore, `monthCode` is used to represent the month in a way that is independent of the year.
+
+The set accessor of `monthCode` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainMonthDay/with", "with()")}} method to create a new `Temporal.PlainMonthDay` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/monthCode", "Temporal.PlainDate.prototype.monthCode")}}.
+
+## Examples
+
+### Using monthCode
+
+```js
+const md = Temporal.PlainMonthDay.from("07-01"); // ISO 8601 calendar
+console.log(md.monthCode); // "M07"
+
+const md2 = Temporal.PlainMonthDay.from("2021-05-01[u-ca=chinese]");
+console.log(md2.monthCode); // "M03"
+
+const md3 = Temporal.PlainMonthDay.from("2023-04-01[u-ca=chinese]");
+console.log(md3.monthCode); // "M02L"
+```
+
+### Changing monthCode
+
+```js
+const md = Temporal.PlainMonthDay.from("07-01");
+const newMD = md.with({ monthCode: "M03" });
+console.log(newMD.toString()); // 03-01
+```
+
+For other calendars, as long as there exists a year in which the month-day is valid, the month-day is considered valid, and the underlying reference year may therefore change. For example:
+
+```js
+const md = Temporal.PlainMonthDay.from({
+ monthCode: "M02",
+ day: 30,
+ calendar: "hebrew",
+});
+console.log(md.toString()); // 1971-11-18[u-ca=hebrew]
+console.log(md.toLocaleString("en-US", { calendar: "hebrew" })); // 30 Heshvan
+// 30 Heshvan only exists in 1971, but this year is not a leap year
+const newMD = md.with({ monthCode: "M05L" });
+console.log(newMD.toString()); // 1970-03-08[u-ca=hebrew]
+console.log(newMD.toLocaleString("en-US", { calendar: "hebrew" })); // 30 Adar I
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainMonthDay")}}
+- {{jsxref("Temporal/PlainMonthDay/with", "Temporal.PlainMonthDay.prototype.with()")}}
+- {{jsxref("Temporal/PlainMonthDay/day", "Temporal.PlainMonthDay.prototype.day")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/plainmonthday/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/plainmonthday/index.md
new file mode 100644
index 000000000000000..33215595101707b
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/plainmonthday/index.md
@@ -0,0 +1,89 @@
+---
+title: Temporal.PlainMonthDay()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainMonthDay/PlainMonthDay
+page-type: javascript-constructor
+browser-compat: javascript.builtins.Temporal.PlainMonthDay.PlainMonthDay
+---
+
+{{JSRef}}
+
+The **`Temporal.PlainMonthDay()`** constructor creates {{jsxref("Temporal.PlainMonthDay")}} objects.
+
+This constructor allows you to create instances by directly supplying the underlying data. Like all other `Temporal` classes, you should usually construct `Temporal.PlainMonthDay` objects using the {{jsxref("Temporal/PlainMonthDay/from", "Temporal.PlainMonthDay.from()")}} static method, which can handle a variety of input types.
+
+## Syntax
+
+```js-nolint
+new Temporal.PlainMonthDay(month, day)
+new Temporal.PlainMonthDay(month, day, calendar)
+new Temporal.PlainMonthDay(month, day, calendar, referenceYear)
+```
+
+> **Note:** `Temporal.PlainMonthDay()` can only be constructed with [`new`](/en-US/docs/Web/JavaScript/Reference/Operators/new). Attempting to call it without `new` throws a {{jsxref("TypeError")}}.
+
+> [!WARNING]
+> Avoid using the `calendar` and `referenceYear` parameters, because {{jsxref("Temporal/PlainMonthDay/equals", "equals()")}} will consider the reference year for equality, causing two equivalent month-days to be considered different if they have different reference years. To create a `Temporal.PlainMonthDay` object with a non-ISO calendar, use the {{jsxref("Temporal/PlainMonthDay/from", "Temporal.PlainMonthDay.from()")}} static method.
+
+### Parameters
+
+- `month`
+ - : A number, truncated to an integer, representing the month in the ISO calendar system.
+- `day`
+ - : A number, truncated to an integer, representing the day of the month in the ISO calendar system.
+- `calendar` {{optional_inline}}
+ - : A string representing the [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars) to use. Note that irrespective of the `calendar`, the `referenceYear`, `month`, and `day` must be in the ISO 8601 calendar system. Defaults to `"iso8601"`.
+- `referenceYear` {{optional_inline}}
+ - : A number, truncated to an integer, representing the year in the ISO calendar system. Defaults to `1972`. The same ISO month-day can represent different dates in different years with non-ISO calendars. For example, the days 2021-07-01 and 1972-07-01 may fall on different month-days in a non-Gregorian calendar, and just specifying "07-01" is insufficient to unambiguously determine a month-day in the target calendar. Therefore, you virtually always want to specify a `referenceYear` when using a non-ISO calendar.
+
+### Return value
+
+A new `Temporal.PlainMonthDay` object, representing the month-day of the date specified by `referenceYear`, `month`, `day` (in the ISO calendar), interpreted in the calendar system specified by `calendar`.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Thrown if `calendar` is not a string or `undefined`.
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - `referenceYear`, `month`, or `day` is not a finite number, or do not represent a valid date in the ISO calendar system.
+ - `calendar` is not a valid calendar identifier.
+
+## Examples
+
+### Using Temporal.PlainMonthDay()
+
+```js
+const md = new Temporal.PlainMonthDay(7, 1);
+console.log(md.toString()); // 07-01
+
+const md2 = new Temporal.PlainMonthDay(7, 1, "chinese");
+console.log(md2.toString()); // 1972-07-01[u-ca=chinese]
+
+const md3 = new Temporal.PlainMonthDay(7, 1, "chinese", 2021);
+console.log(md3.toString()); // 2021-07-01[u-ca=chinese]
+```
+
+### Improper usage
+
+You should avoid using the `calendar` and `referenceYear` parameters, unless you know that the `referenceYear` is the canonical reference year that would be selected by `Temporal.PlainMonthDay.from()` for the same month-day.
+
+```js
+const md = new Temporal.PlainMonthDay(7, 1, "chinese", 2021);
+const md2 = Temporal.PlainMonthDay.from("2021-07-01[u-ca=chinese]");
+console.log(md.equals(md2)); // false
+console.log(md.toString()); // 2021-07-01[u-ca=chinese]
+console.log(md2.toString()); // 1972-07-02[u-ca=chinese]
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainMonthDay")}}
+- {{jsxref("Temporal/PlainMonthDay/from", "Temporal.PlainMonthDay.from()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/tojson/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/tojson/index.md
new file mode 100644
index 000000000000000..93a327be504ed2a
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/tojson/index.md
@@ -0,0 +1,68 @@
+---
+title: Temporal.PlainMonthDay.prototype.toJSON()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainMonthDay/toJSON
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainMonthDay.toJSON
+---
+
+{{JSRef}}
+
+The **`toJSON()`** method of {{jsxref("Temporal.PlainMonthDay")}} instances returns a string representing this month-day in the same [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainMonthDay#rfc_9557_format) as calling {{jsxref("Temporal/PlainMonthDay/toString", "toString()")}}. It is intended to be implicitly called by {{jsxref("JSON.stringify()")}}.
+
+## Syntax
+
+```js-nolint
+toJSON()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A string representing the given month-day in the [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainMonthDay#rfc_9557_format), with the year and calendar annotation included if it is not `"iso8601"`.
+
+## Description
+
+The `toJSON()` method is automatically called by {{jsxref("JSON.stringify()")}} when a `Temporal.PlainMonthDay` object is stringified. This method is generally intended to, by default, usefully serialize `Temporal.PlainMonthDay` objects during [JSON](/en-US/docs/Glossary/JSON) serialization, which can then be deserialized using the {{jsxref("Temporal/PlainMonthDay/from", "Temporal.PlainMonthDay.from()")}} function as the reviver of {{jsxref("JSON.parse()")}}.
+
+## Examples
+
+### Using toJSON()
+
+```js
+const md = Temporal.PlainMonthDay.from({ month: 8, day: 1 });
+const mdStr = md.toJSON(); // '08-01'
+const md2 = Temporal.PlainMonthDay.from(mdStr);
+```
+
+### JSON serialization and parsing
+
+This example shows how `Temporal.PlainMonthDay` can be serialized as JSON without extra effort, and how to parse it back.
+
+```js
+const md = Temporal.PlainMonthDay.from({ month: 8, day: 1 });
+const jsonStr = JSON.stringify({ birthday: md }); // '{"birthday":"08-01"}'
+const obj = JSON.parse(jsonStr, (key, value) => {
+ if (key === "birthday") {
+ return Temporal.PlainMonthDay.from(value);
+ }
+ return value;
+});
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainMonthDay")}}
+- {{jsxref("Temporal/PlainMonthDay/from", "Temporal.PlainMonthDay.from()")}}
+- {{jsxref("Temporal/PlainMonthDay/toString", "Temporal.PlainMonthDay.prototype.toString()")}}
+- {{jsxref("Temporal/PlainMonthDay/toLocaleString", "Temporal.PlainMonthDay.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/tolocalestring/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/tolocalestring/index.md
new file mode 100644
index 000000000000000..88f75353bf97622
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/tolocalestring/index.md
@@ -0,0 +1,101 @@
+---
+title: Temporal.PlainMonthDay.prototype.toLocaleString()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainMonthDay/toLocaleString
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainMonthDay.toLocaleString
+---
+
+{{JSRef}}
+
+The **`toLocaleString()`** method of {{jsxref("Temporal.PlainMonthDay")}} instances returns a string with a language-sensitive representation of this month-day. In implementations with [`Intl.DateTimeFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat) support, this method delegates to `Intl.DateTimeFormat`.
+
+Every time `toLocaleString` is called, it has to perform a search in a big database of localization strings, which is potentially inefficient. When the method is called many times with the same arguments, it is better to create a {{jsxref("Intl.DateTimeFormat")}} object and use its {{jsxref("Intl/DateTimeFormat/format", "format()")}} method, because a `DateTimeFormat` object remembers the arguments passed to it and may decide to cache a slice of the database, so future `format` calls can search for localization strings within a more constrained context.
+
+## Syntax
+
+```js-nolint
+toLocaleString()
+toLocaleString(locales)
+toLocaleString(locales, options)
+```
+
+### Parameters
+
+The `locales` and `options` parameters customize the behavior of the function and let applications specify the language whose formatting conventions should be used.
+
+In implementations that support the [`Intl.DateTimeFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat), these parameters correspond exactly to the [`Intl.DateTimeFormat()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat) constructor's parameters. Implementations without `Intl.DateTimeFormat` support return the exact same string as {{jsxref("Temporal/PlainMonthDay/toString", "toString()")}}, ignoring both parameters.
+
+- `locales` {{optional_inline}}
+ - : A string with a BCP 47 language tag, or an array of such strings. Corresponds to the [`locales`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#locales) parameter of the `Intl.DateTimeFormat()` constructor.
+- `options` {{optional_inline}}
+
+ - : An object adjusting the output format. Corresponds to the [`options`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#options) parameter of the `Intl.DateTimeFormat()` constructor. The `calendar` option must be provided with the same value as this month-day's calendar. Regarding the [date-time component options](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#date-time_component_options) and the style shortcuts (`dateStyle` and `timeStyle`), the options should follow one of these forms:
+
+ - Provide none of them: `month` and `day` will default to `"numeric"`.
+ - Provide `dateStyle` only: it expands to `month` and `day` formats.
+ - Provide some date-time component options, where at least one of them is `month` or `day`. Only the specified date components will be included in the output.
+
+See the [`Intl.DateTimeFormat()` constructor](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat) for details on these parameters and how to use them.
+
+### Return value
+
+A string representing the given month-day according to language-specific conventions.
+
+In implementations with `Intl.DateTimeFormat`, this is equivalent to `new Intl.DateTimeFormat(locales, options).format(monthDay)`, where `options` has been normalized as described above.
+
+> [!NOTE]
+> Most of the time, the formatting returned by `toLocaleString()` is consistent. However, the output may vary between implementations, even within the same locale — output variations are by design and allowed by the specification. It may also not be what you expect. For example, the string may use non-breaking spaces or be surrounded by bidirectional control characters. You should not compare the results of `toLocaleString()` to hardcoded constants.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+- {{jsxref("TypeError")}}
+ - : Thrown if any of the options is not of the expected type.
+
+## Examples
+
+### Using toLocaleString()
+
+Basic use of this method without specifying a `locale` returns a formatted string in the default locale and with default options.
+
+```js
+// Note that just specifying "08-01" defaults to the ISO 8601 calendar,
+// which throws an error if the locale's default calendar is not ISO 8601.
+const md = Temporal.PlainMonthDay.from("2021-08-01[u-ca=gregory]");
+
+console.log(md.toLocaleString()); // 8/1 (assuming en-US locale and Gregorian calendar)
+```
+
+If the month-day's calendar doesn't match the locale's default calendar, even when its calendar is `iso8601`, an explicit `calendar` option must be provided with the same value.
+
+```js
+const md = Temporal.PlainMonthDay.from("08-01");
+md.toLocaleString("en-US", { calendar: "iso8601" }); // 08-01
+```
+
+### Using toLocaleString() with options
+
+You can customize which parts of the month-day are included in the output by providing the `options` parameter.
+
+```js
+const md = Temporal.PlainMonthDay.from("2021-08-01[u-ca=gregory]");
+md.toLocaleString("en-US", { dateStyle: "full" }); // August 1
+md.toLocaleString("en-US", { month: "long" }); // August
+md.toLocaleString("en-US", { day: "numeric" }); // 1
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainMonthDay")}}
+- {{jsxref("Intl.DateTimeFormat")}}
+- {{jsxref("Temporal/PlainMonthDay/toJSON", "Temporal.PlainMonthDay.prototype.toJSON()")}}
+- {{jsxref("Temporal/PlainMonthDay/toString", "Temporal.PlainMonthDay.prototype.toString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/toplaindate/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/toplaindate/index.md
new file mode 100644
index 000000000000000..bd88d37a0f8b512
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/toplaindate/index.md
@@ -0,0 +1,64 @@
+---
+title: Temporal.PlainMonthDay.prototype.toPlainDate()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainMonthDay/toPlainDate
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainMonthDay.toPlainDate
+---
+
+{{JSRef}}
+
+The **`toPlainDate()`** method of {{jsxref("Temporal.PlainMonthDay")}} instances returns a new {{jsxref("Temporal.PlainDate")}} object representing this month-day and a supplied year in the same calendar system.
+
+## Syntax
+
+```js-nolint
+toPlainDate(yearInfo)
+```
+
+### Parameters
+
+- `yearInfo`
+ - : An object representing the year component of the resulting `PlainDate`, containing the following properties (in the order they are retrieved and validated):
+ - `era` and `eraYear`
+ - : A string and an integer that correspond to the {{jsxref("Temporal/PlainDate/era", "era")}} and {{jsxref("Temporal/PlainDate/eraYear", "eraYear")}} properties. Are only used if the calendar system has eras. `era` and `eraYear` must be provided simultaneously. If they are not provided, then `year` must be provided. If all of `era`, `eraYear`, and `year` are provided, they must be consistent.
+ - `year`
+ - : Corresponds to the {{jsxref("Temporal/PlainDate/year", "year")}} property.
+
+### Return value
+
+A new `Temporal.PlainDate` object representing the date specified by this month-day and the year in `yearInfo`, interpreted in the calendar system of this month-day.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+- {{jsxref("TypeError")}}
+ - : Thrown if `yearInfo` is not an object.
+
+## Examples
+
+### Using toPlainDate()
+
+```js
+const md = Temporal.PlainMonthDay.from("07-01");
+const date = md.toPlainDate({ year: 2021 });
+console.log(date.toString()); // 2021-07-01
+
+const md2 = Temporal.PlainMonthDay.from("2021-07-01[u-ca=japanese]");
+const date2 = md2.toPlainDate({ era: "reiwa", eraYear: 1 });
+console.log(date2.toString()); // 2019-07-01[u-ca=japanese]
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainMonthDay")}}
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/toPlainMonthDay", "Temporal.PlainDate.prototype.toPlainMonthDay()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/tostring/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/tostring/index.md
new file mode 100644
index 000000000000000..a1887ad3babd6d2
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/tostring/index.md
@@ -0,0 +1,93 @@
+---
+title: Temporal.PlainMonthDay.prototype.toString()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainMonthDay/toString
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainMonthDay.toString
+---
+
+{{JSRef}}
+
+The **`toString()`** method of {{jsxref("Temporal.PlainMonthDay")}} instances returns a string representing this month-day in the [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainMonthDay#rfc_9557_format).
+
+## Syntax
+
+```js-nolint
+toString()
+toString(options)
+```
+
+### Parameters
+
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `calendarName` {{optional_inline}}
+ - : Whether to show the calendar annotation (`[u-ca=calendar_id]`) in the return value. Possible values are:
+ - `"auto"` (default)
+ - : Include the calendar annotation if the calendar is not `"iso8601"`. The reference year is included if the calendar is not `"iso8601"`.
+ - `"always"`
+ - : Always include the calendar annotation. The reference year is always included too.
+ - `"never"`
+ - : Never include the calendar annotation. This makes the returned string not recoverable to the same {{jsxref("Temporal.PlainMonthDay")}} instance, although the month-day value still remains the same. The reference year is included if the calendar is not `"iso8601"`.
+ - `"critical"`
+ - : Always include the calendar annotation, and add a critical flag: `[!u-ca=calendar_id]`. Useful when sending the string to certain systems, but not useful for Temporal itself. The reference year is always included too.
+
+### Return value
+
+A string in the [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainMonthDay#rfc_9557_format) representing this month-day. The calendar annotation is included as specified. The reference year is included if a calendar annotation is included or if the calendar is not `"iso8601"`.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+- {{jsxref("TypeError")}}
+ - : Thrown if `options` is not an object or `undefined`.
+
+## Examples
+
+### Using toString()
+
+```js
+const md = Temporal.PlainMonthDay.from({ month: 8, day: 1 });
+console.log(md.toString()); // '08-01'
+
+const md2 = Temporal.PlainMonthDay.from({
+ monthCode: "M08",
+ day: 1,
+ calendar: "chinese",
+});
+console.log(md2.toString()); // '1972-09-08[u-ca=chinese]'
+```
+
+### Using options
+
+```js
+const isoMD = Temporal.PlainMonthDay.from({ month: 8, day: 1 });
+const md = Temporal.PlainMonthDay.from({
+ monthCode: "M08",
+ day: 1,
+ calendar: "chinese",
+});
+console.log(isoMD.toString({ calendarName: "auto" })); // '08-01'
+console.log(md.toString({ calendarName: "auto" })); // '1972-09-08[u-ca=chinese]'
+console.log(isoMD.toString({ calendarName: "always" })); // '1972-08-01[u-ca=iso8601]'
+console.log(md.toString({ calendarName: "always" })); // '1972-09-08[u-ca=chinese]'
+console.log(isoMD.toString({ calendarName: "never" })); // '08-01'
+console.log(md.toString({ calendarName: "never" })); // '1972-09-08'
+console.log(isoMD.toString({ calendarName: "critical" })); // '1972-08-01[!u-ca=iso8601]'
+console.log(md.toString({ calendarName: "critical" })); // '1972-09-08[!u-ca=chinese]'
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainMonthDay")}}
+- {{jsxref("Temporal/PlainMonthDay/from", "Temporal.PlainMonthDay.from()")}}
+- {{jsxref("Temporal/PlainMonthDay/toJSON", "Temporal.PlainMonthDay.prototype.toJSON()")}}
+- {{jsxref("Temporal/PlainMonthDay/toLocaleString", "Temporal.PlainMonthDay.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/valueof/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/valueof/index.md
new file mode 100644
index 000000000000000..4d7114c68f49c4b
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/valueof/index.md
@@ -0,0 +1,70 @@
+---
+title: Temporal.PlainMonthDay.prototype.valueOf()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainMonthDay/valueOf
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainMonthDay.valueOf
+---
+
+{{JSRef}}
+
+The **`valueOf()`** method of {{jsxref("Temporal.PlainMonthDay")}} instances throws a {{jsxref("TypeError")}}, which prevents `Temporal.PlainMonthDay` instances from being [implicitly converted to primitives](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) when used in arithmetic or comparison operations.
+
+## Syntax
+
+```js-nolint
+valueOf()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+None.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Always thrown.
+
+## Description
+
+Because both [primitive conversion](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) and [number conversion](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number#number_coercion) call `valueOf()` before `toString()`, if `valueOf()` is absent, then an expression like `monthDay1 > monthDay2` would implicitly compare them as strings, which may have unexpected results. By throwing a `TypeError`, `Temporal.PlainMonthDay` instances prevent such implicit conversions. You need to explicitly convert them to strings using {{jsxref("Temporal/PlainMonthDay/toString", "Temporal.PlainMonthDay.prototype.toString()")}}.
+
+## Examples
+
+### Arithmetic and comparison operations on Temporal.PlainMonthDay
+
+All arithmetic and comparison operations on `Temporal.PlainMonthDay` instances should use the dedicated methods or convert them to primitives explicitly.
+
+```js
+const md1 = Temporal.PlainMonthDay.from("01-01");
+const md2 = Temporal.PlainMonthDay.from("07-01");
+md1 > md2; // TypeError: can't convert PlainMonthDay to primitive type
+Temporal.PlainDate.compare(
+ md1.toPlainDate({ year: 2021 }),
+ md2.toPlainDate({ year: 2021 }),
+); // -1
+
+md2 - md1; // TypeError: can't convert PlainMonthDay to primitive type
+md2
+ .toPlainDate({ year: 2021 })
+ .since(md1.toPlainDate({ year: 2021 }))
+ .toString(); // "P181D"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainMonthDay")}}
+- {{jsxref("Temporal/PlainMonthDay/toString", "Temporal.PlainMonthDay.prototype.toString()")}}
+- {{jsxref("Temporal/PlainMonthDay/toJSON", "Temporal.PlainMonthDay.prototype.toJSON()")}}
+- {{jsxref("Temporal/PlainMonthDay/toLocaleString", "Temporal.PlainMonthDay.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/with/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/with/index.md
new file mode 100644
index 000000000000000..11cfaf58b589526
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainmonthday/with/index.md
@@ -0,0 +1,73 @@
+---
+title: Temporal.PlainMonthDay.prototype.with()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainMonthDay/with
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainMonthDay.with
+---
+
+{{JSRef}}
+
+The **`with()`** method of {{jsxref("Temporal.PlainMonthDay")}} instances returns a new `Temporal.PlainMonthDay` object representing this month-day with some fields replaced by new values. Because all `Temporal` objects are designed to be immutable, this method essentially functions as the setter for the month-day's fields.
+
+There's no obvious way to create a new `Temporal.PlainMonthDay` object that represents the same month-day in a different calendar, so to replace its `calendarId` property, you need to convert it to a {{jsxref("Temporal.PlainDate")}} object using {{jsxref("Temporal/PlainMonthDay/toPlainDate", "toPlainDate()")}}, change the calendar, and then convert it back.
+
+## Syntax
+
+```js-nolint
+with(info)
+with(info, options)
+```
+
+### Parameters
+
+- `info`
+ - : An object containing at least one of the properties recognized by {{jsxref("Temporal/PlainMonthDay/from", "Temporal.PlainMonthDay.from()")}} (except `calendar`): `day`, `era` and `eraYear`, `month`, `monthCode`, `year`. Unspecified properties use the values from the original month-day. You need to provide the year if and only if you provide `month` and the calendar is not `iso8601`. You only need to provide one of `month` or `monthCode`, and one of `era` and `eraYear` or `year`, and the other will be updated accordingly.
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `overflow` {{optional_inline}}
+ - : A string specifying the behavior when a date component is out of range. Possible values are:
+ - `"constrain"` (default)
+ - : The date component is [clamped](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#invalid_date_clamping) to the valid range.
+ - `"reject"`
+ - : A {{jsxref("RangeError")}} is thrown if the date component is out of range.
+
+### Return value
+
+A new `Temporal.PlainMonthDay` object, where the fields specified in `info` that are not `undefined` are replaced by the corresponding values, and the rest of the fields are copied from the original date.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Thrown in one of the following cases:
+ - `info` is not an object.
+ - `options` is not an object or `undefined`.
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - The provided properties that specify the same component are inconsistent.
+ - The provided non-numerical properties are not valid; for example, if `monthCode` is never a valid month code in this calendar.
+ - The provided numerical properties are out of range, and `options.overflow` is set to `"reject"`.
+
+## Examples
+
+### Using with()
+
+```js
+const md = Temporal.PlainMonthDay.from("07-01");
+const newMd = md.with({ day: 2 });
+console.log(newMd.toString()); // "07-02"
+```
+
+For more examples, see the documentation for the individual properties that can be set using `with()`.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainMonthDay")}}
+- {{jsxref("Temporal/PlainMonthDay/from", "Temporal.PlainMonthDay.from()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/add/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/add/index.md
new file mode 100644
index 000000000000000..c44b46b5a6cbf26
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/add/index.md
@@ -0,0 +1,68 @@
+---
+title: Temporal.PlainTime.prototype.add()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/add
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainTime.add
+---
+
+{{JSRef}}
+
+The **`add()`** method of {{jsxref("Temporal.PlainTime")}} instances returns a new `Temporal.PlainTime` object representing this time moved forward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}), wrapping around the clock if necessary.
+
+## Syntax
+
+```js-nolint
+add(duration)
+```
+
+### Parameters
+
+- `duration`
+ - : A string, an object, or a {{jsxref("Temporal.Duration")}} instance representing a duration to add to this time. It is converted to a `Temporal.Duration` object using the same algorithm as {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}.
+
+### Return value
+
+A new `Temporal.PlainTime` object representing the time specified by the original `PlainTime`, plus the duration. Any units above `hours` are ignored, and if the time goes past midnight, it wraps around to the next day.
+
+Adding a duration is equivalent to [subtracting](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/subtract) its [negation](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/negated).
+
+## Examples
+
+### Adding a duration
+
+```js
+const start = Temporal.PlainTime.from("12:34:56");
+const end = start.add({ hours: 1, minutes: 30 });
+console.log(end.toString()); // 14:04:56
+
+const end2 = start.add({ hours: -1, minutes: -30 });
+console.log(end2.toString()); // 11:04:56
+
+const distance = Temporal.PlainTime.from("00:00:00").until("01:23:45"); // 1h 23m 45s
+const end3 = start.add(distance);
+console.log(end3.toString()); // 13:58:41
+```
+
+### Time wrapping
+
+If the time goes past midnight, it wraps around to the next day:
+
+```js
+const start = Temporal.PlainTime.from("12:34:56");
+const end = start.add({ hours: 12 });
+console.log(end.toString()); // 00:34:56
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/PlainTime/subtract", "Temporal.PlainTime.prototype.subtract()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/compare/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/compare/index.md
new file mode 100644
index 000000000000000..6f50d35a01d0a4f
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/compare/index.md
@@ -0,0 +1,65 @@
+---
+title: Temporal.PlainTime.compare()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/compare
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.PlainTime.compare
+---
+
+{{JSRef}}
+
+The **`Temporal.PlainTime.compare()`** static method returns a number (-1, 0, or 1) indicating whether the first time comes before, is the same as, or comes after the second time. It is equivalent to comparing the hour, minute, second, millisecond, microsecond, and nanosecond fields one by one.
+
+## Syntax
+
+```js-nolint
+Temporal.PlainTime.compare(time1, time2)
+```
+
+### Parameters
+
+- `time1`
+ - : A string, an object, or a {{jsxref("Temporal.PlainTime")}} instance representing the first time to compare. It is converted to a `Temporal.PlainTime` object using the same algorithm as {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}.
+- `time2`
+ - : The second time to compare, converted to a `Temporal.PlainTime` object using the same algorithm as `time1`.
+
+### Return value
+
+Returns `-1` if `time1` comes before `time2`, `0` if they are the same, and `1` if `time2` comes after.
+
+## Examples
+
+### Using Temporal.PlainTime.compare()
+
+```js
+const time1 = Temporal.PlainTime.from("12:34:56");
+const time2 = Temporal.PlainTime.from("12:34:57");
+console.log(Temporal.PlainTime.compare(time1, time2)); // -1
+
+const time3 = Temporal.PlainTime.from("11:34:56");
+console.log(Temporal.PlainTime.compare(time1, time3)); // 1
+```
+
+### Sorting an array of times
+
+The purpose of this `compare()` function is to act as a comparator to be passed to {{jsxref("Array.prototype.sort()")}} and related functions.
+
+```js
+const times = ["12:34:56", "11:34:56", "12:34:57"];
+
+times.sort(Temporal.PlainTime.compare);
+console.log(times);
+// [ "11:34:56", "12:34:56", "12:34:57" ]
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal/PlainTime/equals", "Temporal.PlainTime.prototype.equals()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/equals/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/equals/index.md
new file mode 100644
index 000000000000000..2e29e2ecce17473
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/equals/index.md
@@ -0,0 +1,51 @@
+---
+title: Temporal.PlainTime.prototype.equals()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/equals
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainTime.equals
+---
+
+{{JSRef}}
+
+The **`equals()`** method of {{jsxref("Temporal.PlainTime")}} instances returns `true` if this time is equivalent in value to another time (in a form convertible by {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}), and `false` otherwise. They are compared by their time values. It is equivalent to `Temporal.PlainTime.compare(this, other) === 0`.
+
+## Syntax
+
+```js-nolint
+equals(other)
+```
+
+### Parameters
+
+- `other`
+ - : A string, an object, or a {{jsxref("Temporal.PlainTime")}} instance representing the other time to compare. It is converted to a `Temporal.PlainTime` object using the same algorithm as {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}.
+
+### Return value
+
+`true` if this time is equal to `other` both in their time value and their calendar, `false` otherwise.
+
+## Examples
+
+### Using equals()
+
+```js
+const time1 = Temporal.PlainTime.from("12:34:56");
+const time2 = Temporal.PlainTime.from({ hour: 12, minute: 34, second: 56 });
+console.log(time1.equals(time2)); // true
+
+const time3 = Temporal.PlainTime.from("00:34:56");
+console.log(time1.equals(time3)); // false
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal/PlainTime/compare", "Temporal.PlainTime.compare()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/from/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/from/index.md
new file mode 100644
index 000000000000000..421182d2ccdc920
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/from/index.md
@@ -0,0 +1,140 @@
+---
+title: Temporal.PlainTime.from()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/from
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.PlainTime.from
+---
+
+{{JSRef}}
+
+The **`Temporal.PlainTime.from()`** static method creates a new `Temporal.PlainTime` object from another `Temporal.PlainTime` object, an object with time properties, or an [RFC 9557](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime#rfc_9557_format) string.
+
+## Syntax
+
+```js-nolint
+Temporal.PlainTime.from(info)
+Temporal.PlainTime.from(info, options)
+```
+
+### Parameters
+
+- `info`
+
+ - : One of the following:
+
+ - A {{jsxref("Temporal.PlainTime")}} instance, which creates a copy of the instance.
+ - A {{jsxref("Temporal.PlainDateTime")}} instance, which provides the time in the same fashion as {{jsxref("Temporal/PlainDateTime/toPlainDate", "Temporal.PlainDateTime.prototype.toPlainTime()")}}.
+ - A {{jsxref("Temporal.ZonedDateTime")}} instance, which provides the time in the same fashion as {{jsxref("Temporal/ZonedDateTime/toPlainDate", "Temporal.ZonedDateTime.prototype.toPlainTime()")}}.
+ - An [RFC 9557](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime#rfc_9557_format) string containing a time.
+ - An object containing at least one of the following properties (in the order they are retrieved and validated):
+
+ - {{jsxref("Temporal/PlainTime/hour", "hour")}}
+ - {{jsxref("Temporal/PlainTime/microsecond", "microsecond")}}
+ - {{jsxref("Temporal/PlainTime/millisecond", "millisecond")}}
+ - {{jsxref("Temporal/PlainTime/minute", "minute")}}
+ - {{jsxref("Temporal/PlainTime/nanosecond", "nanosecond")}}
+ - {{jsxref("Temporal/PlainTime/second", "second")}}
+
+ They are truncated to be integers. Out-of-range values are handled by the `overflow` option.
+
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `overflow` {{optional_inline}}
+ - : A string specifying the behavior when a time component is out of range (when using the object `info`). Possible values are:
+ - `"constrain"` (default)
+ - : The time component is clamped to the valid range.
+ - `"reject"`
+ - : A {{jsxref("RangeError")}} is thrown if the time component is out of range.
+
+### Return value
+
+A new `Temporal.PlainTime` object, representing the time specified by `info`.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Thrown in one of the following cases:
+ - `info` is not an object with at least one recognized property or a string.
+ - `options` is not an object or `undefined`.
+- {{jsxref("RangeError")}}
+ - : Thrown if the provided numerical properties are out of range, and `options.overflow` is set to `"reject"`.
+
+## Examples
+
+### Creating a PlainTime from an object
+
+```js
+const t1 = Temporal.PlainTime.from({ hour: 0 });
+console.log(t1.toString()); // "00:00:00"
+
+const t2 = Temporal.PlainTime.from({ hour: 12, minute: 34, second: 56 });
+console.log(t2.toString()); // "12:34:56"
+
+const t3 = Temporal.PlainTime.from({
+ hour: 12,
+ minute: 34,
+ second: 56,
+ millisecond: 123,
+ microsecond: 456,
+ nanosecond: 789,
+});
+console.log(t3.toString()); // "12:34:56.123456789"
+```
+
+### Controlling overflow behavior
+
+By default, out-of-range values are clamped to the valid range:
+
+```js
+const t1 = Temporal.PlainTime.from({ hour: 25 });
+console.log(t1.toString()); // "23:00:00"
+
+const t2 = Temporal.PlainTime.from({ hour: 25, minute: 60 });
+console.log(t2.toString()); // "23:59:00"
+```
+
+You can change this behavior to throw an error instead:
+
+```js
+Temporal.PlainTime.from({ hour: 25 }, { overflow: "reject" });
+// RangeError: time value "hour" not in 0..23: 25
+```
+
+### Creating a PlainTime from a string
+
+```js
+const t1 = Temporal.PlainTime.from("12:34:56.123456789");
+console.log(t1.toLocaleString("en-US", { timeStyle: "full" }));
+// 12:34:56 PM
+```
+
+### Creating a PlainTime from another Temporal instance
+
+```js
+const dt = Temporal.PlainDateTime.from("2021-07-01T12:00");
+const t = Temporal.PlainTime.from(dt);
+console.log(t.toString()); // "12:00:00"
+
+const zdt = Temporal.ZonedDateTime.from(
+ "2021-07-01T00:00+08:00[Asia/Shanghai]",
+);
+const t2 = Temporal.PlainTime.from(zdt);
+console.log(t2.toString()); // "00:00:00"
+
+const t3 = Temporal.PlainTime.from(t);
+console.log(t3.toString()); // "12:00:00"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal/PlainTime/PlainTime", "Temporal.PlainTime()")}}
+- {{jsxref("Temporal/PlainTime/with", "Temporal.PlainTime.prototype.with()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/hour/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/hour/index.md
new file mode 100644
index 000000000000000..273d9b00586411c
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/hour/index.md
@@ -0,0 +1,52 @@
+---
+title: Temporal.PlainTime.prototype.hour
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/hour
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainTime.hour
+---
+
+{{JSRef}}
+
+The **`hour`** accessor property of {{jsxref("Temporal.PlainTime")}} instances returns a integer from 0 to 23 representing the hour component of this time.
+
+The set accessor of `hour` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainTime/with", "with()")}} method to create a new `Temporal.PlainTime` object with the desired new value.
+
+## Examples
+
+### Using hour
+
+```js
+const time = Temporal.PlainTime.from("12:34:56");
+console.log(time.hour); // 12
+```
+
+### Changing hour
+
+```js
+const time = Temporal.PlainTime.from("12:34:56");
+const newTime = time.with({ hour: 15 });
+console.log(newTime.toString()); // 15:34:56
+```
+
+You can also use {{jsxref("Temporal/PlainTime/add", "add()")}} or {{jsxref("Temporal/PlainTime/subtract", "subtract()")}} to move a certain number of hours from the current time.
+
+```js
+const time = Temporal.PlainTime.from("12:34:56");
+const newTime = time.add({ hours: 3 });
+console.log(newTime.toString()); // 15:34:56
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal/PlainTime/with", "Temporal.PlainTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainTime/add", "Temporal.PlainTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainTime/subtract", "Temporal.PlainTime.prototype.subtract()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/index.md
new file mode 100644
index 000000000000000..3b4290cceb3172c
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/index.md
@@ -0,0 +1,105 @@
+---
+title: Temporal.PlainTime
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime
+page-type: javascript-class
+browser-compat: javascript.builtins.Temporal.PlainTime
+---
+
+{{JSRef}}
+
+The **`Temporal.PlainTime`** object represents a time without a date or time zone; for example, a recurring event that happens at the same time every day. It is fundamentally represented as a combination of hour, minute, second, millisecond, microsecond, and nanosecond values.
+
+## Description
+
+A `PlainTime` is essentially the time part of a {{jsxref("Temporal.PlainDateTime")}} object, with the date information removed. Because the date and time information don't have much interaction, all general information about time properties is documented here.
+
+### RFC 9557 format
+
+`PlainTime` objects can be serialized and parsed using the [RFC 9557](https://datatracker.ietf.org/doc/html/rfc9557) format, an extension to the [ISO 8601 / RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) format. The string has the following form:
+
+```plain
+HH:mm:ss.sssssssss
+```
+
+- `HH`
+ - : A two-digit number from `00` to `23`. It may be prefixed by the time designator `T` or `t`.
+- `mm` {{optional_inline}}
+ - : A two-digit number from `00` to `59`. Defaults to `00`.
+- `ss.sssssssss` {{optional_inline}}
+ - : A two-digit number from `00` to `59`. May optionally be followed by a `.` or `,` and one to nine digits. Defaults to `00`. The `HH`, `mm`, and `ss` components can be separated by `:` or nothing. You can omit either just `ss` or both `ss` and `mm`, so the time can be one of three forms: `HH`, `HH:mm`, or `HH:mm:ss.sssssssss`.
+
+As an input, you may optionally include the date, offset, time zone identifier, and calendar, in the same format as [`PlainDateTime`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime#rfc_9557_format), but they will be ignored. A date-only string will be rejected. Other annotations in the `[key=value]` format are also ignored, and they must not have the critical flag.
+
+When serializing, you can configure the fractional second digits.
+
+## Constructor
+
+- {{jsxref("Temporal/PlainTime/PlainTime", "Temporal.PlainTime()")}}
+ - : Creates a new `Temporal.PlainTime` object by directly supplying the underlying data.
+
+## Static methods
+
+- {{jsxref("Temporal/PlainTime/compare", "Temporal.PlainTime.compare()")}}
+ - : Returns a number (-1, 0, or 1) indicating whether the first time comes before, is the same as, or comes after the second time. Equivalent to comparing the hour, minute, second, millisecond, microsecond, and nanosecond fields one by one.
+- {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}
+ - : Creates a new `Temporal.PlainTime` object from another `Temporal.PlainTime` object, an object with time properties, or an [RFC 9557](#rfc_9557_format) string.
+
+## Instance properties
+
+These properties are defined on `Temporal.PlainTime.prototype` and shared by all `Temporal.PlainTime` instances.
+
+- {{jsxref("Object/constructor", "Temporal.PlainTime.prototype.constructor")}}
+ - : The constructor function that created the instance object. For `Temporal.PlainTime` instances, the initial value is the {{jsxref("Temporal/PlainTime/PlainTime", "Temporal.PlainTime()")}} constructor.
+- {{jsxref("Temporal/PlainTime/hour", "Temporal.PlainTime.prototype.hour")}}
+ - : Returns a integer from 0 to 23 representing the hour component of this time.
+- {{jsxref("Temporal/PlainTime/microsecond", "Temporal.PlainTime.prototype.microsecond")}}
+ - : Returns a integer from 0 to 999 representing the microsecond (10-6 second) component of this time.
+- {{jsxref("Temporal/PlainTime/millisecond", "Temporal.PlainTime.prototype.millisecond")}}
+ - : Returns a integer from 0 to 999 representing the millisecond (10-3 second) component of this time.
+- {{jsxref("Temporal/PlainTime/minute", "Temporal.PlainTime.prototype.minute")}}
+ - : Returns a integer from 0 to 59 representing the minute component of this time.
+- {{jsxref("Temporal/PlainTime/nanosecond", "Temporal.PlainTime.prototype.nanosecond")}}
+ - : Returns a integer from 0 to 999 representing the nanosecond (10-9 second) component of this time.
+- {{jsxref("Temporal/PlainTime/second", "Temporal.PlainTime.prototype.second")}}
+ - : Returns a integer from 0 to 59 representing the second component of this time.
+- `Temporal.PlainTime.prototype[Symbol.toStringTag]`
+ - : The initial value of the [`[Symbol.toStringTag]`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) property is the string `"Temporal.PlainTime"`. This property is used in {{jsxref("Object.prototype.toString()")}}.
+
+## Instance methods
+
+- {{jsxref("Temporal/PlainTime/add", "Temporal.PlainTime.prototype.add()")}}
+ - : Returns a new `Temporal.PlainTime` object representing this time moved forward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}), wrapping around the clock if necessary.
+- {{jsxref("Temporal/PlainTime/equals", "Temporal.PlainTime.prototype.equals()")}}
+ - : Returns `true` if this time is equivalent in value to another time (in a form convertible by {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}), and `false` otherwise. They are compared by their time values. Equivalent to `Temporal.PlainTime.compare(this, other) === 0`.
+- {{jsxref("Temporal/PlainTime/round", "Temporal.PlainTime.prototype.round()")}}
+ - : Returns a new `Temporal.PlainTime` object representing this time rounded to the given unit.
+- {{jsxref("Temporal/PlainTime/since", "Temporal.PlainTime.prototype.since()")}}
+ - : Returns a new {{jsxref("Temporal.Duration")}} object representing the duration from another time (in a form convertible by {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}) to this time. The duration is positive if the other time is before this time, and negative if after.
+- {{jsxref("Temporal/PlainTime/subtract", "Temporal.PlainTime.prototype.subtract()")}}
+ - : Returns a new `Temporal.PlainTime` object representing this time moved backward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}), wrapping around the clock if necessary.
+- {{jsxref("Temporal/PlainTime/toJSON", "Temporal.PlainTime.prototype.toJSON()")}}
+ - : Returns a string representing this time in the same [RFC 9557 format](#rfc_9557_format) as calling {{jsxref("Temporal/PlainTime/toString", "toString()")}}. Intended to be implicitly called by {{jsxref("JSON.stringify()")}}.
+- {{jsxref("Temporal/PlainTime/toLocaleString", "Temporal.PlainTime.prototype.toLocaleString()")}}
+ - : Returns a string with a language-sensitive representation of this time.
+- {{jsxref("Temporal/PlainTime/toString", "Temporal.PlainTime.prototype.toString()")}}
+ - : Returns a string representing this time in the [RFC 9557 format](#rfc_9557_format).
+- {{jsxref("Temporal/PlainTime/until", "Temporal.PlainTime.prototype.until()")}}
+ - : Returns a new {{jsxref("Temporal.Duration")}} object representing the duration from this time to another time (in a form convertible by {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}). The duration is positive if the other time is after this time, and negative if before.
+- {{jsxref("Temporal/PlainTime/valueOf", "Temporal.PlainTime.prototype.valueOf()")}}
+ - : Throws a {{jsxref("TypeError")}}, which prevents `Temporal.PlainTime` instances from being [implicitly converted to primitives](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) when used in arithmetic or comparison operations.
+- {{jsxref("Temporal/PlainTime/with", "Temporal.PlainTime.prototype.with()")}}
+ - : Returns a new `Temporal.PlainTime` object representing this time with some fields replaced by new values.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal.PlainDateTime")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/microsecond/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/microsecond/index.md
new file mode 100644
index 000000000000000..3ba22401deaf81e
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/microsecond/index.md
@@ -0,0 +1,58 @@
+---
+title: Temporal.PlainTime.prototype.microsecond
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/microsecond
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainTime.microsecond
+---
+
+{{JSRef}}
+
+The **`microsecond`** accessor property of {{jsxref("Temporal.PlainTime")}} instances returns a integer from 0 to 999 representing the microsecond (10-6 second) component of this time.
+
+The set accessor of `microsecond` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainTime/with", "with()")}} method to create a new `Temporal.PlainTime` object with the desired new value.
+
+## Examples
+
+### Using microsecond
+
+```js
+const time = Temporal.PlainTime.from("12:34:56");
+console.log(time.microsecond); // 0
+
+const time2 = Temporal.PlainTime.from("12:34:56.123456789");
+console.log(time2.microsecond); // 456
+```
+
+### Changing microsecond
+
+```js
+const time = Temporal.PlainTime.from("12:34:56");
+const newTime = time.with({ microsecond: 100 });
+console.log(newTime.toString()); // 12:34:56.0001
+```
+
+You can also use {{jsxref("Temporal/PlainTime/add", "add()")}} or {{jsxref("Temporal/PlainTime/subtract", "subtract()")}} to move a certain number of microseconds from the current time.
+
+```js
+const time = Temporal.PlainTime.from("12:34:56");
+const newTime = time.add({ microseconds: 100 });
+console.log(newTime.toString()); // 12:34:56.0001
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal/PlainTime/with", "Temporal.PlainTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainTime/add", "Temporal.PlainTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainTime/subtract", "Temporal.PlainTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainTime/second", "Temporal.PlainTime.prototype.second")}}
+- {{jsxref("Temporal/PlainTime/millisecond", "Temporal.PlainTime.prototype.millisecond")}}
+- {{jsxref("Temporal/PlainTime/nanosecond", "Temporal.PlainTime.prototype.nanosecond")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/millisecond/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/millisecond/index.md
new file mode 100644
index 000000000000000..1a485a3a27f7804
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/millisecond/index.md
@@ -0,0 +1,58 @@
+---
+title: Temporal.PlainTime.prototype.millisecond
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/millisecond
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainTime.millisecond
+---
+
+{{JSRef}}
+
+The **`millisecond`** accessor property of {{jsxref("Temporal.PlainTime")}} instances returns a integer from 0 to 999 representing the millisecond (10-3 second) component of this time.
+
+The set accessor of `millisecond` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainTime/with", "with()")}} method to create a new `Temporal.PlainTime` object with the desired new value.
+
+## Examples
+
+### Using millisecond
+
+```js
+const time = Temporal.PlainTime.from("12:34:56");
+console.log(time.millisecond); // 0
+
+const time2 = Temporal.PlainTime.from("12:34:56.123456789");
+console.log(time2.millisecond); // 123
+```
+
+### Changing millisecond
+
+```js
+const time = Temporal.PlainTime.from("12:34:56");
+const newTime = time.with({ millisecond: 100 });
+console.log(newTime.toString()); // 12:34:56.1
+```
+
+You can also use {{jsxref("Temporal/PlainTime/add", "add()")}} or {{jsxref("Temporal/PlainTime/subtract", "subtract()")}} to move a certain number of milliseconds from the current time.
+
+```js
+const time = Temporal.PlainTime.from("12:34:56");
+const newTime = time.add({ milliseconds: 100 });
+console.log(newTime.toString()); // 12:34:56.1
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal/PlainTime/with", "Temporal.PlainTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainTime/add", "Temporal.PlainTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainTime/subtract", "Temporal.PlainTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainTime/second", "Temporal.PlainTime.prototype.second")}}
+- {{jsxref("Temporal/PlainTime/microsecond", "Temporal.PlainTime.prototype.microsecond")}}
+- {{jsxref("Temporal/PlainTime/nanosecond", "Temporal.PlainTime.prototype.nanosecond")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/minute/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/minute/index.md
new file mode 100644
index 000000000000000..d8b631f7f295737
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/minute/index.md
@@ -0,0 +1,52 @@
+---
+title: Temporal.PlainTime.prototype.minute
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/minute
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainTime.minute
+---
+
+{{JSRef}}
+
+The **`minute`** accessor property of {{jsxref("Temporal.PlainTime")}} instances returns a integer from 0 to 59 representing the minute component of this time.
+
+The set accessor of `minute` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainTime/with", "with()")}} method to create a new `Temporal.PlainTime` object with the desired new value.
+
+## Examples
+
+### Using minute
+
+```js
+const time = Temporal.PlainTime.from("12:34:56");
+console.log(time.minute); // 34
+```
+
+### Changing minute
+
+```js
+const time = Temporal.PlainTime.from("12:34:56");
+const newTime = time.with({ minute: 58 });
+console.log(newTime.toString()); // 12:58:56
+```
+
+You can also use {{jsxref("Temporal/PlainTime/add", "add()")}} or {{jsxref("Temporal/PlainTime/subtract", "subtract()")}} to move a certain number of minutes from the current time.
+
+```js
+const time = Temporal.PlainTime.from("12:34:56");
+const newTime = time.add({ minutes: 24 });
+console.log(newTime.toString()); // 12:58:56
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal/PlainTime/with", "Temporal.PlainTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainTime/add", "Temporal.PlainTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainTime/subtract", "Temporal.PlainTime.prototype.subtract()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/nanosecond/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/nanosecond/index.md
new file mode 100644
index 000000000000000..269928544054524
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/nanosecond/index.md
@@ -0,0 +1,58 @@
+---
+title: Temporal.PlainTime.prototype.nanosecond
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/nanosecond
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainTime.nanosecond
+---
+
+{{JSRef}}
+
+The **`nanosecond`** accessor property of {{jsxref("Temporal.PlainTime")}} instances returns a integer from 0 to 999 representing the nanosecond (10-9 second) component of this time.
+
+The set accessor of `nanosecond` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainTime/with", "with()")}} method to create a new `Temporal.PlainTime` object with the desired new value.
+
+## Examples
+
+### Using nanosecond
+
+```js
+const time = Temporal.PlainTime.from("12:34:56");
+console.log(time.nanosecond); // 0
+
+const time2 = Temporal.PlainTime.from("12:34:56.123456789");
+console.log(time2.nanosecond); // 789
+```
+
+### Changing nanosecond
+
+```js
+const time = Temporal.PlainTime.from("12:34:56");
+const newTime = time.with({ nanosecond: 100 });
+console.log(newTime.toString()); // 12:34:56.0000001
+```
+
+You can also use {{jsxref("Temporal/PlainTime/add", "add()")}} or {{jsxref("Temporal/PlainTime/subtract", "subtract()")}} to move a certain number of nanoseconds from the current time.
+
+```js
+const time = Temporal.PlainTime.from("12:34:56");
+const newTime = time.add({ nanoseconds: 100 });
+console.log(newTime.toString()); // 12:34:56.0000001
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal/PlainTime/with", "Temporal.PlainTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainTime/add", "Temporal.PlainTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainTime/subtract", "Temporal.PlainTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainTime/second", "Temporal.PlainTime.prototype.second")}}
+- {{jsxref("Temporal/PlainTime/millisecond", "Temporal.PlainTime.prototype.millisecond")}}
+- {{jsxref("Temporal/PlainTime/microsecond", "Temporal.PlainTime.prototype.microsecond")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/plaintime/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/plaintime/index.md
new file mode 100644
index 000000000000000..1835c6bc2851c83
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/plaintime/index.md
@@ -0,0 +1,72 @@
+---
+title: Temporal.PlainTime()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/PlainTime
+page-type: javascript-constructor
+browser-compat: javascript.builtins.Temporal.PlainTime.PlainTime
+---
+
+{{JSRef}}
+
+The **`Temporal.PlainTime()`** constructor creates {{jsxref("Temporal.PlainTime")}} objects.
+
+This constructor allows you to create instances by directly supplying the underlying data. Like all other `Temporal` classes, you should usually construct `Temporal.PlainTime` objects using the {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}} static method, which can handle a variety of input types.
+
+## Syntax
+
+```js-nolint
+new Temporal.PlainTime()
+new Temporal.PlainTime(hour)
+new Temporal.PlainTime(hour, minute)
+new Temporal.PlainTime(hour, minute, second)
+new Temporal.PlainTime(hour, minute, second, millisecond)
+new Temporal.PlainTime(hour, minute, second, millisecond, microsecond)
+new Temporal.PlainTime(hour, minute, second, millisecond, microsecond, nanosecond)
+```
+
+> **Note:** `Temporal.PlainTime()` can only be constructed with [`new`](/en-US/docs/Web/JavaScript/Reference/Operators/new). Attempting to call it without `new` throws a {{jsxref("TypeError")}}.
+
+### Parameters
+
+- `hour` {{optional_inline}}
+ - : A number, truncated to an integer, representing the hour component.
+- `minute` {{optional_inline}}
+ - : A number, truncated to an integer, representing the minute component.
+- `second` {{optional_inline}}
+ - : A number, truncated to an integer, representing the second component.
+- `millisecond` {{optional_inline}}
+ - : A number, truncated to an integer, representing the millisecond component.
+- `microsecond` {{optional_inline}}
+ - : A number, truncated to an integer, representing the microsecond component.
+- `nanosecond` {{optional_inline}}
+ - : A number, truncated to an integer, representing the nanosecond component.
+
+### Return value
+
+A new `Temporal.PlainTime` object, representing the time specified by the parameters.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the components is not a finite number, or they don't represent a valid time.
+
+## Examples
+
+### Using Temporal.PlainTime()
+
+```js
+const time = new Temporal.PlainTime(12, 34, 56, 123, 456, 789);
+console.log(time.toString()); // 12:34:56.123456789
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/round/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/round/index.md
new file mode 100644
index 000000000000000..438e7bafc206d84
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/round/index.md
@@ -0,0 +1,70 @@
+---
+title: Temporal.PlainTime.prototype.round()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/round
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainTime.round
+---
+
+{{JSRef}}
+
+The **`round()`** method of {{jsxref("Temporal.PlainTime")}} instances returns a new `Temporal.PlainTime` object representing this time rounded to the given unit.
+
+## Syntax
+
+```js-nolint
+round(smallestUnit)
+round(options)
+```
+
+### Parameters
+
+- `smallestUnit`
+ - : A string representing the [`smallestUnit`](#smallestunit_2) option. This is a convenience overload, so `round(smallestUnit)` is equivalent to `round({ smallestUnit })`, where `smallestUnit` is a string.
+- `options`
+ - : An object containing some or all of the following properties (in the order they are retrieved and validated):
+ - `roundingIncrement` {{optional_inline}}
+ - : A number (truncated to an integer) representing the rounding increment in the given `smallestUnit`. Defaults to `1`. The increment must be a divisor of the maximum value of `smallestUnit`; for example, if the unit is hours, the increment must be a divisor of 24 and must not be 24 itself, which means it can be 1, 2, 3, 4, 6, 8, or 12.
+ - `roundingMode` {{optional_inline}}
+ - : A string specifying how to round off the fractional part of `smallestUnit`. See [`Intl.NumberFormat()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#roundingmode). Defaults to `"halfExpand"`.
+ - `smallestUnit`
+ - : A string representing the smallest unit to include in the output. The value must be one of the following: `"hour"`, `"minute"`, `"second"`, `"millisecond"`, `"microsecond"`, `"nanosecond"`, or their plural forms. For units larger than `"nanosecond"`, fractional parts of the `smallestUnit` will be rounded according to the `roundingIncrement` and `roundingMode` settings.
+
+### Return value
+
+A new {{jsxref("Temporal.PlainTime")}} object representing this time rounded to the given unit, where all units smaller than `smallestUnit` are zeroed out.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+
+## Examples
+
+### Rounding off small units
+
+```js
+const time = Temporal.PlainTime.from("12:34:56.123456789");
+const nearestMillisecond = time.round("millisecond");
+console.log(nearestMillisecond.toString()); // 12:34:56.123
+
+const nearestHalfHour = time.round({
+ smallestUnit: "minute",
+ roundingIncrement: 30,
+});
+console.log(nearestHalfHour.toString()); // 12:30:00
+
+const nextHour = time.round({ smallestUnit: "hour", roundingMode: "ceil" });
+console.log(nextHour.toString()); // 13:00:00
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainTime")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/second/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/second/index.md
new file mode 100644
index 000000000000000..3ce98ace07bb614
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/second/index.md
@@ -0,0 +1,55 @@
+---
+title: Temporal.PlainTime.prototype.second
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/second
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainTime.second
+---
+
+{{JSRef}}
+
+The **`second`** accessor property of {{jsxref("Temporal.PlainTime")}} instances returns a integer from 0 to 59 representing the second component of this time.
+
+The set accessor of `second` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainTime/with", "with()")}} method to create a new `Temporal.PlainTime` object with the desired new value.
+
+## Examples
+
+### Using second
+
+```js
+const time = Temporal.PlainTime.from("12:34:56");
+console.log(time.second); // 56
+```
+
+### Changing second
+
+```js
+const time = Temporal.PlainTime.from("12:34:56");
+const newTime = time.with({ second: 15 });
+console.log(newTime.toString()); // 12:34:15
+```
+
+You can also use {{jsxref("Temporal/PlainTime/add", "add()")}} or {{jsxref("Temporal/PlainTime/subtract", "subtract()")}} to move a certain number of seconds from the current time.
+
+```js
+const time = Temporal.PlainTime.from("12:34:56");
+const newTime = time.subtract({ seconds: 41 });
+console.log(newTime.toString()); // 12:34:15
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal/PlainTime/with", "Temporal.PlainTime.prototype.with()")}}
+- {{jsxref("Temporal/PlainTime/add", "Temporal.PlainTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainTime/subtract", "Temporal.PlainTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainTime/millisecond", "Temporal.PlainTime.prototype.millisecond")}}
+- {{jsxref("Temporal/PlainTime/microsecond", "Temporal.PlainTime.prototype.microsecond")}}
+- {{jsxref("Temporal/PlainTime/nanosecond", "Temporal.PlainTime.prototype.nanosecond")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/since/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/since/index.md
new file mode 100644
index 000000000000000..3edd687c0c67e03
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/since/index.md
@@ -0,0 +1,89 @@
+---
+title: Temporal.PlainTime.prototype.since()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/since
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainTime.since
+---
+
+{{JSRef}}
+
+The **`since()`** method of {{jsxref("Temporal.PlainTime")}} instances returns a new {{jsxref("Temporal.Duration")}} object representing the duration from another time (in a form convertible by {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}) to this time. The duration is positive if the other time is before this time, and negative if after.
+
+This method does `this - other`. To do `other - this`, use the {{jsxref("Temporal/PlainTime/until", "until()")}} method.
+
+## Syntax
+
+```js-nolint
+since(other)
+since(other, options)
+```
+
+### Parameters
+
+- `other`
+ - : A string, an object, or a {{jsxref("Temporal.PlainTime")}} instance representing a time to subtract from this time. It is converted to a `Temporal.PlainTime` object using the same algorithm as {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}.
+- `options` {{optional_inline}}
+ - : An object containing the options for {{jsxref("Temporal/Duration/round", "Temporal.Duration.prototype.round()")}}, which includes `largestUnit`, `roundingIncrement`, `roundingMode`, and `smallestUnit`. `largestUnit` and `smallestUnit` only accept the units: `"hour"`, `"minute"`, `"second"`, `"millisecond"`, `"microsecond"`, `"nanosecond"`, or their plural forms. For `largestUnit`, the default value `"auto"` means `"hour"`. For `smallestUnit`, the default value is `"nanosecond"`.
+
+### Return value
+
+A new {{jsxref("Temporal.Duration")}} object representing the duration _since_ `other` to this time. The duration is positive if `other` is before this time, and negative if after.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+
+## Examples
+
+### Using since()
+
+```js
+const lunchTime = Temporal.PlainTime.from("12:30:00");
+const now = Temporal.Now.plainTimeISO();
+const duration = now.since(lunchTime);
+console.log(`You had lunch ${duration.toLocaleString("en-US")} ago`);
+// Example output: "You had lunch 3 hr, 42 min, 21 sec, 343 ms, 131 μs, 718 ns ago"
+
+const duration2 = now.since(lunchTime, { smallestUnit: "minute" });
+console.log(`You had lunch ${duration2.toLocaleString("en-US")} ago`);
+// Example output: "You had lunch 3 hr, 42 min ago"
+
+const duration3 = now.since(lunchTime, {
+ largestUnit: "minute",
+ smallestUnit: "minute",
+});
+console.log(`You had lunch ${duration3.toLocaleString("en-US")} ago`);
+// Example output: "You had lunch 222 min ago"
+```
+
+### Rounding the result
+
+By default the fractional part of the `smallestUnit` is truncated. You can round it up using the `roundingIncrement` and `roundingMode` options.
+
+```js
+const time1 = Temporal.PlainTime.from("12:30:00");
+const time2 = Temporal.PlainTime.from("12:30:01");
+const duration = time2.since(time1, {
+ smallestUnit: "second",
+ roundingIncrement: 15,
+ roundingMode: "ceil",
+});
+console.log(duration.toString()); // "PT15S"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/PlainTime/add", "Temporal.PlainTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainTime/subtract", "Temporal.PlainTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainTime/until", "Temporal.PlainTime.prototype.until()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/subtract/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/subtract/index.md
new file mode 100644
index 000000000000000..5c880f9b28c3edf
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/subtract/index.md
@@ -0,0 +1,57 @@
+---
+title: Temporal.PlainTime.prototype.subtract()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/subtract
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainTime.subtract
+---
+
+{{JSRef}}
+
+The **`subtract()`** method of {{jsxref("Temporal.PlainTime")}} instances returns a new `Temporal.PlainTime` object representing this time moved backward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}), wrapping around the clock if necessary.
+
+If you want to subtract two times and get a duration, use {{jsxref("Temporal/PlainTime/since", "since()")}} or {{jsxref("Temporal/PlainTime/until", "until()")}} instead.
+
+## Syntax
+
+```js-nolint
+subtract(duration)
+```
+
+### Parameters
+
+- `duration`
+ - : A string, an object, or a {{jsxref("Temporal.Duration")}} instance representing a duration to subtract from this time. It is converted to a `Temporal.Duration` object using the same algorithm as {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}.
+
+### Return value
+
+A new `Temporal.PlainTime` object representing the time specified by the original `PlainTime`, minus the duration.
+
+Subtracting a duration is equivalent to [adding](Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/add) its [negation](Web/JavaScript/Reference/Global_Objects/Temporal/Duration/negated), so all the same considerations apply.
+
+## Examples
+
+### Subtracting a duration
+
+```js
+const start = Temporal.PlainTime.from("12:34:56");
+const end = start.subtract({ hours: 1, minutes: 30 });
+console.log(end.toString()); // 11:04:56
+```
+
+For more examples, see {{jsxref("Temporal/PlainTime/add", "add()")}}.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/PlainTime/add", "Temporal.PlainTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainTime/since", "Temporal.PlainTime.prototype.since()")}}
+- {{jsxref("Temporal/PlainTime/until", "Temporal.PlainTime.prototype.until()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/tojson/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/tojson/index.md
new file mode 100644
index 000000000000000..e87a12d5da3e694
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/tojson/index.md
@@ -0,0 +1,68 @@
+---
+title: Temporal.PlainTime.prototype.toJSON()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/toJSON
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainTime.toJSON
+---
+
+{{JSRef}}
+
+The **`toJSON()`** method of {{jsxref("Temporal.PlainTime")}} instances returns a string representing this time in the same [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime#rfc_9557_format) as calling {{jsxref("Temporal/PlainTime/toString", "toString()")}}. It is intended to be implicitly called by {{jsxref("JSON.stringify()")}}.
+
+## Syntax
+
+```js-nolint
+toJSON()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A string representing the given time in the [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime#rfc_9557_format).
+
+## Description
+
+The `toJSON()` method is automatically called by {{jsxref("JSON.stringify()")}} when a `Temporal.PlainTime` object is stringified. This method is generally intended to, by default, usefully serialize `Temporal.PlainTime` objects during [JSON](/en-US/docs/Glossary/JSON) serialization, which can then be deserialized using the {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}} function as the reviver of {{jsxref("JSON.parse()")}}.
+
+## Examples
+
+### Using toJSON()
+
+```js
+const time = Temporal.PlainTime.from({ hour: 12, minute: 34, second: 56 });
+const timeStr = time.toJSON(); // '12:34:56'
+const t2 = Temporal.PlainTime.from(timeStr);
+```
+
+### JSON serialization and parsing
+
+This example shows how `Temporal.PlainTime` can be serialized as JSON without extra effort, and how to parse it back.
+
+```js
+const time = Temporal.PlainTime.from({ hour: 12, minute: 34, second: 56 });
+const jsonStr = JSON.stringify({ time }); // '{"time":"12:34:56"}'
+const obj = JSON.parse(jsonStr, (key, value) => {
+ if (key === "time") {
+ return Temporal.PlainTime.from(value);
+ }
+ return value;
+});
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}
+- {{jsxref("Temporal/PlainTime/toString", "Temporal.PlainTime.prototype.toString()")}}
+- {{jsxref("Temporal/PlainTime/toLocaleString", "Temporal.PlainTime.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/tolocalestring/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/tolocalestring/index.md
new file mode 100644
index 000000000000000..37be08126983c2b
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/tolocalestring/index.md
@@ -0,0 +1,91 @@
+---
+title: Temporal.PlainTime.prototype.toLocaleString()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/toLocaleString
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainTime.toLocaleString
+---
+
+{{JSRef}}
+
+The **`toLocaleString()`** method of {{jsxref("Temporal.PlainTime")}} instances returns a string with a language-sensitive representation of this time. In implementations with [`Intl.DateTimeFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat) support, this method delegates to `Intl.DateTimeFormat`.
+
+Every time `toLocaleString` is called, it has to perform a search in a big database of localization strings, which is potentially inefficient. When the method is called many times with the same arguments, it is better to create a {{jsxref("Intl.DateTimeFormat")}} object and use its {{jsxref("Intl/DateTimeFormat/format", "format()")}} method, because a `DateTimeFormat` object remembers the arguments passed to it and may decide to cache a slice of the database, so future `format` calls can search for localization strings within a more constrained context.
+
+## Syntax
+
+```js-nolint
+toLocaleString()
+toLocaleString(locales)
+toLocaleString(locales, options)
+```
+
+### Parameters
+
+The `locales` and `options` parameters customize the behavior of the function and let applications specify the language whose formatting conventions should be used.
+
+In implementations that support the [`Intl.DateTimeFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat), these parameters correspond exactly to the [`Intl.DateTimeFormat()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat) constructor's parameters. Implementations without `Intl.DateTimeFormat` support return the exact same string as {{jsxref("Temporal/PlainTime/toString", "toString()")}}, ignoring both parameters.
+
+- `locales` {{optional_inline}}
+ - : A string with a BCP 47 language tag, or an array of such strings. Corresponds to the [`locales`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#locales) parameter of the `Intl.DateTimeFormat()` constructor.
+- `options` {{optional_inline}}
+
+ - : An object adjusting the output format. Corresponds to the [`options`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#options) parameter of the `Intl.DateTimeFormat()` constructor. Regarding the [date-time component options](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#date-time_component_options) and the style shortcuts (`dateStyle` and `timeStyle`), the options should follow one of these forms:
+
+ - Provide none of them: `hour`, `minute`, and `second` will default to `"numeric"`.
+ - Provide `timeStyle` only: it expands to `dayPeriod`, `hour`, `minute`, `second`, and `fractionalSecondDigits` formats.
+ - Provide some date-time component options, where at least one of them is a time option (`dayPeriod`, `hour`, `minute`, `second`, `fractionalSecondDigits`). Only the specified time components will be included in the output.
+
+See the [`Intl.DateTimeFormat()` constructor](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat) for details on these parameters and how to use them.
+
+### Return value
+
+A string representing the given time according to language-specific conventions.
+
+In implementations with `Intl.DateTimeFormat`, this is equivalent to `new Intl.DateTimeFormat(locales, options).format(time)`, where `options` has been normalized as described above.
+
+> [!NOTE]
+> Most of the time, the formatting returned by `toLocaleString()` is consistent. However, the output may vary between implementations, even within the same locale — output variations are by design and allowed by the specification. It may also not be what you expect. For example, the string may use non-breaking spaces or be surrounded by bidirectional control characters. You should not compare the results of `toLocaleString()` to hardcoded constants.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+- {{jsxref("TypeError")}}
+ - : Thrown if any of the options is not of the expected type.
+
+## Examples
+
+### Using toLocaleString()
+
+Basic use of this method without specifying a `locale` returns a formatted string in the default locale and with default options.
+
+```js
+const time = Temporal.PlainTime.from("12:34:56");
+
+console.log(time.toLocaleString()); // 12:34:56 PM (assuming en-US locale)
+```
+
+### Using toLocaleString() with options
+
+You can customize which parts of the time are included in the output by providing the `options` parameter.
+
+```js
+const time = Temporal.PlainTime.from("12:34:56");
+time.toLocaleString("en-US", { timeStyle: "short" }); // 12:34 PM
+time.toLocaleString("en-US", { hour: "2-digit" }); // 12 PM
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Intl.DateTimeFormat")}}
+- {{jsxref("Temporal/PlainTime/toJSON", "Temporal.PlainTime.prototype.toJSON()")}}
+- {{jsxref("Temporal/PlainTime/toString", "Temporal.PlainTime.prototype.toString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/tostring/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/tostring/index.md
new file mode 100644
index 000000000000000..2981846c2a3e831
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/tostring/index.md
@@ -0,0 +1,79 @@
+---
+title: Temporal.PlainTime.prototype.toString()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/toString
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainTime.toString
+---
+
+{{JSRef}}
+
+The **`toString()`** method of {{jsxref("Temporal.PlainTime")}} instances returns a string representing this time in the [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime#rfc_9557_format).
+
+## Syntax
+
+```js-nolint
+toString()
+toString(options)
+```
+
+### Parameters
+
+- `options` {{optional_inline}}
+ - : An object containing some or all of the following properties (in the order they are retrieved and validated):
+ - `fractionalSecondDigits` {{optional_inline}}
+ - : Either an integer from 0 to 9, or the string `"auto"`. The default is `"auto"`. If `"auto"`, then trailing zeros are removed from the fractional seconds. Otherwise, the fractional part of the second component contains this many digits, padded with zeros or rounded as necessary.
+ - `roundingMode` {{optional_inline}}
+ - : A string specifying how to round off fractional second digits beyond `fractionalSecondDigits`. See [`Intl.NumberFormat()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#roundingmode). Defaults to `"trunc"`.
+ - `smallestUnit` {{optional_inline}}
+ - : A string specifying the smallest unit to include in the output. Possible values are `"minute"`, `"second"`, `"millisecond"`, `"microsecond"`, and `"nanosecond"`, or their plural forms, which (except `"minute"`) are equivalent to `fractionalSecondDigits` values of `0`, `3`, `6`, `9`, respectively. If specified, then `fractionalSecondDigits` is ignored.
+
+### Return value
+
+A string in the [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime#rfc_9557_format) representing this time.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+- {{jsxref("TypeError")}}
+ - : Thrown if `options` is not an object or `undefined`.
+
+## Examples
+
+### Using toString()
+
+```js
+const time = Temporal.PlainTime.from("12:34:56");
+console.log(time.toString()); // '12:34:56'
+```
+
+### Using options
+
+```js
+const time1 = Temporal.PlainTime.from("12:00:00");
+console.log(time1.toString()); // '12:00:00'
+console.log(time1.toString({ fractionalSecondDigits: 1 })); // '12:00:00.0'
+console.log(time1.toString({ smallestUnit: "minute" })); // '12:00'
+console.log(time1.toString({ smallestUnit: "nanosecond" })); // '12:00:00.000000000'
+
+const time2 = Temporal.PlainTime.from("12:34:56.123456789");
+console.log(time2.toString({ fractionalSecondDigits: 4 })); // '12:34:56.1234'
+console.log(
+ time2.toString({ fractionalSecondDigits: 4, roundingMode: "halfExpand" }),
+); // '12:34:56.1235'
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}
+- {{jsxref("Temporal/PlainTime/toJSON", "Temporal.PlainTime.prototype.toJSON()")}}
+- {{jsxref("Temporal/PlainTime/toLocaleString", "Temporal.PlainTime.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/until/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/until/index.md
new file mode 100644
index 000000000000000..a7fd20f704dc425
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/until/index.md
@@ -0,0 +1,65 @@
+---
+title: Temporal.PlainTime.prototype.until()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/until
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainTime.until
+---
+
+{{JSRef}}
+
+The **`until()`** method of {{jsxref("Temporal.PlainTime")}} instances returns a new {{jsxref("Temporal.Duration")}} object representing the duration from this time to another time (in a form convertible by {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}). The duration is positive if the other time is after this time, and negative if before.
+
+This method does `other - this`. To do `this - other`, use the {{jsxref("Temporal/PlainTime/since", "since()")}} method.
+
+## Syntax
+
+```js-nolint
+until(other)
+until(other, options)
+```
+
+### Parameters
+
+- `other`
+ - : A string, an object, or a {{jsxref("Temporal.PlainTime")}} instance representing a time to subtract this time from. It is converted to a `Temporal.PlainTime` object using the same algorithm as {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}. It must have the same calendar as `this`.
+- `options` {{optional_inline}}
+ - : The same options as [`since()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/since#options).
+
+### Return value
+
+A new {{jsxref("Temporal.Duration")}} object representing the duration from this time _until_ `other`. The duration is positive if `other` is after this time, and negative if before.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+
+## Examples
+
+### Using until()
+
+```js
+const lunchTime = Temporal.PlainTime.from("12:30:00");
+const now = Temporal.Now.plainTimeISO();
+const duration = now.until(lunchTime);
+console.log(`It will be ${duration.toLocaleString("en-US")} until lunch`);
+// Example output: "It will be 3 hr, 42 min, 21 sec, 343 ms, 131 μs, 718 ns until lunch"
+```
+
+For more examples, see [`since()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/since).
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/PlainTime/add", "Temporal.PlainTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainTime/subtract", "Temporal.PlainTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainTime/since", "Temporal.PlainTime.prototype.since()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/valueof/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/valueof/index.md
new file mode 100644
index 000000000000000..eac31fabcb03eb0
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/valueof/index.md
@@ -0,0 +1,64 @@
+---
+title: Temporal.PlainTime.prototype.valueOf()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/valueOf
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainTime.valueOf
+---
+
+{{JSRef}}
+
+The **`valueOf()`** method of {{jsxref("Temporal.PlainTime")}} instances throws a {{jsxref("TypeError")}}, which prevents `Temporal.PlainTime` instances from being [implicitly converted to primitives](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) when used in arithmetic or comparison operations.
+
+## Syntax
+
+```js-nolint
+valueOf()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+None.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Always thrown.
+
+## Description
+
+Because both [primitive conversion](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) and [number conversion](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number#number_coercion) call `valueOf()` before `toString()`, if `valueOf()` is absent, then an expression like `time1 > time2` would implicitly compare them as strings, which may have unexpected results. By throwing a `TypeError`, `Temporal.PlainTime` instances prevent such implicit conversions. You need to explicitly convert them to strings using {{jsxref("Temporal/PlainTime/toString", "Temporal.PlainTime.prototype.toString()")}}, or use the {{jsxref("Temporal/PlainTime/compare", "Temporal.PlainTime.compare()")}} static method to compare them.
+
+## Examples
+
+### Arithmetic and comparison operations on Temporal.PlainTime
+
+All arithmetic and comparison operations on `Temporal.PlainTime` instances should use the dedicated methods or convert them to primitives explicitly.
+
+```js
+const time1 = Temporal.PlainTime.from("00:00:00");
+const time2 = Temporal.PlainTime.from("12:00:00");
+time1 > time2; // TypeError: can't convert PlainTime to primitive type
+Temporal.PlainTime.compare(time1, time2); // -1
+
+time2 - time1; // TypeError: can't convert PlainTime to primitive type
+time2.since(time1).toString(); // "PT12H"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal/PlainTime/toString", "Temporal.PlainTime.prototype.toString()")}}
+- {{jsxref("Temporal/PlainTime/toJSON", "Temporal.PlainTime.prototype.toJSON()")}}
+- {{jsxref("Temporal/PlainTime/toLocaleString", "Temporal.PlainTime.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/with/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/with/index.md
new file mode 100644
index 000000000000000..5928edc6ec68aeb
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plaintime/with/index.md
@@ -0,0 +1,70 @@
+---
+title: Temporal.PlainTime.prototype.with()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime/with
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainTime.with
+---
+
+{{JSRef}}
+
+The **`with()`** method of {{jsxref("Temporal.PlainTime")}} instances returns a new `Temporal.PlainTime` object representing this time with some fields replaced by new values. Because all `Temporal` objects are designed to be immutable, this method essentially functions as the setter for the time's fields.
+
+## Syntax
+
+```js-nolint
+with(info)
+with(info, options)
+```
+
+### Parameters
+
+- `info`
+ - : An object containing at least one of the properties recognized by {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}: `hour`, `microsecond`, `millisecond`, `minute`, `nanosecond`, `second`. Unspecified properties use the values from the original time.
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `overflow` {{optional_inline}}
+ - : A string specifying the behavior when a time component is out of range. Possible values are:
+ - `"constrain"` (default)
+ - : The time component is clamped to the valid range.
+ - `"reject"`
+ - : A {{jsxref("RangeError")}} is thrown if the time component is out of range.
+
+### Return value
+
+A new `Temporal.PlainTime` object, where the fields specified in `info` that are not `undefined` are replaced by the corresponding values, and the rest of the fields are copied from the original time.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Thrown in one of the following cases:
+ - `info` is not an object with at least one recognized property or a string.
+ - `options` is not an object or `undefined`.
+- {{jsxref("RangeError")}}
+ - : Thrown if the provided numerical properties are out of range, and `options.overflow` is set to `"reject"`.
+
+## Examples
+
+### Using with()
+
+```js
+const time = Temporal.PlainTime.from("12:34:56.123456789");
+const newTime = time.with({ hour: 23 });
+console.log(newTime.toString()); // '23:34:56.123456789'
+```
+
+For more examples, see the documentation for the individual properties that can be set using `with()`.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}
+- {{jsxref("Temporal/PlainTime/add", "Temporal.PlainTime.prototype.add()")}}
+- {{jsxref("Temporal/PlainTime/subtract", "Temporal.PlainTime.prototype.subtract()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/add/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/add/index.md
new file mode 100644
index 000000000000000..cb8d8e328a50cd8
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/add/index.md
@@ -0,0 +1,152 @@
+---
+title: Temporal.PlainYearMonth.prototype.add()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/add
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.add
+---
+
+{{JSRef}}
+
+The **`add()`** method of {{jsxref("Temporal.PlainYearMonth")}} instances returns a new `Temporal.PlainYearMonth` object representing this year-month moved forward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}).
+
+## Syntax
+
+```js-nolint
+add(duration)
+add(duration, options)
+```
+
+### Parameters
+
+- `duration`
+ - : A string, an object, or a {{jsxref("Temporal.Duration")}} instance representing a duration to add to this year-month. It is converted to a `Temporal.Duration` object using the same algorithm as {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}.
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `overflow` {{optional_inline}}
+ - : A string specifying the behavior when a date component is out of range. Possible values are:
+ - `"constrain"` (default)
+ - : The date component is [clamped](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#invalid_date_clamping) to the valid range.
+ - `"reject"`
+ - : A {{jsxref("RangeError")}} is thrown if the date component is out of range.
+
+### Return value
+
+A new `Temporal.PlainYearMonth` object representing the year-month specified by the original `PlainYearMonth`, plus the duration.
+
+## Description
+
+The `duration` is handled in this way:
+
+- Move forward by the number of years, keeping the `monthCode` the same. If the `monthCode` is invalid in the resulting year (impossible for Gregorian and ISO 8601, but possible for calendars with leap months), we adjust based on the `overflow` option: for `constrain`, we pick another month according to the cultural conventions of that calendar's users. For example, because the leap month is usually thought of as a duplicate of another month, we may pick the month that it is a duplicate of.
+- Move forward by the number of months, adjusting the year if necessary.
+- For all units smaller than `months` (weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds), they are converted to the number of days. All commonly supported calendars use fixed-length weeks, so the number of weeks is just converted to the number of days. If the rule is more complex, we may take an approach similar to shifting months. Then, we move forward by that number of days, starting on the first day of the month, adjusting the month and year if necessary. Durations smaller than the current month's length therefore have no effect.
+
+The internal reference day is then chosen to be the first valid day of the month, irrespective of the original reference day or the number of days in the duration. For the Gregorian calendar, overflow cannot happen because every year always has 12 months, and any increment less than a month is just ignored.
+
+Adding a duration is equivalent to [subtracting](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/subtract) its [negation](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/negated).
+
+## Examples
+
+### Adding a duration in ISO 8601 calendar
+
+```js
+const start = Temporal.PlainYearMonth.from("2021-01");
+const end = start.add({ years: 1, months: 2, weeks: 3, days: 4 });
+console.log(end.toString()); // 2022-03
+
+const end2 = start.add({ years: -1, months: -2, weeks: -3, days: -4 });
+console.log(end2.toString()); // 2019-11
+
+const distance = Temporal.PlainYearMonth.from("2020-01").until("2021-01"); // 366 days
+const end3 = start.add(distance);
+console.log(end3.toString()); // 2022-01
+```
+
+### Adding a duration in a non-ISO calendar
+
+```js
+const start = Temporal.PlainYearMonth.from("2021-02-01[u-ca=chinese]");
+console.log(start.toLocaleString("en-US", { calendar: "chinese" })); // 11/2020
+console.log(start.toString()); // 2021-01-13[u-ca=chinese]
+const end = start.add({ months: 1 });
+console.log(end.toLocaleString("en-US", { calendar: "chinese" })); // 12/2020
+console.log(end.toString()); // 2021-02-12[u-ca=chinese]
+
+// Adding an extra day has no effect at all
+const end2 = start.add({ months: 1, days: 1 });
+console.log(end2.toLocaleString("en-US", { calendar: "chinese" })); // 12/2020
+// The reference day doesn't change, because it's always the first day of the Chinese month
+console.log(end2.toString()); // 2021-02-12[u-ca=chinese]
+
+// Start in a leap month
+const start2 = Temporal.PlainYearMonth.from({
+ year: 5730,
+ monthCode: "M05L",
+ calendar: "hebrew",
+});
+console.log(start2.toLocaleString("en-US", { calendar: "hebrew" })); // Adar I 5730
+// End in another leap month
+const end3 = start2.add({ years: 3 });
+console.log(end3.toLocaleString("en-US", { calendar: "hebrew" })); // Adar I 5733
+```
+
+### Adding a duration with overflow
+
+If we move a few years and the corresponding month is invalid in this year, then we adjust the month based on the `overflow` option.
+
+```js
+// Start in a leap month
+const start = Temporal.PlainYearMonth.from({
+ year: 5730,
+ monthCode: "M05L",
+ calendar: "hebrew",
+});
+// Hebrew leap years occur every 2 or 3 years, and 5731 is not a leap year
+const end = start.add({ years: 1 });
+console.log(end.toLocaleString("en-US", { calendar: "hebrew" })); // Adar 5731
+console.log(end.monthCode); // M06
+console.log(end.toString()); // 1971-02-26[u-ca=hebrew]
+
+// Any further month additions are based on the clamped year-month
+const end2 = start.add({ years: 1, months: 2 });
+console.log(end2.monthCode); // M08
+console.log(end2.toString()); // 1971-04-26[u-ca=hebrew]
+
+// Compare with the same addition in a different order that results in no overflow:
+const end3 = start.add({ months: 2 }).add({ years: 1 });
+console.log(end3.monthCode); // M07
+console.log(end3.toString()); // 1971-03-27[u-ca=hebrew]
+```
+
+Note that the following is not an overflow because the year can just increment:
+
+```js
+const start = Temporal.PlainYearMonth.from("2021-01");
+const end = start.add({ months: 100 });
+console.log(end.toString()); // 2029-05
+```
+
+You can also throw an error if the date component is out of range:
+
+```js
+const start = Temporal.PlainYearMonth.from({
+ year: 5730,
+ monthCode: "M05L",
+ calendar: "hebrew",
+});
+const end = start.add({ years: 1 }, { overflow: "reject" }); // RangeError: invalid "monthCode" calendar field: M05L
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/PlainYearMonth/subtract", "Temporal.PlainYearMonth.prototype.subtract()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/calendarid/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/calendarid/index.md
new file mode 100644
index 000000000000000..d9b9e892db50116
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/calendarid/index.md
@@ -0,0 +1,55 @@
+---
+title: Temporal.PlainYearMonth.prototype.calendarId
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/calendarId
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.calendarId
+---
+
+{{JSRef}}
+
+The **`calendarId`** accessor property of {{jsxref("Temporal.PlainYearMonth")}} instances returns a string representing the [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars) used to interpret the internal ISO 8601 date.
+
+For a list of commonly supported values, see {{jsxref("Intl/Locale/getCalendars", "Intl.Locale.prototype.getCalendars()")}}.
+
+The set accessor of `calendarId` is `undefined`. You cannot change this property directly. There's no obvious way to create a new `Temporal.PlainYearMonth` object with a different calendar that represents the same year-month, so you need to convert it to a {{jsxref("Temporal.PlainDate")}} object first using {{jsxref("Temporal/PlainYearMonth/toPlainDate", "toPlainDate()")}}, change the calendar, and then convert it back.
+
+## Examples
+
+### Using calendarId
+
+```js
+const ym = Temporal.PlainYearMonth.from("2021-07");
+console.log(ym.calendarId); // "iso8601"; default
+
+const ym2 = Temporal.PlainYearMonth.from("2021-07-01[u-ca=chinese]");
+console.log(ym2.calendarId); // "chinese"
+```
+
+### Changing calendarId
+
+```js
+const ym = Temporal.PlainYearMonth.from("2021-07");
+const newYM = ym
+ .toPlainDate({ day: 1 })
+ .withCalendar("chinese")
+ .toPlainYearMonth();
+console.log(newYM.year, newYM.monthCode); // 2021 "M05"
+
+const newYM2 = ym
+ .toPlainDate({ day: 31 })
+ .withCalendar("chinese")
+ .toPlainYearMonth();
+console.log(newYM2.year, newYM2.monthCode); // 2021 "M06"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/compare/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/compare/index.md
new file mode 100644
index 000000000000000..bc0af673bd78c7b
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/compare/index.md
@@ -0,0 +1,96 @@
+---
+title: Temporal.PlainYearMonth.compare()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/compare
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.compare
+---
+
+{{JSRef}}
+
+The **`Temporal.PlainYearMonth.compare()`** static method returns a number (-1, 0, or 1) indicating whether the first year-month comes before, is the same as, or comes after the second year-month. It is equivalent to comparing their underlying ISO 8601 dates. Two year-months from different calendars may be considered equal if they start on the same ISO date.
+
+> **Note:** `PlainYearMonth` objects keep track of a reference ISO day, which is also used in the comparison. This day is automatically set when using the {{jsxref("Temporal/PlainYearMonth/from", "Temporal.PlainYearMonth.from()")}} method, but can be set manually using the {{jsxref("Temporal/PlainYearMonth/PlainYearMonth", "Temporal.PlainYearMonth()")}} constructor, causing two equivalent year-months to be considered different if they have different reference days. For this reason, you should avoid using the constructor directly and prefer the `from()` method.
+
+## Syntax
+
+```js-nolint
+Temporal.PlainYearMonth.compare(yearMonth1, yearMonth2)
+```
+
+### Parameters
+
+- `yearMonth1`
+ - : A string, an object, or a {{jsxref("Temporal.PlainYearMonth")}} instance representing the first year-month to compare. It is converted to a `Temporal.PlainYearMonth` object using the same algorithm as {{jsxref("Temporal/PlainYearMonth/from", "Temporal.PlainYearMonth.from()")}}.
+- `yearMonth2`
+ - : The second year-month to compare, converted to a `Temporal.PlainYearMonth` object using the same algorithm as `yearMonth1`.
+
+### Return value
+
+Returns `-1` if `yearMonth1` comes before `yearMonth2`, `0` if they are the same, and `1` if `yearMonth2` comes after. They are compared by their underlying date values, ignoring their calendars.
+
+## Examples
+
+### Using Temporal.PlainYearMonth.compare()
+
+```js
+const ym1 = Temporal.PlainYearMonth.from("2021-08");
+const ym2 = Temporal.PlainYearMonth.from("2021-09");
+console.log(Temporal.PlainYearMonth.compare(ym1, ym2)); // -1
+
+const ym3 = Temporal.PlainYearMonth.from("2021-07");
+console.log(Temporal.PlainYearMonth.compare(ym1, ym3)); // 1
+```
+
+### Comparing year-months in different calendars
+
+```js
+const ym1 = Temporal.PlainYearMonth.from({ year: 2021, month: 8 });
+const ym2 = Temporal.PlainYearMonth.from({
+ year: 2021,
+ month: 8,
+ calendar: "islamic",
+});
+const ym3 = Temporal.PlainYearMonth.from({
+ year: 2021,
+ month: 8,
+ calendar: "hebrew",
+});
+console.log(ym1.toString()); // "2021-08"
+console.log(ym2.toString()); // "2582-12-18[u-ca=islamic]"
+console.log(ym3.toString()); // "-001739-04-06[u-ca=hebrew]"
+console.log(Temporal.PlainYearMonth.compare(ym1, ym2)); // -1
+console.log(Temporal.PlainYearMonth.compare(ym1, ym3)); // 1
+```
+
+### Sorting an array of year-months
+
+The purpose of this `compare()` function is to act as a comparator to be passed to {{jsxref("Array.prototype.sort()")}} and related functions.
+
+```js
+const months = [
+ Temporal.PlainYearMonth.from({ year: 2021, month: 8 }),
+ Temporal.PlainYearMonth.from({
+ year: 2021,
+ month: 8,
+ calendar: "islamic",
+ }),
+ Temporal.PlainYearMonth.from({ year: 2021, month: 8, calendar: "hebrew" }),
+];
+
+months.sort(Temporal.PlainYearMonth.compare);
+console.log(months.map((d) => d.toString()));
+// [ "-001739-04-06[u-ca=hebrew]", "2021-08", "2582-12-18[u-ca=islamic]" ]
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal/PlainYearMonth/equals", "Temporal.PlainYearMonth.prototype.equals()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/daysinmonth/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/daysinmonth/index.md
new file mode 100644
index 000000000000000..2e63593d47cdc8a
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/daysinmonth/index.md
@@ -0,0 +1,42 @@
+---
+title: Temporal.PlainYearMonth.prototype.daysInMonth
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/daysInMonth
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.daysInMonth
+---
+
+{{JSRef}}
+
+The **`daysInMonth`** accessor property of {{jsxref("Temporal.PlainYearMonth")}} instances returns a positive integer representing the number of days in the month of this date. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `daysInMonth` is `undefined`. You cannot change this property directly.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/daysInMonth", "Temporal.PlainDate.prototype.daysInMonth")}}.
+
+## Examples
+
+### Using daysInMonth
+
+```js
+const ym = Temporal.PlainYearMonth.from("2021-07");
+console.log(ym.daysInMonth); // 31
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal/PlainYearMonth/with", "Temporal.PlainYearMonth.prototype.with()")}}
+- {{jsxref("Temporal/PlainYearMonth/add", "Temporal.PlainYearMonth.prototype.add()")}}
+- {{jsxref("Temporal/PlainYearMonth/subtract", "Temporal.PlainYearMonth.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainYearMonth/year", "Temporal.PlainYearMonth.prototype.year")}}
+- {{jsxref("Temporal/PlainYearMonth/month", "Temporal.PlainYearMonth.prototype.month")}}
+- {{jsxref("Temporal/PlainYearMonth/daysInYear", "Temporal.PlainYearMonth.prototype.daysInYear")}}
+- {{jsxref("Temporal/PlainDate/daysInMonth", "Temporal.PlainDate.prototype.daysInMonth")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/daysinyear/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/daysinyear/index.md
new file mode 100644
index 000000000000000..33fbf0a05c6ed14
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/daysinyear/index.md
@@ -0,0 +1,41 @@
+---
+title: Temporal.PlainYearMonth.prototype.daysInYear
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/daysInYear
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.daysInYear
+---
+
+{{JSRef}}
+
+The **`daysInYear`** accessor property of {{jsxref("Temporal.PlainYearMonth")}} instances returns a positive integer representing the number of days in the year of this date. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `daysInYear` is `undefined`. You cannot change this property directly.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/daysInYear", "Temporal.PlainDate.prototype.daysInYear")}}.
+
+## Examples
+
+### Using daysInYear
+
+```js
+const ym = Temporal.PlainYearMonth.from("2021-07");
+console.log(ym.daysInYear); // 365
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal/PlainYearMonth/with", "Temporal.PlainYearMonth.prototype.with()")}}
+- {{jsxref("Temporal/PlainYearMonth/add", "Temporal.PlainYearMonth.prototype.add()")}}
+- {{jsxref("Temporal/PlainYearMonth/subtract", "Temporal.PlainYearMonth.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainYearMonth/year", "Temporal.PlainYearMonth.prototype.year")}}
+- {{jsxref("Temporal/PlainYearMonth/daysInMonth", "Temporal.PlainYearMonth.prototype.daysInMonth")}}
+- {{jsxref("Temporal/PlainDate/daysInYear", "Temporal.PlainDate.prototype.daysInYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/equals/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/equals/index.md
new file mode 100644
index 000000000000000..df2a8f0ae974a44
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/equals/index.md
@@ -0,0 +1,56 @@
+---
+title: Temporal.PlainYearMonth.prototype.equals()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/equals
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.equals
+---
+
+{{JSRef}}
+
+The **`equals()`** method of {{jsxref("Temporal.PlainYearMonth")}} instances returns `true` if this year-month is equivalent in value to another year-month (in a form convertible by {{jsxref("Temporal/PlainYearMonth/from", "Temporal.PlainYearMonth.from()")}}), and `false` otherwise. They are compared both by their underlying ISO date values and their calendars, so two year-months from different calendars may be considered equal by {{jsxref("Temporal/PlainYearMonth/compare", "Temporal.PlainYearMonth.compare()")}} but not by `equals()`.
+
+> **Note:** `PlainYearMonth` objects keep track of a reference ISO day, which is also used in the comparison. This day is automatically set when using the {{jsxref("Temporal/PlainYearMonth/from", "Temporal.PlainYearMonth.from()")}} method, but can be set manually using the {{jsxref("Temporal/PlainYearMonth/PlainYearMonth", "Temporal.PlainYearMonth()")}} constructor, causing two equivalent year-months to be considered different if they have different reference days. For this reason, you should avoid using the constructor directly and prefer the `from()` method.
+
+## Syntax
+
+```js-nolint
+equals(other)
+```
+
+### Parameters
+
+- `other`
+ - : A string, an object, or a {{jsxref("Temporal.PlainYearMonth")}} instance representing the other year-month to compare. It is converted to a `Temporal.PlainYearMonth` object using the same algorithm as {{jsxref("Temporal/PlainYearMonth/from", "Temporal.PlainYearMonth.from()")}}.
+
+### Return value
+
+`true` if this year-month is equal to `other` both in their date value and their calendar, `false` otherwise.
+
+## Examples
+
+### Using equals()
+
+```js
+const ym1 = Temporal.PlainYearMonth.from("2021-08");
+const ym2 = Temporal.PlainYearMonth.from({ year: 2021, month: 8 });
+console.log(ym1.equals(ym2)); // true
+
+const ym3 = Temporal.PlainYearMonth.from("2021-08-01[u-ca=japanese]");
+console.log(ym1.equals(ym3)); // false
+
+const ym4 = Temporal.PlainYearMonth.from("2021-09");
+console.log(ym1.equals(ym4)); // false
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal/PlainYearMonth/compare", "Temporal.PlainYearMonth.compare()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/era/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/era/index.md
new file mode 100644
index 000000000000000..a73f0d6b0aa6d9f
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/era/index.md
@@ -0,0 +1,44 @@
+---
+title: Temporal.PlainYearMonth.prototype.era
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/era
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.era
+---
+
+{{JSRef}}
+
+The **`era`** accessor property of {{jsxref("Temporal.PlainYearMonth")}} instances returns a calendar-specific lowercase string representing the era of this year-month, or `undefined` if the calendar does not use eras (e.g. ISO 8601). `era` and `eraYear` together uniquely identify a year in a calendar, in the same way that `year` does. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `era` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainYearMonth/with", "with()")}} method to create a new `Temporal.PlainYearMonth` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/era", "Temporal.PlainDate.prototype.era")}}.
+
+## Examples
+
+### Using era
+
+```js
+const ym = Temporal.PlainYearMonth.from("2021-07"); // ISO 8601 calendar
+console.log(ym.era); // undefined
+
+const ym2 = Temporal.PlainYearMonth.from("2021-07-01[u-ca=gregory]");
+console.log(ym2.era); // gregory
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal/PlainYearMonth/with", "Temporal.PlainYearMonth.prototype.with()")}}
+- {{jsxref("Temporal/PlainYearMonth/add", "Temporal.PlainYearMonth.prototype.add()")}}
+- {{jsxref("Temporal/PlainYearMonth/subtract", "Temporal.PlainYearMonth.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainYearMonth/year", "Temporal.PlainYearMonth.prototype.year")}}
+- {{jsxref("Temporal/PlainYearMonth/eraYear", "Temporal.PlainYearMonth.prototype.eraYear")}}
+- {{jsxref("Temporal/PlainDate/era", "Temporal.PlainDate.prototype.era")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/erayear/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/erayear/index.md
new file mode 100644
index 000000000000000..84b1a81ddf12211
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/erayear/index.md
@@ -0,0 +1,50 @@
+---
+title: Temporal.PlainYearMonth.prototype.eraYear
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/eraYear
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.eraYear
+---
+
+{{JSRef}}
+
+The **`eraYear`** accessor property of {{jsxref("Temporal.PlainYearMonth")}} instances returns a non-negative integer representing the year of this year-month within the era, or `undefined` if the calendar does not use eras (e.g. ISO 8601). The year index usually starts from 1 (more common) or 0, and years in an era can decrease with time (e.g. Gregorian BCE). `era` and `eraYear` together uniquely identify a year in a calendar, in the same way that `year` does. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `eraYear` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainYearMonth/with", "with()")}} method to create a new `Temporal.PlainYearMonth` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/eraYear", "Temporal.PlainDate.prototype.eraYear")}}.
+
+## Examples
+
+### Using eraYear
+
+```js
+const ym = Temporal.PlainYearMonth.from("2021-07"); // ISO 8601 calendar
+console.log(ym.eraYear); // undefined
+
+const ym2 = Temporal.PlainYearMonth.from("2021-07-01[u-ca=gregory]");
+console.log(ym2.eraYear); // 2021
+
+const ym3 = Temporal.PlainYearMonth.from("-002021-07-01[u-ca=gregory]");
+console.log(ym3.eraYear); // 2022; 0000 is used for the year 1 BC
+
+const ym4 = Temporal.PlainYearMonth.from("2021-07-01[u-ca=japanese]");
+console.log(ym4.eraYear); // 3
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal/PlainYearMonth/with", "Temporal.PlainYearMonth.prototype.with()")}}
+- {{jsxref("Temporal/PlainYearMonth/add", "Temporal.PlainYearMonth.prototype.add()")}}
+- {{jsxref("Temporal/PlainYearMonth/subtract", "Temporal.PlainYearMonth.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainYearMonth/year", "Temporal.PlainYearMonth.prototype.year")}}
+- {{jsxref("Temporal/PlainYearMonth/era", "Temporal.PlainYearMonth.prototype.era")}}
+- {{jsxref("Temporal/PlainDate/eraYear", "Temporal.PlainDate.prototype.eraYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/from/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/from/index.md
new file mode 100644
index 000000000000000..a933120051c1cae
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/from/index.md
@@ -0,0 +1,137 @@
+---
+title: Temporal.PlainYearMonth.from()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/from
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.from
+---
+
+{{JSRef}}
+
+The **`Temporal.PlainYearMonth.from()`** static method creates a new `Temporal.PlainYearMonth` object from another `Temporal.PlainYearMonth` object, an object with year and month properties, or an [RFC 9557](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth#rfc_9557_format) string.
+
+## Syntax
+
+```js-nolint
+Temporal.PlainYearMonth.from(info)
+Temporal.PlainYearMonth.from(info, options)
+```
+
+### Parameters
+
+- `info`
+
+ - : One of the following:
+
+ - A {{jsxref("Temporal.PlainYearMonth")}} instance, which creates a copy of the instance.
+ - An [RFC 9557](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth#rfc_9557_format) string containing a date and optionally a calendar. If the calendar is not `iso8601`, a day is required.
+ - An object containing the following properties (in the order they are retrieved and validated):
+ - `calendar` {{optional_inline}}
+ - : A string that corresponds to the {{jsxref("Temporal/PlainYearMonth/calendarId", "calendarId")}} property. Defaults to `"iso8601"`. All other properties are interpreted in this calendar system (unlike the {{jsxref("Temporal/PlainYearMonth/PlainYearMonth", "Temporal.PlainYearMonth()")}} constructor, which interprets the values in the ISO calendar system).
+ - `era` and `eraYear`
+ - : A string and an integer that correspond to the {{jsxref("Temporal/PlainYearMonth/era", "era")}} and {{jsxref("Temporal/PlainYearMonth/eraYear", "eraYear")}} properties. Are only used if the calendar system has eras. `era` and `eraYear` must be provided simultaneously. If they are not provided, then `year` must be provided. If all of `era`, `eraYear`, and `year` are provided, they must be consistent.
+ - `month`
+ - : Corresponds to the {{jsxref("Temporal/PlainYearMonth/month", "month")}} property. Must be positive regardless of the `overflow` option.
+ - `monthCode`
+ - : Corresponds to the {{jsxref("Temporal/PlainYearMonth/monthCode", "monthCode")}} property. If it is not provided, then `month` must be provided. If both `month` and `monthCode` are provided, they must be consistent.
+ - `year`
+ - : Corresponds to the {{jsxref("Temporal/PlainYearMonth/year", "year")}} property.
+
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `overflow` {{optional_inline}}
+ - : A string specifying the behavior when a date component is out of range (when using the object `info`). Possible values are:
+ - `"constrain"` (default)
+ - : The date component is [clamped](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#invalid_date_clamping) to the valid range.
+ - `"reject"`
+ - : A {{jsxref("RangeError")}} is thrown if the date component is out of range.
+
+### Return value
+
+A new `Temporal.PlainYearMonth` object, representing the year and month specified by `info` in the specified `calendar`.
+
+Each `PlainYearMonth` stores a whole ISO 8601 date internally, which has the same year-month in the target calendar as what's exposed. The reference day is visible when stringifying with {{jsxref("Temporal/PlainYearMonth/toString", "toString()")}}, which outputs an ISO date. The reference day is chosen arbitrarily but consistently; that is, every `(year, month)` pair always maps to the same ISO reference day. It does not use the day provided in the input. Instead, the reference day is always chosen to be the first valid day of the month.
+
+This reference day canonicalization ensures that {{jsxref("Temporal/PlainYearMonth/equals", "equals()")}} can directly compare the underlying ISO dates without extra computation.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Thrown in one of the following cases:
+ - `info` is not an object or a string.
+ - `options` is not an object or `undefined`.
+ - The provided properties are insufficient to unambiguously determine a date. You usually need to provide a `year` (or `era` and `eraYear`) and a `month` (or a `monthCode`).
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - The provided properties that specify the same component are inconsistent.
+ - The provided non-numerical properties are not valid; for example, if `monthCode` is never a valid month code in this calendar.
+ - The provided numerical properties are out of range, and `options.overflow` is set to `"reject"`.
+
+## Examples
+
+### Creating a PlainYearMonth from an object
+
+```js
+// Year + month code
+const ym = Temporal.PlainYearMonth.from({ year: 2021, monthCode: "M05" });
+console.log(ym.toString()); // 2021-05
+
+// Year + month
+const ym2 = Temporal.PlainYearMonth.from({ year: 2021, month: 7 });
+console.log(ym2.toString()); // 2021-07
+
+// Year + month in a different calendar
+const ym3 = Temporal.PlainYearMonth.from({
+ year: 5730,
+ month: 6,
+ calendar: "hebrew",
+});
+console.log(ym3.toString()); // 1970-02-07[u-ca=hebrew]
+
+// Year + month code in a different calendar
+const ym4 = Temporal.PlainYearMonth.from({
+ year: 5730,
+ monthCode: "M05L",
+ calendar: "hebrew",
+});
+console.log(ym4.toString()); // 1970-02-07[u-ca=hebrew]
+```
+
+### Controlling overflow behavior
+
+By default, out-of-range values are clamped to the valid range.
+
+```js
+const ym1 = Temporal.PlainYearMonth.from({ year: 2021, month: 13 });
+console.log(ym1.toString()); // 2021-12
+
+// 5732 is not a Hebrew leap year, so a different monthCode is chosen
+const ym2 = Temporal.PlainYearMonth.from({
+ year: 5732,
+ monthCode: "M05L",
+ calendar: "hebrew",
+});
+console.log(ym2.toLocaleString("en-US", { calendar: "hebrew" })); // Adar 5732
+const underlyingDate = Temporal.PlainDate.from(ym2.toString());
+console.log(underlyingDate.year, underlyingDate.monthCode); // 5732 M06
+```
+
+You can change this behavior to throw an error instead:
+
+```js
+Temporal.PlainYearMonth.from({ year: 2021, month: 13 }, { overflow: "reject" });
+// RangeError: date value "month" not in 1..12: 13
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal/PlainYearMonth/PlainYearMonth", "Temporal.PlainYearMonth()")}}
+- {{jsxref("Temporal/PlainYearMonth/with", "Temporal.PlainYearMonth.prototype.with()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/index.md
new file mode 100644
index 000000000000000..dccca76ccc5df62
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/index.md
@@ -0,0 +1,115 @@
+---
+title: Temporal.PlainYearMonth
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth
+page-type: javascript-class
+browser-compat: javascript.builtins.Temporal.PlainYearMonth
+---
+
+{{JSRef}}
+
+The **`Temporal.PlainYearMonth`** object represents the year and month of a calendar date, without a day or time zone; for example, an event on a calendar that happens during the whole month. It is fundamentally represented as an ISO 8601 calendar date, with year, month, and day fields, and an associated calendar system. The day is used to disambiguate the year-month in non-ISO calendar systems.
+
+## Description
+
+A `PlainYearMonth` is essentially the year-month part of a {{jsxref("Temporal.PlainDate")}} object, without the day.
+
+### RFC 9557 format
+
+`PlainYearMonth` objects can be serialized and parsed using the [RFC 9557](https://datatracker.ietf.org/doc/html/rfc9557) format, an extension to the [ISO 8601 / RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) format. The string has the following form (spaces are only for readability and should not be present in the actual string):
+
+```plain
+YYYY-MM-DD [u-ca=calendar_id]
+```
+
+- `YYYY`
+ - : Either a four-digit number, or a six-digit number with a `+` or `-` sign.
+- `MM`
+ - : A two-digit number from `01` to `12`.
+- `DD` {{optional_inline}}
+ - : A two-digit number from `01` to `31`. It is required for non-ISO calendars, and optional otherwise. If omitted, the string looks like `YYYY-MM` or `YYYYMM`. Note that the reference day actually stored may be different from the one you provide, but the represented year-month is the same. See {{jsxref("Temporal/PlainYearMonth/from", "Temporal.PlainYearMonth.from()")}} for more information. The `YYYY`, `MM`, and `DD` components can be separated by `-` or nothing.
+- `[u-ca=calendar_id]` {{optional_inline}}
+ - : Replace `calendar_id` with the calendar to use. May have a _critical flag_ by prefixing the key with `!`: e.g., `[!u-ca=iso8601]`. This flag generally tells other systems that it cannot be ignored if they don't support it. The `Temporal` parser will throw an error if the annotations contain two or more calendar annotations and one of them is critical. Defaults to `[u-ca=iso8601]`. Note that the `YYYY-MM-DD` is always interpreted as an ISO 8601 calendar date and then converted to the specified calendar.
+
+As an input, you may optionally include the time, offset, and time zone identifier, in the same format as [`PlainDateTime`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime#rfc_9557_format), but they will be ignored. Other annotations in the `[key=value]` format are also ignored, and they must not have the critical flag.
+
+When serializing, you can configure whether to display the calendar ID, and whether to add a critical flag for it.
+
+## Constructor
+
+- {{jsxref("Temporal/PlainYearMonth/PlainYearMonth", "Temporal.PlainYearMonth()")}}
+ - : Creates a new `Temporal.PlainYearMonth` object by directly supplying the underlying data.
+
+## Static methods
+
+- {{jsxref("Temporal/PlainYearMonth/compare", "Temporal.PlainYearMonth.compare()")}}
+ - : Returns a number (-1, 0, or 1) indicating whether the first year-month comes before, is the same as, or comes after the second year-month. Equivalent to comparing their underlying ISO 8601 dates. Two year-months from different calendars may be considered equal if they start on the same ISO date.
+- {{jsxref("Temporal/PlainYearMonth/from", "Temporal.PlainYearMonth.from()")}}
+ - : Creates a new `Temporal.PlainYearMonth` object from another `Temporal.PlainYearMonth` object, an object with year and month properties, or an [RFC 9557](#rfc_9557_format) string.
+
+## Instance properties
+
+These properties are defined on `Temporal.PlainYearMonth.prototype` and shared by all `Temporal.PlainYearMonth` instances.
+
+- {{jsxref("Temporal/PlainYearMonth/calendarId", "Temporal.PlainYearMonth.prototype.calendarId")}}
+ - : Returns a string representing the [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars) used to interpret the internal ISO 8601 date.
+- {{jsxref("Object/constructor", "Temporal.PlainYearMonth.prototype.constructor")}}
+ - : The constructor function that created the instance object. For `Temporal.PlainYearMonth` instances, the initial value is the {{jsxref("Temporal/PlainYearMonth/PlainYearMonth", "Temporal.PlainYearMonth()")}} constructor.
+- {{jsxref("Temporal/PlainYearMonth/daysInMonth", "Temporal.PlainYearMonth.prototype.daysInMonth")}}
+ - : Returns a positive integer representing the number of days in the month of this date. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+- {{jsxref("Temporal/PlainYearMonth/daysInYear", "Temporal.PlainYearMonth.prototype.daysInYear")}}
+ - : Returns a positive integer representing the number of days in the year of this date. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. For the ISO 8601 calendar, this is 365, or 366 in a leap year.
+- {{jsxref("Temporal/PlainYearMonth/era", "Temporal.PlainYearMonth.prototype.era")}}
+ - : Returns a calendar-specific lowercase string representing the era of this year-month, or `undefined` if the calendar does not use eras (e.g. ISO 8601). `era` and `eraYear` together uniquely identify a year in a calendar, in the same way that `year` does. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. For Gregorian, it is either `"gregory"` or `"gregory-inverse"`.
+- {{jsxref("Temporal/PlainYearMonth/eraYear", "Temporal.PlainYearMonth.prototype.eraYear")}}
+ - : Returns a non-negative integer representing the year of this year-month within the era, or `undefined` if the calendar does not use eras (e.g. ISO 8601). The year index usually starts from 1 (more common) or 0, and years in an era can decrease with time (e.g. Gregorian BCE). `era` and `eraYear` together uniquely identify a year in a calendar, in the same way that `year` does. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+- {{jsxref("Temporal/PlainYearMonth/inLeapYear", "Temporal.PlainYearMonth.prototype.inLeapYear")}}
+ - : Returns a boolean indicating whether this year-month is in a leap year. A leap year is a year that has more days (due to a leap day or leap month) than a common year. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+- {{jsxref("Temporal/PlainYearMonth/month", "Temporal.PlainYearMonth.prototype.month")}}
+ - : Returns a positive integer representing the 1-based month index in the year of this year-month. The first month of this year is `1`, and the last month is the {{jsxref("Temporal/PlainYearMonth/monthsInYear", "monthsInYear")}}. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Note that unlike {{jsxref("Date.prototype.getMonth()")}}, the index is 1-based. If the calendar has leap months, then the month with the same {{jsxref("Temporal/PlainDate/monthCode", "monthCode")}} may have different `month` indexes for different years.
+- {{jsxref("Temporal/PlainYearMonth/monthCode", "Temporal.PlainYearMonth.prototype.monthCode")}}
+ - : Returns a calendar-specific string representing the month of this year-month. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Usually it is `M` plus a two-digit month number. For leap months, it is the previous month's code followed by `L`. If the leap month is the first month of the year, the code is `M00L`.
+- {{jsxref("Temporal/PlainYearMonth/monthsInYear", "Temporal.PlainYearMonth.prototype.monthsInYear")}}
+ - : Returns a positive integer representing the number of months in the year of this date. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. For the ISO 8601 calendar, this is always 12, but in other calendar systems it may differ.
+- {{jsxref("Temporal/PlainYearMonth/year", "Temporal.PlainYearMonth.prototype.year")}}
+ - : Returns an integer representing the number of years of this year-month relative to the start of a calendar-specific epoch year. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Usually year 1 is either the first year of the latest era or the ISO 8601 year `0001`. If the epoch is in the middle of the year, that year will have the same value before and after the start date of the era.
+- `Temporal.PlainYearMonth.prototype[Symbol.toStringTag]`
+ - : The initial value of the [`[Symbol.toStringTag]`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) property is the string `"Temporal.PlainYearMonth"`. This property is used in {{jsxref("Object.prototype.toString()")}}.
+
+## Instance methods
+
+- {{jsxref("Temporal/PlainYearMonth/add", "Temporal.PlainYearMonth.prototype.add()")}}
+ - : Returns a new `Temporal.PlainYearMonth` object representing this year-month moved forward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}).
+- {{jsxref("Temporal/PlainYearMonth/equals", "Temporal.PlainYearMonth.prototype.equals()")}}
+ - : Returns `true` if this year-month is equivalent in value to another year-month (in a form convertible by {{jsxref("Temporal/PlainYearMonth/from", "Temporal.PlainYearMonth.from()")}}), and `false` otherwise. They are compared both by their underlying ISO date values and their calendars, so two year-months from different calendars may be considered equal by {{jsxref("Temporal/PlainYearMonth/compare", "Temporal.PlainYearMonth.compare()")}} but not by `equals()`.
+- {{jsxref("Temporal/PlainYearMonth/since", "Temporal.PlainYearMonth.prototype.since()")}}
+ - : Returns a new {{jsxref("Temporal.Duration")}} object representing the duration from another year-month (in a form convertible by {{jsxref("Temporal/PlainYearMonth/from", "Temporal.PlainYearMonth.from()")}}) to this year-month. The duration is positive if the other month is before this month, and negative if after.
+- {{jsxref("Temporal/PlainYearMonth/subtract", "Temporal.PlainYearMonth.prototype.subtract()")}}
+ - : Returns a new `Temporal.PlainYearMonth` object representing this year-month moved backward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}).
+- {{jsxref("Temporal/PlainYearMonth/toJSON", "Temporal.PlainYearMonth.prototype.toJSON()")}}
+ - : Returns a string representing this year-month in the same [RFC 9557 format](#rfc_9557_format) as calling {{jsxref("Temporal/PlainYearMonth/toString", "toString()")}}. Intended to be implicitly called by {{jsxref("JSON.stringify()")}}.
+- {{jsxref("Temporal/PlainYearMonth/toLocaleString", "Temporal.PlainYearMonth.prototype.toLocaleString()")}}
+ - : Returns a string with a language-sensitive representation of this year-month.
+- {{jsxref("Temporal/PlainYearMonth/toPlainDate", "Temporal.PlainYearMonth.prototype.toPlainDate()")}}
+ - : Returns a new {{jsxref("Temporal.PlainDate")}} object representing this year-month and a supplied day in the same calendar system.
+- {{jsxref("Temporal/PlainYearMonth/toString", "Temporal.PlainYearMonth.prototype.toString()")}}
+ - : Returns a string representing this year-month in the [RFC 9557 format](#rfc_9557_format).
+- {{jsxref("Temporal/PlainYearMonth/until", "Temporal.PlainYearMonth.prototype.until()")}}
+ - : Returns a new {{jsxref("Temporal.Duration")}} object representing the duration from this year-month to another year-month (in a form convertible by {{jsxref("Temporal/PlainYearMonth/from", "Temporal.PlainYearMonth.from()")}}). The duration is positive if the other month is after this month, and negative if before.
+- {{jsxref("Temporal/PlainYearMonth/valueOf", "Temporal.PlainYearMonth.prototype.valueOf()")}}
+ - : Throws a {{jsxref("TypeError")}}, which prevents `Temporal.PlainYearMonth` instances from being [implicitly converted to primitives](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) when used in arithmetic or comparison operations.
+- {{jsxref("Temporal/PlainYearMonth/with", "Temporal.PlainYearMonth.prototype.with()")}}
+ - : Returns a new `Temporal.PlainYearMonth` object representing this year-month with some fields replaced by new values.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal")}}
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal.PlainMonthDay")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/inleapyear/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/inleapyear/index.md
new file mode 100644
index 000000000000000..3351d6a6b4e9102
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/inleapyear/index.md
@@ -0,0 +1,44 @@
+---
+title: Temporal.PlainYearMonth.prototype.inLeapYear
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/inLeapYear
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.inLeapYear
+---
+
+{{JSRef}}
+
+The **`inLeapYear`** accessor property of {{jsxref("Temporal.PlainYearMonth")}} instances returns a boolean indicating whether this year-month is in a leap year. A leap year is a year that has more days (due to a leap day or leap month) than a common year. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `inLeapYear` is `undefined`. You cannot change this property directly.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/inLeapYear", "Temporal.PlainDate.prototype.inLeapYear")}}.
+
+## Examples
+
+### Using inLeapYear
+
+```js
+const ym = Temporal.PlainYearMonth.from("2021-07");
+console.log(ym.inLeapYear); // false
+console.log(ym.daysInYear); // 365
+console.log(ym.monthsInYear); // 12
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal/PlainYearMonth/with", "Temporal.PlainYearMonth.prototype.with()")}}
+- {{jsxref("Temporal/PlainYearMonth/add", "Temporal.PlainYearMonth.prototype.add()")}}
+- {{jsxref("Temporal/PlainYearMonth/subtract", "Temporal.PlainYearMonth.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainYearMonth/year", "Temporal.PlainYearMonth.prototype.year")}}
+- {{jsxref("Temporal/PlainYearMonth/daysInYear", "Temporal.PlainYearMonth.prototype.daysInYear")}}
+- {{jsxref("Temporal/PlainYearMonth/monthsInYear", "Temporal.PlainYearMonth.prototype.monthsInYear")}}
+- {{jsxref("Temporal/PlainDate/inLeapYear", "Temporal.PlainDate.prototype.inLeapYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/month/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/month/index.md
new file mode 100644
index 000000000000000..848763bf8aa7975
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/month/index.md
@@ -0,0 +1,44 @@
+---
+title: Temporal.PlainYearMonth.prototype.month
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/month
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.month
+---
+
+{{JSRef}}
+
+The **`month`** accessor property of {{jsxref("Temporal.PlainYearMonth")}} instances returns a positive integer representing the 1-based month index in the year of this year-month. The first month of this year is `1`, and the last month is the {{jsxref("Temporal/PlainYearMonth/monthsInYear", "monthsInYear")}}. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `month` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainYearMonth/with", "with()")}} method to create a new `Temporal.PlainYearMonth` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/month", "Temporal.PlainDate.prototype.month")}}.
+
+## Examples
+
+### Using month
+
+```js
+const ym = Temporal.PlainYearMonth.from("2021-07"); // ISO 8601 calendar
+console.log(ym.monthCode); // "M07"
+console.log(ym.month); // 7
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal/PlainYearMonth/with", "Temporal.PlainYearMonth.prototype.with()")}}
+- {{jsxref("Temporal/PlainYearMonth/add", "Temporal.PlainYearMonth.prototype.add()")}}
+- {{jsxref("Temporal/PlainYearMonth/subtract", "Temporal.PlainYearMonth.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainYearMonth/year", "Temporal.PlainYearMonth.prototype.year")}}
+- {{jsxref("Temporal/PlainYearMonth/monthCode", "Temporal.PlainYearMonth.prototype.monthCode")}}
+- {{jsxref("Temporal/PlainYearMonth/daysInMonth", "Temporal.PlainYearMonth.prototype.daysInMonth")}}
+- {{jsxref("Temporal/PlainYearMonth/monthsInYear", "Temporal.PlainYearMonth.prototype.monthsInYear")}}
+- {{jsxref("Temporal/PlainDate/month", "Temporal.PlainDate.prototype.month")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/monthcode/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/monthcode/index.md
new file mode 100644
index 000000000000000..587999a71d0101e
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/monthcode/index.md
@@ -0,0 +1,46 @@
+---
+title: Temporal.PlainYearMonth.prototype.monthCode
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/monthCode
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.monthCode
+---
+
+{{JSRef}}
+
+The **`monthCode`** accessor property of {{jsxref("Temporal.PlainYearMonth")}} instances returns a calendar-specific string representing the month of this year-month. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+Usually it is `M` plus a two-digit month number. For leap months, it is the previous month's code followed by `L` (even if it's conceptually a derivative of the following month; for example, in the Hebrew calendar, Adar I has code `M05L` but Adar II has code `M06`). If the leap month is the first month of the year, the code is `M00L`.
+
+The set accessor of `monthCode` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainYearMonth/with", "with()")}} method to create a new `Temporal.PlainYearMonth` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/monthCode", "Temporal.PlainDate.prototype.monthCode")}}.
+
+## Examples
+
+### Using monthCode
+
+```js
+const date = Temporal.PlainYearMonth.from("2021-07-01"); // ISO 8601 calendar
+console.log(date.monthCode); // "M07"
+console.log(date.month); // 7
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal/PlainYearMonth/with", "Temporal.PlainYearMonth.prototype.with()")}}
+- {{jsxref("Temporal/PlainYearMonth/add", "Temporal.PlainYearMonth.prototype.add()")}}
+- {{jsxref("Temporal/PlainYearMonth/subtract", "Temporal.PlainYearMonth.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainYearMonth/year", "Temporal.PlainYearMonth.prototype.year")}}
+- {{jsxref("Temporal/PlainYearMonth/month", "Temporal.PlainYearMonth.prototype.month")}}
+- {{jsxref("Temporal/PlainYearMonth/daysInMonth", "Temporal.PlainYearMonth.prototype.daysInMonth")}}
+- {{jsxref("Temporal/PlainYearMonth/monthsInYear", "Temporal.PlainYearMonth.prototype.monthsInYear")}}
+- {{jsxref("Temporal/PlainDate/monthCode", "Temporal.PlainDate.prototype.monthCode")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/monthsinyear/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/monthsinyear/index.md
new file mode 100644
index 000000000000000..b1e9df66c5fa679
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/monthsinyear/index.md
@@ -0,0 +1,43 @@
+---
+title: Temporal.PlainYearMonth.prototype.monthsInYear
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/monthsInYear
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.monthsInYear
+---
+
+{{JSRef}}
+
+The **`monthsInYear`** accessor property of {{jsxref("Temporal.PlainYearMonth")}} instances returns a positive integer representing the number of months in the year of this date. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `monthsInYear` is `undefined`. You cannot change this property directly.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/monthsInYear", "Temporal.PlainDate.prototype.monthsInYear")}}.
+
+## Examples
+
+### Using monthsInYear
+
+```js
+const ym = Temporal.PlainYearMonth.from("2021-07");
+console.log(ym.monthsInYear); // 12
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal/PlainYearMonth/with", "Temporal.PlainYearMonth.prototype.with()")}}
+- {{jsxref("Temporal/PlainYearMonth/add", "Temporal.PlainYearMonth.prototype.add()")}}
+- {{jsxref("Temporal/PlainYearMonth/subtract", "Temporal.PlainYearMonth.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainYearMonth/year", "Temporal.PlainYearMonth.prototype.year")}}
+- {{jsxref("Temporal/PlainYearMonth/month", "Temporal.PlainYearMonth.prototype.month")}}
+- {{jsxref("Temporal/PlainYearMonth/monthCode", "Temporal.PlainYearMonth.prototype.monthCode")}}
+- {{jsxref("Temporal/PlainYearMonth/daysInMonth", "Temporal.PlainYearMonth.prototype.daysInMonth")}}
+- {{jsxref("Temporal/PlainDate/monthsInYear", "Temporal.PlainDate.prototype.monthsInYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/plainyearmonth/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/plainyearmonth/index.md
new file mode 100644
index 000000000000000..c14d2ef9c29a159
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/plainyearmonth/index.md
@@ -0,0 +1,89 @@
+---
+title: Temporal.PlainYearMonth()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/PlainYearMonth
+page-type: javascript-constructor
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.PlainYearMonth
+---
+
+{{JSRef}}
+
+The **`Temporal.PlainYearMonth()`** constructor creates {{jsxref("Temporal.PlainYearMonth")}} objects.
+
+This constructor allows you to create instances by directly supplying the underlying data. Like all other `Temporal` classes, you should usually construct `Temporal.PlainYearMonth` objects using the {{jsxref("Temporal/PlainYearMonth/from", "Temporal.PlainYearMonth.from()")}} static method, which can handle a variety of input types.
+
+## Syntax
+
+```js-nolint
+new Temporal.PlainYearMonth(year, month)
+new Temporal.PlainYearMonth(year, month, calendar)
+new Temporal.PlainYearMonth(year, month, calendar, referenceDay)
+```
+
+> **Note:** `Temporal.PlainYearMonth()` can only be constructed with [`new`](/en-US/docs/Web/JavaScript/Reference/Operators/new). Attempting to call it without `new` throws a {{jsxref("TypeError")}}.
+
+> [!WARNING]
+> Avoid using the `calendar` and `referenceDay` parameters, because {{jsxref("Temporal/PlainYearMonth/equals", "equals()")}} and {{jsxref("Temporal/PlainYearMonth/compare", "compare()")}} will consider the reference day for comparison, causing two equivalent year-months to be considered different if they have different reference days. To create a `Temporal.PlainYearMonth` object with a non-ISO calendar, use the {{jsxref("Temporal/PlainYearMonth/from", "Temporal.PlainYearMonth.from()")}} static method.
+
+### Parameters
+
+- `year` {{optional_inline}}
+ - : A number, truncated to an integer, representing the year in the ISO calendar system.
+- `month`
+ - : A number, truncated to an integer, representing the month in the ISO calendar system.
+- `calendar` {{optional_inline}}
+ - : A string representing the [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars) to use. Note that irrespective of the `calendar`, the `year`, `month`, and `referenceDay` must be in the ISO 8601 calendar system. Defaults to `"iso8601"`.
+- `referenceDay`
+ - : A number, truncated to an integer, representing the day of the month in the ISO calendar system. Defaults to `1`. The same ISO year-month can represent different months on different days with non-ISO calendars. For example, the days 2021-07-01 and 2021-07-31 may fall in different months in a non-Gregorian calendar, and just specifying "2021-07" is insufficient to unambiguously determine a month in the target calendar. Therefore, you virtually always want to specify a `referenceDay` when using a non-ISO calendar.
+
+### Return value
+
+A new `Temporal.PlainYearMonth` object, representing the year-month of the date specified by `year`, `month`, and `referenceDay` (in the ISO calendar), interpreted in the calendar system specified by `calendar`.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Thrown if `calendar` is not a string or `undefined`.
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - `year`, `month`, or `referenceDay` is not a finite number, or do not represent a valid date in the ISO calendar system.
+ - `calendar` is not a valid calendar identifier.
+
+## Examples
+
+### Using Temporal.PlainYearMonth()
+
+```js
+const ym = new Temporal.PlainYearMonth(2021, 7);
+console.log(ym.toString()); // 2021-07
+
+const ym2 = new Temporal.PlainYearMonth(2021, 7, "chinese");
+console.log(ym2.toString()); // 2021-07-01[u-ca=chinese]
+
+const ym3 = new Temporal.PlainYearMonth(2021, 7, "chinese", 31);
+console.log(ym3.toString()); // 2021-07-31[u-ca=chinese]
+```
+
+### Improper usage
+
+You should avoid using the `calendar` and `referenceDay` parameters, unless you know that the `referenceDay` is the canonical reference day that would be selected by `Temporal.PlainYearMonth.from()` for the same year-month.
+
+```js
+const ym = new Temporal.PlainYearMonth(2021, 7, "chinese", 1);
+const ym2 = Temporal.PlainYearMonth.from("2021-07-01[u-ca=chinese]");
+console.log(ym.equals(ym2)); // false
+console.log(ym.toString()); // 2021-07-01[u-ca=chinese]
+console.log(ym2.toString()); // 2021-06-10[u-ca=chinese]
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal/PlainYearMonth/from", "Temporal.PlainYearMonth.from()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/since/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/since/index.md
new file mode 100644
index 000000000000000..37e47f8433f3ef0
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/since/index.md
@@ -0,0 +1,98 @@
+---
+title: Temporal.PlainYearMonth.prototype.since()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/since
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.since
+---
+
+{{JSRef}}
+
+The **`since()`** method of {{jsxref("Temporal.PlainYearMonth")}} instances returns a new {{jsxref("Temporal.Duration")}} object representing the duration from another year-month (in a form convertible by {{jsxref("Temporal/PlainYearMonth/from", "Temporal.PlainYearMonth.from()")}}) to this year-month. The duration is positive if the other month is before this month, and negative if after.
+
+This method does `this - other`. To do `other - this`, use the {{jsxref("Temporal/PlainYearMonth/until", "until()")}} method.
+
+## Syntax
+
+```js-nolint
+since(other)
+since(other, options)
+```
+
+### Parameters
+
+- `other`
+ - : A string, an object, or a {{jsxref("Temporal.PlainYearMonth")}} instance representing a year-month to subtract from this year-month. It is converted to a `Temporal.PlainYearMonth` object using the same algorithm as {{jsxref("Temporal/PlainYearMonth/from", "Temporal.PlainYearMonth.from()")}}. It must have the same calendar as `this`.
+- `options` {{optional_inline}}
+ - : An object containing the options for {{jsxref("Temporal/Duration/round", "Temporal.Duration.prototype.round()")}}, which includes `largestUnit`, `roundingIncrement`, `roundingMode`, and `smallestUnit`. `largestUnit` and `smallestUnit` only accept the units: `"year"`, `"month"`, or their plural forms. For `largestUnit`, the default value `"auto"` means `"year"`. For `smallestUnit`, the default value is `"month"`. The current date is used as the `relativeTo` option.
+
+### Return value
+
+A new {{jsxref("Temporal.Duration")}} object representing the duration _since_ `other` to this year-month. The duration is positive if `other` is before this year-month, and negative if after.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - `other` has a different calendar than `this`.
+ - Any of the options is invalid.
+
+## Examples
+
+### Using since()
+
+```js
+const lastUpdated = Temporal.PlainYearMonth.from("2022-01");
+const now = Temporal.Now.plainDateISO().toPlainYearMonth();
+const duration = now.since(lastUpdated);
+console.log(`Last updated ${duration.toLocaleString("en-US")} ago`);
+// Expected output: "Last updated [number] years, [number] months ago"
+
+const duration2 = now.since(lastUpdated, { largestUnit: "month" });
+console.log(`Last updated ${duration2.toLocaleString("en-US")} ago`);
+// Expected output: "Last updated [number] months ago"
+
+const duration3 = now.since(lastUpdated, { smallestUnit: "year" });
+console.log(`Last updated ${duration3.toLocaleString("en-US")} ago`);
+// Expected output: "Last updated [number] years ago"
+```
+
+### Rounding the result
+
+By default the fractional part of the `smallestUnit` is truncated. You can round it up using the `roundingIncrement` and `roundingMode` options.
+
+```js
+const ym1 = Temporal.PlainYearMonth.from("2022-01");
+const ym2 = Temporal.PlainYearMonth.from("2022-11");
+const duration = ym2.since(ym1, {
+ smallestUnit: "year",
+ roundingMode: "ceil",
+});
+console.log(duration.toString()); // "P1Y"
+```
+
+### Getting the result in days
+
+By default, the resulting duration never contains days, because `PlainYearMonth` does not offer day-level precision. You can get the result in days by converting it to a {{jsxref("Temporal.PlainDate")}} first with an unambiguous day.
+
+```js
+const ym1 = Temporal.PlainYearMonth.from("2022-01");
+const ym2 = Temporal.PlainYearMonth.from("2022-11");
+const duration = ym2.toPlainDate({ day: 1 }).since(ym1.toPlainDate({ day: 1 }));
+console.log(duration.toString()); // "P304D"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/PlainYearMonth/add", "Temporal.PlainYearMonth.prototype.add()")}}
+- {{jsxref("Temporal/PlainYearMonth/subtract", "Temporal.PlainYearMonth.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainYearMonth/until", "Temporal.PlainYearMonth.prototype.until()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/subtract/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/subtract/index.md
new file mode 100644
index 000000000000000..2d7bed7a15f61bf
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/subtract/index.md
@@ -0,0 +1,68 @@
+---
+title: Temporal.PlainYearMonth.prototype.subtract()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/subtract
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.subtract
+---
+
+{{JSRef}}
+
+The **`subtract()`** method of {{jsxref("Temporal.PlainYearMonth")}} instances returns a new `Temporal.PlainYearMonth` object representing this year-month moved backward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}).
+
+If you want to subtract two year-months and get a duration, use {{jsxref("Temporal/PlainYearMonth/since", "since()")}} or {{jsxref("Temporal/PlainYearMonth/until", "until()")}} instead.
+
+## Syntax
+
+```js-nolint
+subtract(duration)
+subtract(duration, options)
+```
+
+### Parameters
+
+- `duration`
+ - : A string, an object, or a {{jsxref("Temporal.Duration")}} instance representing a duration to subtract from this year-month. It is converted to a `Temporal.Duration` object using the same algorithm as {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}.
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `overflow` {{optional_inline}}
+ - : A string specifying the behavior when a date component is out of range. Possible values are:
+ - `"constrain"` (default)
+ - : The date component is [clamped](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#invalid_date_clamping) to the valid range.
+ - `"reject"`
+ - : A {{jsxref("RangeError")}} is thrown if the date component is out of range.
+
+### Return value
+
+A new `Temporal.PlainYearMonth` object representing the year-month specified by the original `PlainYearMonth`, minus the duration.
+
+## Description
+
+Subtracting a duration is equivalent to [adding](Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/add) its [negation](Web/JavaScript/Reference/Global_Objects/Temporal/Duration/negated), so all the same considerations apply. Subtracting a positive duration starts from the end of the year-month and moves backward, so any increment smaller than the month's length is ignored.
+
+## Examples
+
+### Subtracting a duration
+
+```js
+const start = Temporal.PlainYearMonth.from("2022-01");
+const end = start.subtract({ years: 1, months: 2, weeks: 3, days: 4 });
+console.log(end.toString()); // 2020-11
+```
+
+For more examples, see {{jsxref("Temporal/PlainYearMonth/add", "add()")}}.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/PlainYearMonth/add", "Temporal.PlainYearMonth.prototype.add()")}}
+- {{jsxref("Temporal/PlainYearMonth/since", "Temporal.PlainYearMonth.prototype.since()")}}
+- {{jsxref("Temporal/PlainYearMonth/until", "Temporal.PlainYearMonth.prototype.until()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/tojson/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/tojson/index.md
new file mode 100644
index 000000000000000..232e18da393120b
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/tojson/index.md
@@ -0,0 +1,68 @@
+---
+title: Temporal.PlainYearMonth.prototype.toJSON()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/toJSON
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.toJSON
+---
+
+{{JSRef}}
+
+The **`toJSON()`** method of {{jsxref("Temporal.PlainYearMonth")}} instances returns a string representing this year-month in the same [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth#rfc_9557_format) as calling {{jsxref("Temporal/PlainYearMonth/toString", "toString()")}}. It is intended to be implicitly called by {{jsxref("JSON.stringify()")}}.
+
+## Syntax
+
+```js-nolint
+toJSON()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A string representing the given date in the [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth#rfc_9557_format), with the calendar annotation included if it is not `"iso8601"`.
+
+## Description
+
+The `toJSON()` method is automatically called by {{jsxref("JSON.stringify()")}} when a `Temporal.PlainYearMonth` object is stringified. This method is generally intended to, by default, usefully serialize `Temporal.PlainYearMonth` objects during [JSON](/en-US/docs/Glossary/JSON) serialization, which can then be deserialized using the {{jsxref("Temporal/PlainYearMonth/from", "Temporal.PlainYearMonth.from()")}} function as the reviver of {{jsxref("JSON.parse()")}}.
+
+## Examples
+
+### Using toJSON()
+
+```js
+const ym = Temporal.PlainYearMonth.from({ year: 2021, month: 8 });
+const ymStr = ym.toJSON(); // '2021-08'
+const ym2 = Temporal.PlainYearMonth.from(ymStr);
+```
+
+### JSON serialization and parsing
+
+This example shows how `Temporal.PlainYearMonth` can be serialized as JSON without extra effort, and how to parse it back.
+
+```js
+const ym = Temporal.PlainYearMonth.from({ year: 2021, month: 8 });
+const ymStr = JSON.stringify({ event: ym }); // '{"event":"2021-08"}'
+const obj = JSON.parse(ymStr, (key, value) => {
+ if (key === "event") {
+ return Temporal.PlainYearMonth.from(value);
+ }
+ return value;
+});
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal/PlainYearMonth/from", "Temporal.PlainYearMonth.from()")}}
+- {{jsxref("Temporal/PlainYearMonth/toString", "Temporal.PlainYearMonth.prototype.toString()")}}
+- {{jsxref("Temporal/PlainYearMonth/toLocaleString", "Temporal.PlainYearMonth.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/tolocalestring/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/tolocalestring/index.md
new file mode 100644
index 000000000000000..f4ced58fd87a85b
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/tolocalestring/index.md
@@ -0,0 +1,101 @@
+---
+title: Temporal.PlainYearMonth.prototype.toLocaleString()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/toLocaleString
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.toLocaleString
+---
+
+{{JSRef}}
+
+The **`toLocaleString()`** method of {{jsxref("Temporal.PlainYearMonth")}} instances returns a string with a language-sensitive representation of this year-month. In implementations with [`Intl.DateTimeFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat) support, this method delegates to `Intl.DateTimeFormat`.
+
+Every time `toLocaleString` is called, it has to perform a search in a big database of localization strings, which is potentially inefficient. When the method is called many times with the same arguments, it is better to create a {{jsxref("Intl.DateTimeFormat")}} object and use its {{jsxref("Intl/DateTimeFormat/format", "format()")}} method, because a `DateTimeFormat` object remembers the arguments passed to it and may decide to cache a slice of the database, so future `format` calls can search for localization strings within a more constrained context.
+
+## Syntax
+
+```js-nolint
+toLocaleString()
+toLocaleString(locales)
+toLocaleString(locales, options)
+```
+
+### Parameters
+
+The `locales` and `options` parameters customize the behavior of the function and let applications specify the language whose formatting conventions should be used.
+
+In implementations that support the [`Intl.DateTimeFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat), these parameters correspond exactly to the [`Intl.DateTimeFormat()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat) constructor's parameters. Implementations without `Intl.DateTimeFormat` support return the exact same string as {{jsxref("Temporal/PlainYearMonth/toString", "toString()")}}, ignoring both parameters.
+
+- `locales` {{optional_inline}}
+ - : A string with a BCP 47 language tag, or an array of such strings. Corresponds to the [`locales`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#locales) parameter of the `Intl.DateTimeFormat()` constructor.
+- `options` {{optional_inline}}
+
+ - : An object adjusting the output format. Corresponds to the [`options`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#options) parameter of the `Intl.DateTimeFormat()` constructor. The `calendar` option must be provided with the same value as this year-month's calendar. Regarding the [date-time component options](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#date-time_component_options) and the style shortcuts (`dateStyle` and `timeStyle`), the options should follow one of these forms:
+
+ - Provide none of them: `year` and `month` will default to `"numeric"`.
+ - Provide `dateStyle` only: it expands to `era`, `year`, and `month` formats.
+ - Provide some date-time component options, where at least one of them is `year` or `month`. Only the specified date components will be included in the output.
+
+See the [`Intl.DateTimeFormat()` constructor](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat) for details on these parameters and how to use them.
+
+### Return value
+
+A string representing the given year-month according to language-specific conventions.
+
+In implementations with `Intl.DateTimeFormat`, this is equivalent to `new Intl.DateTimeFormat(locales, options).format(yearMonth)`, where `options` has been normalized as described above.
+
+> [!NOTE]
+> Most of the time, the formatting returned by `toLocaleString()` is consistent. However, the output may vary between implementations, even within the same locale — output variations are by design and allowed by the specification. It may also not be what you expect. For example, the string may use non-breaking spaces or be surrounded by bidirectional control characters. You should not compare the results of `toLocaleString()` to hardcoded constants.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+- {{jsxref("TypeError")}}
+ - : Thrown if any of the options is not of the expected type.
+
+## Examples
+
+### Using toLocaleString()
+
+Basic use of this method without specifying a `locale` returns a formatted string in the default locale and with default options.
+
+```js
+// Note that just specifying "2021-08" defaults to the ISO 8601 calendar,
+// which throws an error if the locale's default calendar is not ISO 8601.
+const ym = Temporal.PlainYearMonth.from("2021-08-01[u-ca=gregory]");
+
+console.log(ym.toLocaleString()); // 8/2021 (assuming en-US locale and Gregorian calendar)
+```
+
+If the year-month's calendar doesn't match the locale's default calendar, even when its calendar is `iso8601`, an explicit `calendar` option must be provided with the same value.
+
+```js
+const ym = Temporal.PlainYearMonth.from("2021-08");
+ym.toLocaleString("en-US", { calendar: "iso8601" }); // 2021-08
+```
+
+### Using toLocaleString() with options
+
+You can customize which parts of the year-month are included in the output by providing the `options` parameter.
+
+```js
+const ym = Temporal.PlainYearMonth.from("2021-08-01[u-ca=gregory]");
+ym.toLocaleString("en-US", { dateStyle: "full" }); // August 2021
+ym.toLocaleString("en-US", { year: "2-digit" }); // 21
+ym.toLocaleString("en-US", { month: "long" }); // August
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Intl.DateTimeFormat")}}
+- {{jsxref("Temporal/PlainYearMonth/toJSON", "Temporal.PlainYearMonth.prototype.toJSON()")}}
+- {{jsxref("Temporal/PlainYearMonth/toString", "Temporal.PlainYearMonth.prototype.toString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/toplaindate/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/toplaindate/index.md
new file mode 100644
index 000000000000000..ad19b982dcb003e
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/toplaindate/index.md
@@ -0,0 +1,62 @@
+---
+title: Temporal.PlainYearMonth.prototype.toPlainDate()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/toPlainDate
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.toPlainDate
+---
+
+{{JSRef}}
+
+The **`toPlainDate()`** method of {{jsxref("Temporal.PlainYearMonth")}} instances returns a new {{jsxref("Temporal.PlainDate")}} object representing this year-month and a supplied day in the same calendar system.
+
+## Syntax
+
+```js-nolint
+toPlainDate(dayInfo)
+```
+
+### Parameters
+
+- `dayInfo` {{optional_inline}}
+ - : An object representing the day component of the resulting `PlainDate`, containing the following property:
+ - `day`
+ - : Corresponds to the {{jsxref("Temporal/PlainDate/day", "day")}} property.
+
+### Return value
+
+A new `Temporal.PlainDate` object representing the date specified by this year-month and the day in `dayInfo`, interpreted in the calendar system of this year-month.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+- {{jsxref("TypeError")}}
+ - : Thrown if `dayInfo` is not an object.
+
+## Examples
+
+### Using toPlainDate()
+
+```js
+const ym = Temporal.PlainYearMonth.from("2021-07");
+const date = ym.toPlainDate({ day: 1 });
+console.log(date.toString()); // 2021-07-01
+
+const ym2 = Temporal.PlainYearMonth.from("2021-07-01[u-ca=chinese]");
+const date2 = ym2.toPlainDate({ day: 15 });
+console.log(date2.toString()); // 2021-06-24[u-ca=chinese]
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/PlainDate/toPlainYearMonth", "Temporal.PlainDate.prototype.toPlainYearMonth()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/tostring/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/tostring/index.md
new file mode 100644
index 000000000000000..69c3c205fa726ad
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/tostring/index.md
@@ -0,0 +1,93 @@
+---
+title: Temporal.PlainYearMonth.prototype.toString()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/toString
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.toString
+---
+
+{{JSRef}}
+
+The **`toString()`** method of {{jsxref("Temporal.PlainYearMonth")}} instances returns a string representing this year-month in the [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth#rfc_9557_format).
+
+## Syntax
+
+```js-nolint
+toString()
+toString(options)
+```
+
+### Parameters
+
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `calendarName` {{optional_inline}}
+ - : Whether to show the calendar annotation (`[u-ca=calendar_id]`) in the return value. Possible values are:
+ - `"auto"` (default)
+ - : Include the calendar annotation if the calendar is not `"iso8601"`. The reference day is included if the calendar is not `"iso8601"`.
+ - `"always"`
+ - : Always include the calendar annotation. The reference day is always included too.
+ - `"never"`
+ - : Never include the calendar annotation. This makes the returned string not recoverable to the same {{jsxref("Temporal.PlainYearMonth")}} instance, although the year-month value still remains the same. The reference day is included if the calendar is not `"iso8601"`.
+ - `"critical"`
+ - : Always include the calendar annotation, and add a critical flag: `[!u-ca=calendar_id]`. Useful when sending the string to certain systems, but not useful for Temporal itself. The reference day is always included too.
+
+### Return value
+
+A string in the [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth#rfc_9557_format) representing this year-month. The calendar annotation is included as specified. The reference day is included if a calendar annotation is included or if the calendar is not `"iso8601"`.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+- {{jsxref("TypeError")}}
+ - : Thrown if `options` is not an object or `undefined`.
+
+## Examples
+
+### Using toString()
+
+```js
+const ym = Temporal.PlainYearMonth.from({ year: 2021, month: 8 });
+console.log(ym.toString()); // '2021-08'
+
+const ym2 = Temporal.PlainYearMonth.from({
+ year: 4658,
+ monthCode: "M08",
+ calendar: "chinese",
+});
+console.log(ym2.toString()); // '2021-09-07[u-ca=chinese]'
+```
+
+### Using options
+
+```js
+const isoYM = Temporal.PlainYearMonth.from({ year: 2021, month: 8 });
+const ym = Temporal.PlainYearMonth.from({
+ year: 4658,
+ monthCode: "M08",
+ calendar: "chinese",
+});
+console.log(isoYM.toString({ calendarName: "auto" })); // '2021-08'
+console.log(ym.toString({ calendarName: "auto" })); // '2021-09-07[u-ca=chinese]'
+console.log(isoYM.toString({ calendarName: "always" })); // '2021-08-01[u-ca=iso8601]'
+console.log(ym.toString({ calendarName: "always" })); // '2021-09-07[u-ca=chinese]'
+console.log(isoYM.toString({ calendarName: "never" })); // '2021-08'
+console.log(ym.toString({ calendarName: "never" })); // '2021-09-07'
+console.log(isoYM.toString({ calendarName: "critical" })); // '2021-08-01[!u-ca=iso8601]'
+console.log(ym.toString({ calendarName: "critical" })); // '2021-09-07[!u-ca=chinese]'
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal/PlainYearMonth/from", "Temporal.PlainYearMonth.from()")}}
+- {{jsxref("Temporal/PlainYearMonth/toJSON", "Temporal.PlainYearMonth.prototype.toJSON()")}}
+- {{jsxref("Temporal/PlainYearMonth/toLocaleString", "Temporal.PlainYearMonth.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/until/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/until/index.md
new file mode 100644
index 000000000000000..e3443cb646e3b85
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/until/index.md
@@ -0,0 +1,66 @@
+---
+title: Temporal.PlainYearMonth.prototype.until()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/until
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.until
+---
+
+{{JSRef}}
+
+The **`until()`** method of {{jsxref("Temporal.PlainYearMonth")}} instances returns a new {{jsxref("Temporal.Duration")}} object representing the duration from this year-month to another year-month (in a form convertible by {{jsxref("Temporal/PlainYearMonth/from", "Temporal.PlainYearMonth.from()")}}). The duration is positive if the other month is after this month, and negative if before.
+
+This method does `other - this`. To do `this - other`, use the {{jsxref("Temporal/PlainYearMonth/since", "since()")}} method.
+
+## Syntax
+
+```js-nolint
+until(other)
+until(other, options)
+```
+
+### Parameters
+
+- `other`
+ - : A string, an object, or a {{jsxref("Temporal.PlainYearMonth")}} instance representing a year-month to subtract this year-month from. It is converted to a `Temporal.PlainYearMonth` object using the same algorithm as {{jsxref("Temporal/PlainYearMonth/from", "Temporal.PlainYearMonth.from()")}}. It must have the same calendar as `this`.
+- `options` {{optional_inline}}
+ - : The same options as [`since()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/since#options).
+
+### Return value
+
+A new {{jsxref("Temporal.Duration")}} object representing the duration from this year-month _until_ `other`. The duration is positive if `other` is after this year-month, and negative if before.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - `other` has a different calendar than `this`.
+ - Any of the options is invalid.
+
+## Examples
+
+### Using until()
+
+```js
+const launch = Temporal.PlainYearMonth.from("2035-01");
+const now = Temporal.Now.plainDateISO().toPlainYearMonth();
+const duration = now.until(launch);
+console.log(`It will be ${duration.toLocaleString("en-US")} until the launch`);
+```
+
+For more examples, see [`since()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/since).
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/PlainYearMonth/add", "Temporal.PlainYearMonth.prototype.add()")}}
+- {{jsxref("Temporal/PlainYearMonth/subtract", "Temporal.PlainYearMonth.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainYearMonth/since", "Temporal.PlainYearMonth.prototype.since()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/valueof/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/valueof/index.md
new file mode 100644
index 000000000000000..53bbb06c9a34db8
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/valueof/index.md
@@ -0,0 +1,64 @@
+---
+title: Temporal.PlainYearMonth.prototype.valueOf()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/valueOf
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.valueOf
+---
+
+{{JSRef}}
+
+The **`valueOf()`** method of {{jsxref("Temporal.PlainYearMonth")}} instances throws a {{jsxref("TypeError")}}, which prevents `Temporal.PlainYearMonth` instances from being [implicitly converted to primitives](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) when used in arithmetic or comparison operations.
+
+## Syntax
+
+```js-nolint
+valueOf()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+None.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Always thrown.
+
+## Description
+
+Because both [primitive conversion](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) and [number conversion](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number#number_coercion) call `valueOf()` before `toString()`, if `valueOf()` is absent, then an expression like `yearMonth1 > yearMonth2` would implicitly compare them as strings, which may have unexpected results. By throwing a `TypeError`, `Temporal.PlainYearMonth` instances prevent such implicit conversions. You need to explicitly convert them to strings using {{jsxref("Temporal/PlainYearMonth/toString", "Temporal.PlainYearMonth.prototype.toString()")}}, or use the {{jsxref("Temporal/PlainYearMonth/compare", "Temporal.PlainYearMonth.compare()")}} static method to compare them.
+
+## Examples
+
+### Arithmetic and comparison operations on Temporal.PlainYearMonth
+
+All arithmetic and comparison operations on `Temporal.PlainYearMonth` instances should use the dedicated methods or convert them to primitives explicitly.
+
+```js
+const ym1 = Temporal.PlainYearMonth.from("2021-01");
+const ym2 = Temporal.PlainYearMonth.from("2021-07");
+ym1 > ym2; // TypeError: can't convert PlainYearMonth to primitive type
+Temporal.PlainYearMonth.compare(ym1, ym2); // -1
+
+ym2 - ym1; // TypeError: can't convert PlainYearMonth to primitive type
+ym2.since(ym1).toString(); // "P6M"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal/PlainYearMonth/toString", "Temporal.PlainYearMonth.prototype.toString()")}}
+- {{jsxref("Temporal/PlainYearMonth/toJSON", "Temporal.PlainYearMonth.prototype.toJSON()")}}
+- {{jsxref("Temporal/PlainYearMonth/toLocaleString", "Temporal.PlainYearMonth.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/with/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/with/index.md
new file mode 100644
index 000000000000000..777e7cc4eb5edb2
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/with/index.md
@@ -0,0 +1,73 @@
+---
+title: Temporal.PlainYearMonth.prototype.with()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/with
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.with
+---
+
+{{JSRef}}
+
+The **`with()`** method of {{jsxref("Temporal.PlainYearMonth")}} instances returns a new `Temporal.PlainYearMonth` object representing this year-month with some fields replaced by new values. Because all `Temporal` objects are designed to be immutable, this method essentially functions as the setter for the year-month's fields.
+
+There's no obvious way to create a new `Temporal.PlainYearMonth` object that represents the same year-month in a different calendar, so to replace its `calendarId` property, you need to convert it to a {{jsxref("Temporal.PlainDate")}} object first using {{jsxref("Temporal/PlainYearMonth/toPlainDate", "toPlainDate()")}}, change the calendar, and then convert it back.
+
+## Syntax
+
+```js-nolint
+with(info)
+with(info, options)
+```
+
+### Parameters
+
+- `info`
+ - : An object containing at least one of the properties recognized by {{jsxref("Temporal/PlainYearMonth/from", "Temporal.PlainYearMonth.from()")}} (except `calendar`): `era` and `eraYear`, `month`, `monthCode`, `year`. Unspecified properties use the values from the original year-month. You only need to provide one of `month` or `monthCode`, and one of `era` and `eraYear` or `year`, and the other will be updated accordingly.
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `overflow` {{optional_inline}}
+ - : A string specifying the behavior when a date component is out of range. Possible values are:
+ - `"constrain"` (default)
+ - : The date component is [clamped](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#invalid_date_clamping) to the valid range.
+ - `"reject"`
+ - : A {{jsxref("RangeError")}} is thrown if the date component is out of range.
+
+### Return value
+
+A new `Temporal.PlainYearMonth` object, where the fields specified in `info` that are not `undefined` are replaced by the corresponding values, and the rest of the fields are copied from the original date.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Thrown in one of the following cases:
+ - `info` is not an object.
+ - `options` is not an object or `undefined`.
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - The provided properties that specify the same component are inconsistent.
+ - The provided non-numerical properties are not valid; for example, if `monthCode` is never a valid month code in this calendar.
+ - The provided numerical properties are out of range, and `options.overflow` is set to `"reject"`.
+
+## Examples
+
+### Using with()
+
+```js
+const ym = Temporal.PlainYearMonth.from("2021-07");
+const newYM = ym.with({ year: 2024 });
+console.log(newYM.toString()); // "2024-07"
+```
+
+For more examples, see the documentation for the individual properties that can be set using `with()`.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal/PlainYearMonth/from", "Temporal.PlainYearMonth.from()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/year/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/year/index.md
new file mode 100644
index 000000000000000..b0398caff678334
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/plainyearmonth/year/index.md
@@ -0,0 +1,42 @@
+---
+title: Temporal.PlainYearMonth.prototype.year
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth/year
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.PlainYearMonth.year
+---
+
+{{JSRef}}
+
+The **`year`** accessor property of {{jsxref("Temporal.PlainYearMonth")}} instances returns an integer representing the number of years of this year-month relative to the start of a calendar-specific epoch year. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `year` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/PlainYearMonth/with", "with()")}} method to create a new `Temporal.PlainYearMonth` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/year", "Temporal.PlainDate.prototype.year")}}.
+
+## Examples
+
+### Using year
+
+```js
+const ym = Temporal.PlainYearMonth.from("2021-07"); // ISO 8601 calendar
+console.log(ym.year); // 2021
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.PlainYearMonth")}}
+- {{jsxref("Temporal/PlainYearMonth/with", "Temporal.PlainYearMonth.prototype.with()")}}
+- {{jsxref("Temporal/PlainYearMonth/add", "Temporal.PlainYearMonth.prototype.add()")}}
+- {{jsxref("Temporal/PlainYearMonth/subtract", "Temporal.PlainYearMonth.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainYearMonth/era", "Temporal.PlainYearMonth.prototype.era")}}
+- {{jsxref("Temporal/PlainYearMonth/eraYear", "Temporal.PlainYearMonth.prototype.eraYear")}}
+- {{jsxref("Temporal/PlainYearMonth/month", "Temporal.PlainYearMonth.prototype.month")}}
+- {{jsxref("Temporal/PlainDate/year", "Temporal.PlainDate.prototype.year")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/add/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/add/index.md
new file mode 100644
index 000000000000000..1664a23530a4556
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/add/index.md
@@ -0,0 +1,91 @@
+---
+title: Temporal.ZonedDateTime.prototype.add()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/add
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.add
+---
+
+{{JSRef}}
+
+The **`add()`** method of {{jsxref("Temporal.ZonedDateTime")}} instances returns a new `Temporal.ZonedDateTime` object representing this date-time moved forward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}).
+
+## Syntax
+
+```js-nolint
+add(duration)
+add(duration, options)
+```
+
+### Parameters
+
+- `duration`
+ - : A string, an object, or a {{jsxref("Temporal.Duration")}} instance representing a duration to add to this date-time. It is converted to a `Temporal.Duration` object using the same algorithm as {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}.
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `overflow` {{optional_inline}}
+ - : A string specifying the behavior when a date component is out of range. Possible values are:
+ - `"constrain"` (default)
+ - : The date component is [clamped](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#invalid_date_clamping) to the valid range.
+ - `"reject"`
+ - : A {{jsxref("RangeError")}} is thrown if the date component is out of range.
+
+### Return value
+
+A new `Temporal.ZonedDateTime` object representing the date-time specified by the original `ZonedDateTime`, plus the duration.
+
+## Description
+
+For how [calendar durations](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#calendar_durations) are added, see {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}.
+
+Addition and subtraction are performed according to rules defined in [RFC 5545 (iCalendar)](https://datatracker.ietf.org/doc/html/rfc5545):
+
+- Add/subtract the date portion of a duration using calendar arithmetic; in other words, add the date portion to its `PlainDateTime` using {{jsxref("Temporal/PlainDateTime/add", "Temporal.PlainDateTime.prototype.add()")}}, and then interpret the result in the same time zone. The result will automatically adjust for daylight saving time using the rules of this instance's `timeZone` field. For example, `2024-11-03T01:00:00-04:00[America/New_York]` plus one day is `2024-11-04T01:00:00-05:00[America/New_York]`, as if the day has 25 hours.
+ - If the date-time is [ambiguous](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#ambiguity_and_gaps_from_local_time_to_utc_time) or invalid due to a time zone offset transition, it is resolved using the `disambiguation: "compatible"` behavior: the later of the two possible instants will be used for time-skipped transitions and the earlier of the two possible instants will be used for time-repeated transitions. For example, `2024-03-09T02:05:00-05:00[America/New_York]` plus one day is supposedly `2024-03-10T02:05:00-05:00[America/New_York]`, but this time doesn't exist, so the wall-clock time one hour after, `2024-03-10T03:05:00-04:00[America/New_York]`, is returned.
+ - If the [offset is ambiguous](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#offset_ambiguity), it is resolved using the `offset: "prefer"` behavior: the offset is used if it's valid for the time zone and the local time, and recalculated otherwise. For example, `2024-11-02T01:00:00-04:00[America/New_York]` plus one day is `2024-11-03T01:00:00-04:00[America/New_York]`, while `2024-11-04T01:00:00-05:00[America/New_York]` minus one day is `2024-11-03T01:00:00-05:00[America/New_York]`.
+ - If the resulting date-time's components are out of bounds, they are resolved using the `overflow` option. For example, `2024-08-31` plus one month is `2024-09-31` which doesn't exist, so it is clamped to `2024-09-30` by default.
+- Add/subtract the time portion of a duration using real-world time; in other words, add the time portion to its `Instant` using {{jsxref("Temporal/Instant/add", "Temporal.Instant.prototype.add()")}}, and then interpret the result in the same time zone. For example, `2024-11-03T01:00:00-04:00[America/New_York]` plus one hour is `2024-11-03T01:00:00-05:00[America/New_York]`.
+
+These rules make arithmetic with `Temporal.ZonedDateTime` "DST-safe", which means that the results most closely match the expectations of both real-world users and implementers of other standards-compliant calendar applications. These expectations include:
+
+- Adding or subtracting days should keep clock time consistent across DST transitions. For example, if you have an appointment on Saturday at 1:00PM and you ask to reschedule it 1 day later, you would expect the reschedule appointment to still be at 1:00PM, even if there was a DST transition overnight.
+- Adding or subtracting the time portion of a duration should ignore DST transitions. For example, a friend you've asked to meet in in 2 hours will be annoyed if you show up 1 hour or 3 hours later. There should be a consistent and relatively-unsurprising order of operations.
+- If results are at or near a DST transition, ambiguities should be handled automatically (no crashing) and deterministically.
+
+Adding a duration is equivalent to [subtracting](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/subtract) its [negation](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/negated).
+
+## Examples
+
+### Adding a duration
+
+```js
+const start = Temporal.ZonedDateTime.from(
+ "2021-11-01T12:34:56-04:00[America/New_York]",
+);
+const end = start.add({
+ years: 1,
+ months: 2,
+ weeks: 3,
+ days: 4,
+ hours: 5,
+ minutes: 6,
+ seconds: 7,
+ milliseconds: 8,
+});
+console.log(end.toString()); // 2023-01-26T17:41:03.008-05:00[America/New_York]
+```
+
+For more examples, especially with how different calendars and the `overflow` option interact with calendar durations, see {{jsxref("Temporal/PlainDate/add", "Temporal.PlainDate.prototype.add()")}}.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/calendarid/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/calendarid/index.md
new file mode 100644
index 000000000000000..a21f95cc401e019
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/calendarid/index.md
@@ -0,0 +1,45 @@
+---
+title: Temporal.ZonedDateTime.prototype.calendarId
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/calendarId
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.calendarId
+---
+
+{{JSRef}}
+
+The **`calendarId`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a string representing the [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars) used to interpret the internal ISO 8601 date.
+
+For a list of commonly supported values, see {{jsxref("Intl/Locale/getCalendars", "Intl.Locale.prototype.getCalendars()")}}.
+
+The set accessor of `calendarId` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/ZonedDateTime/withCalendar", "withCalendar()")}} method to create a new `Temporal.ZonedDateTime` object with the desired new value.
+
+## Examples
+
+### Using calendarId
+
+```js
+const dt = Temporal.ZonedDateTime.from(
+ "2021-07-01T08:00:00-04:00[America/New_York]",
+);
+console.log(dt.calendarId); // "iso8601"; default
+
+const dt2 = Temporal.ZonedDateTime.from(
+ "2021-07-01T08:00:00+08:00[Asia/Shanghai][u-ca=chinese]",
+);
+console.log(dt2.calendarId); // "chinese"
+
+const dt3 = dt2.withCalendar("hebrew");
+console.log(dt3.calendarId); // "hebrew"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/compare/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/compare/index.md
new file mode 100644
index 000000000000000..788f4f46e63b8f3
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/compare/index.md
@@ -0,0 +1,85 @@
+---
+title: Temporal.ZonedDateTime.compare()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/compare
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.compare
+---
+
+{{JSRef}}
+
+The **`Temporal.ZonedDateTime.compare()`** static method returns a number (-1, 0, or 1) indicating whether the first date-time comes before, is the same as, or comes after the second date-time. It is equivalent to comparing the {{jsxref("Temporal/ZonedDateTime/epochNanoseconds", "epochNanoseconds")}} of the two datetimes.
+
+## Syntax
+
+```js-nolint
+Temporal.ZonedDateTime.compare(dateTime1, dateTime2)
+```
+
+### Parameters
+
+- `dateTime1`
+ - : A string, an object, or a {{jsxref("Temporal.ZonedDateTime")}} instance representing the first date-time to compare. It is converted to a `Temporal.ZonedDateTime` object using the same algorithm as {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}}.
+- `dateTime2`
+ - : The second date-time to compare, converted to a `Temporal.ZonedDateTime` object using the same algorithm as `dateTime1`.
+
+### Return value
+
+Returns `-1` if `dateTime1` comes before `dateTime2`, `0` if they are the same, and `1` if `dateTime2` comes after. They are compared by their underlying instant values, ignoring their calendars or time zones.
+
+## Examples
+
+### Using Temporal.ZonedDateTime.compare()
+
+```js
+const dt1 = Temporal.ZonedDateTime.from("2021-08-01T01:00:00[Europe/London]");
+const dt2 = Temporal.ZonedDateTime.from("2021-08-02T00:00:00[Europe/London]");
+console.log(Temporal.ZonedDateTime.compare(dt1, dt2)); // -1
+
+const dt3 = Temporal.ZonedDateTime.from("2021-08-01T00:00:00[Europe/London]");
+console.log(Temporal.ZonedDateTime.compare(dt1, dt3)); // 1
+```
+
+### Sorting an array of date-times
+
+The purpose of this `compare()` function is to act as a comparator to be passed to {{jsxref("Array.prototype.sort()")}} and related functions.
+
+```js
+const dateTimes = [
+ Temporal.ZonedDateTime.from("2021-08-01T00:00:00[America/New_York]"),
+ Temporal.ZonedDateTime.from("2021-08-01T00:00:00[Asia/Hong_Kong]"),
+ Temporal.ZonedDateTime.from("2021-08-01T00:00:00[Europe/London]"),
+];
+
+dateTimes.sort(Temporal.ZonedDateTime.compare);
+console.log(dateTimes.map((d) => d.toString()));
+// [ "2021-08-01T00:00:00+08:00[Asia/Hong_Kong]", "2021-08-01T00:00:00+01:00[Europe/London]", "2021-08-01T00:00:00-04:00[America/New_York]" ]
+```
+
+Note that they are compared by their instant values. In the very rare case where you want to compare them by their wall-clock times, convert them to `PlainDateTime` first.
+
+```js
+const dateTimes = [
+ Temporal.ZonedDateTime.from("2021-08-01T00:00:00[America/New_York]"),
+ Temporal.ZonedDateTime.from("2021-08-01T00:00:00[Asia/Hong_Kong]"),
+ Temporal.ZonedDateTime.from("2021-08-01T00:00:00[Europe/London]"),
+];
+
+dateTimes.sort((a, b) =>
+ Temporal.PlainDateTime.compare(a.toPlainDateTime(), b.toPlainDateTime()),
+);
+console.log(dateTimes.map((d) => d.toString()));
+// [ "2021-08-01T00:00:00-04:00[America/New_York]", "2021-08-01T00:00:00+08:00[Asia/Hong_Kong]", "2021-08-01T00:00:00+01:00[Europe/London]" ]
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/equals", "Temporal.ZonedDateTime.prototype.equals()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/day/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/day/index.md
new file mode 100644
index 000000000000000..cef405c27a6bf2b
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/day/index.md
@@ -0,0 +1,61 @@
+---
+title: Temporal.ZonedDateTime.prototype.day
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/day
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.day
+---
+
+{{JSRef}}
+
+The **`day`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a positive integer representing the 1-based day index in the month of this date, which is the same day number you would see on a calendar. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `day` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/ZonedDateTime/with", "with()")}} method to create a new `Temporal.ZonedDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/day", "Temporal.PlainDate.prototype.day")}}.
+
+For `PlainDate`, `day` can only be non-continuous if the calendar skips days. For `ZonedDateTime`, `day` can also be non-continuous if the time zone changes its offset by 24 hours; this actually happened. See the example below.
+
+## Examples
+
+### Using day
+
+```js
+const dt = Temporal.ZonedDateTime.from("2021-07-01[America/New_York]"); // ISO 8601 calendar
+console.log(dt.day); // 1
+```
+
+### Non-continuous day
+
+To better align times with its trading partners in Asia, the country of Samoa [changed its time zone](https://en.wikipedia.org/wiki/Time_in_Samoa) to the other side of the International Date Line, shifting its offset from -10:00 to +14:00 (daylight saving time). This resulted in a 24-hour abrupt change in the local time, therefore skipping the day December 30, 2011 entirely. `2011-12-29T23:59:59-10:00[Pacific/Apia]` is immediately followed by `2011-12-31T00:00:00+14:00[Pacific/Apia]`.
+
+```js
+const dt = Temporal.ZonedDateTime.from(
+ "2011-12-29T23:59:59-10:00[Pacific/Apia]",
+);
+console.log(dt.day); // 29
+const nextDay = dt.add({ seconds: 1 });
+console.log(nextDay.day); // 31
+```
+
+For this reason, you should always prefer {{jsxref("Temporal/ZonedDateTime/add", "add()")}} and {{jsxref("Temporal/ZonedDateTime/subtract", "subtract()")}} to manipulate dates and times, rather than directly changing the `day` property.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/year", "Temporal.ZonedDateTime.prototype.year")}}
+- {{jsxref("Temporal/ZonedDateTime/month", "Temporal.ZonedDateTime.prototype.month")}}
+- {{jsxref("Temporal/ZonedDateTime/daysInMonth", "Temporal.ZonedDateTime.prototype.daysInMonth")}}
+- {{jsxref("Temporal/ZonedDateTime/dayOfWeek", "Temporal.ZonedDateTime.prototype.dayOfWeek")}}
+- {{jsxref("Temporal/ZonedDateTime/dayOfYear", "Temporal.ZonedDateTime.prototype.dayOfYear")}}
+- {{jsxref("Temporal/PlainDate/day", "Temporal.PlainDate.prototype.day")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/dayofweek/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/dayofweek/index.md
new file mode 100644
index 000000000000000..b89b59af7024ebc
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/dayofweek/index.md
@@ -0,0 +1,44 @@
+---
+title: Temporal.ZonedDateTime.prototype.dayOfWeek
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/dayOfWeek
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.dayOfWeek
+---
+
+{{JSRef}}
+
+The **`dayOfWeek`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a positive integer representing the 1-based day index in the week of this date. Days in a week are numbered sequentially from `1` to {{jsxref("Temporal/ZonedDateTime/daysInWeek", "daysInWeek")}}, with each number mapping to its name. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `dayOfWeek` is `undefined`. You cannot change this property directly. To create a new `Temporal.ZonedDateTime` object with the desired new `dayOfWeek` value, use the {{jsxref("Temporal/ZonedDateTime/add", "add()")}} or {{jsxref("Temporal/ZonedDateTime/subtract", "subtract()")}} method with the appropriate number of `days`.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/dayOfWeek", "Temporal.PlainDate.prototype.dayOfWeek")}}.
+
+## Examples
+
+### Using dayOfWeek
+
+```js
+const dt = Temporal.ZonedDateTime.from("2021-07-01[America/New_York]");
+console.log(dt.dayOfWeek); // 4; Thursday
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/day", "Temporal.ZonedDateTime.prototype.day")}}
+- {{jsxref("Temporal/ZonedDateTime/dayOfYear", "Temporal.ZonedDateTime.prototype.dayOfYear")}}
+- {{jsxref("Temporal/ZonedDateTime/daysInWeek", "Temporal.ZonedDateTime.prototype.daysInWeek")}}
+- {{jsxref("Temporal/ZonedDateTime/weekOfYear", "Temporal.ZonedDateTime.prototype.weekOfYear")}}
+- {{jsxref("Temporal/ZonedDateTime/yearOfWeek", "Temporal.ZonedDateTime.prototype.yearOfWeek")}}
+- {{jsxref("Temporal/PlainDate/dayOfWeek", "Temporal.PlainDate.prototype.dayOfWeek")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/dayofyear/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/dayofyear/index.md
new file mode 100644
index 000000000000000..47671cbce21ec45
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/dayofyear/index.md
@@ -0,0 +1,43 @@
+---
+title: Temporal.ZonedDateTime.prototype.dayOfYear
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/dayOfYear
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.dayOfYear
+---
+
+{{JSRef}}
+
+The **`dayOfYear`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a positive integer representing the 1-based day index in the year of this date. The first day of this year is `1`, and the last day is the {{jsxref("Temporal/ZonedDateTime/daysInYear", "daysInYear")}}. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `dayOfYear` is `undefined`. You cannot change this property directly. To create a new `Temporal.ZonedDateTime` object with the desired new `dayOfYear` value, use the {{jsxref("Temporal/ZonedDateTime/add", "add()")}} or {{jsxref("Temporal/ZonedDateTime/subtract", "subtract()")}} method with the appropriate number of `days`.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/dayOfYear", "Temporal.PlainDate.prototype.dayOfYear")}}.
+
+## Examples
+
+### Using dayOfYear
+
+```js
+const dt = Temporal.ZonedDateTime.from("2021-07-01[America/New_York]");
+console.log(dt.dayOfYear); // 182
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/year", "Temporal.ZonedDateTime.prototype.year")}}
+- {{jsxref("Temporal/ZonedDateTime/day", "Temporal.ZonedDateTime.prototype.day")}}
+- {{jsxref("Temporal/ZonedDateTime/dayOfWeek", "Temporal.ZonedDateTime.prototype.dayOfWeek")}}
+- {{jsxref("Temporal/ZonedDateTime/daysInYear", "Temporal.ZonedDateTime.prototype.daysInYear")}}
+- {{jsxref("Temporal/PlainDate/dayOfYear", "Temporal.PlainDate.prototype.dayOfYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/daysinmonth/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/daysinmonth/index.md
new file mode 100644
index 000000000000000..dff3d8f0938d539
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/daysinmonth/index.md
@@ -0,0 +1,44 @@
+---
+title: Temporal.ZonedDateTime.prototype.daysInMonth
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/daysInMonth
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.daysInMonth
+---
+
+{{JSRef}}
+
+The **`daysInMonth`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a positive integer representing the number of days in the month of this date. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `daysInMonth` is `undefined`. You cannot change this property directly.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/daysInMonth", "Temporal.PlainDate.prototype.daysInMonth")}}.
+
+## Examples
+
+### Using daysInMonth
+
+```js
+const dt = Temporal.ZonedDateTime.from("2021-07-01[America/New_York]");
+console.log(dt.daysInMonth); // 31
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/year", "Temporal.ZonedDateTime.prototype.year")}}
+- {{jsxref("Temporal/ZonedDateTime/month", "Temporal.ZonedDateTime.prototype.month")}}
+- {{jsxref("Temporal/ZonedDateTime/day", "Temporal.ZonedDateTime.prototype.day")}}
+- {{jsxref("Temporal/ZonedDateTime/daysInWeek", "Temporal.ZonedDateTime.prototype.daysInWeek")}}
+- {{jsxref("Temporal/ZonedDateTime/daysInYear", "Temporal.ZonedDateTime.prototype.daysInYear")}}
+- {{jsxref("Temporal/PlainDate/daysInMonth", "Temporal.PlainDate.prototype.daysInMonth")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/daysinweek/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/daysinweek/index.md
new file mode 100644
index 000000000000000..d4f13715283fa09
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/daysinweek/index.md
@@ -0,0 +1,44 @@
+---
+title: Temporal.ZonedDateTime.prototype.daysInWeek
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/daysInWeek
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.daysInWeek
+---
+
+{{JSRef}}
+
+The **`daysInWeek`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a positive integer representing the number of days in the week of this date. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `daysInWeek` is `undefined`. You cannot change this property directly.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/daysInWeek", "Temporal.PlainDate.prototype.daysInWeek")}}.
+
+## Examples
+
+### Using daysInWeek
+
+```js
+const dt = Temporal.ZonedDateTime.from("2021-07-01[America/New_York]");
+console.log(dt.daysInWeek); // 7
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/yearOfWeek", "Temporal.ZonedDateTime.prototype.yearOfWeek")}}
+- {{jsxref("Temporal/ZonedDateTime/weekOfYear", "Temporal.ZonedDateTime.prototype.weekOfYear")}}
+- {{jsxref("Temporal/ZonedDateTime/dayOfWeek", "Temporal.ZonedDateTime.prototype.dayOfWeek")}}
+- {{jsxref("Temporal/ZonedDateTime/daysInMonth", "Temporal.ZonedDateTime.prototype.daysInMonth")}}
+- {{jsxref("Temporal/ZonedDateTime/daysInYear", "Temporal.ZonedDateTime.prototype.daysInYear")}}
+- {{jsxref("Temporal/PlainDate/daysInWeek", "Temporal.PlainDate.prototype.daysInWeek")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/daysinyear/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/daysinyear/index.md
new file mode 100644
index 000000000000000..c4c0ae903d59e15
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/daysinyear/index.md
@@ -0,0 +1,43 @@
+---
+title: Temporal.ZonedDateTime.prototype.daysInYear
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/daysInYear
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.daysInYear
+---
+
+{{JSRef}}
+
+The **`daysInYear`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a positive integer representing the number of days in the year of this date. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `daysInYear` is `undefined`. You cannot change this property directly.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/daysInYear", "Temporal.PlainDate.prototype.daysInYear")}}.
+
+## Examples
+
+### Using daysInYear
+
+```js
+const dt = Temporal.ZonedDateTime.from("2021-07-01[America/New_York]");
+console.log(dt.daysInYear); // 365
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/year", "Temporal.ZonedDateTime.prototype.year")}}
+- {{jsxref("Temporal/ZonedDateTime/dayOfYear", "Temporal.ZonedDateTime.prototype.dayOfYear")}}
+- {{jsxref("Temporal/ZonedDateTime/daysInMonth", "Temporal.ZonedDateTime.prototype.daysInMonth")}}
+- {{jsxref("Temporal/ZonedDateTime/daysInWeek", "Temporal.ZonedDateTime.prototype.daysInWeek")}}
+- {{jsxref("Temporal/PlainDate/daysInYear", "Temporal.PlainDate.prototype.daysInYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/epochmilliseconds/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/epochmilliseconds/index.md
new file mode 100644
index 000000000000000..703faa6dc98eef7
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/epochmilliseconds/index.md
@@ -0,0 +1,57 @@
+---
+title: Temporal.ZonedDateTime.prototype.epochMilliseconds
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/epochMilliseconds
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.epochMilliseconds
+---
+
+{{JSRef}}
+
+The **`epochMilliseconds`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns an integer representing the number of milliseconds elapsed since the Unix epoch (midnight at the beginning of January 1, 1970, UTC) to this instant. It is equivalent to dividing `epochNanoseconds` by `1e6` and flooring the result.
+
+The set accessor of `epochMilliseconds` is `undefined`. You cannot change this property directly. To create a new `Temporal.ZonedDateTime` object with the desired new `epochMilliseconds` value, use the {{jsxref("Temporal/ZonedDateTime/add", "add()")}} or {{jsxref("Temporal/ZonedDateTime/subtract", "subtract()")}} method with the appropriate duration.
+
+## Examples
+
+### Using epochMilliseconds
+
+```js
+const instant = Temporal.ZonedDateTime.from("2021-08-01T12:34:56.789Z[UTC]");
+console.log(instant.epochMilliseconds); // 1627821296789
+
+const instant2 = Temporal.ZonedDateTime.from("1969-08-01T12:34:56.789Z[UTC]");
+console.log(instant2.epochMilliseconds); // -13173903211
+```
+
+### Creating a ZonedDateTime object from an epochMilliseconds value
+
+You can create a `Temporal.ZonedDateTime` object from an `epochMilliseconds` value by first constructing a `Temporal.Instant` object using {{jsxref("Temporal/Instant/fromEpochMilliseconds", "Temporal.Instant.fromEpochMilliseconds()")}}, and then converting it to a `Temporal.ZonedDateTime` object using {{jsxref("Temporal/Instant/toZonedDateTimeISO", "Temporal.Instant.prototype.toZonedDateTimeISO()")}}:
+
+```js
+const epochMilliseconds = 1627821296789;
+const instant = Temporal.Instant.fromEpochMilliseconds(epochMilliseconds);
+const zdt = instant.toZonedDateTimeISO("UTC");
+console.log(zdt.toString()); // 2021-08-01T12:34:56.789+00:00[UTC]
+```
+
+Alternatively, use the {{jsxref("Temporal/ZonedDateTime/ZonedDateTime", "Temporal.ZonedDateTime()")}} constructor, but convert the milliseconds to nanoseconds first:
+
+```js
+const epochMilliseconds = 1627821296789;
+const epochNanoseconds = BigInt(epochMilliseconds) * 1e6n;
+const zdt = new Temporal.ZonedDateTime(epochNanoseconds, "UTC");
+console.log(zdt.toString()); // 2021-08-01T12:34:56.789+00:00[UTC]
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/epochNanoseconds", "Temporal.ZonedDateTime.prototype.epochNanoseconds")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/epochnanoseconds/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/epochnanoseconds/index.md
new file mode 100644
index 000000000000000..3406149c2963b85
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/epochnanoseconds/index.md
@@ -0,0 +1,49 @@
+---
+title: Temporal.ZonedDateTime.prototype.epochNanoseconds
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/epochNanoseconds
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.epochNanoseconds
+---
+
+{{JSRef}}
+
+The **`epochNanoseconds`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a {{jsxref("BigInt")}} representing the number of nanoseconds elapsed since the Unix epoch (midnight at the beginning of January 1, 1970, UTC) to this instant.
+
+The set accessor of `epochNanoseconds` is `undefined`. You cannot change this property directly. To create a new `Temporal.ZonedDateTime` object with the desired new `epochNanoseconds` value, use the {{jsxref("Temporal/ZonedDateTime/add", "add()")}} or {{jsxref("Temporal/ZonedDateTime/subtract", "subtract()")}} method with the appropriate duration.
+
+An instant can only represent ±108 days (about ±273,972.6 years) around the epoch, which is ±8.64e21 nanoseconds. Attempting to set `epochNanosecond` beyond this boundary throws a {{jsxref("RangeError")}}.
+
+## Examples
+
+### Using epochNanoseconds
+
+```js
+const instant = Temporal.ZonedDateTime.from("2021-08-01T12:34:56.789Z[UTC]");
+console.log(instant.epochNanoseconds); // 1627821296789000000n
+
+const instant2 = Temporal.ZonedDateTime.from("1969-08-01T12:34:56.789Z[UTC]");
+console.log(instant2.epochNanoseconds); // -13173903211000000n
+```
+
+### Creating a ZonedDateTime object from an epochNanoseconds value
+
+You can create a `Temporal.ZonedDateTime` object from an `epochNanoseconds` value using the {{jsxref("Temporal/ZonedDateTime/ZonedDateTime", "Temporal.ZonedDateTime()")}} constructor.
+
+```js
+const epochNanoseconds = 1627821296789000000n;
+const zdt = new Temporal.ZonedDateTime(epochNanoseconds, "UTC");
+console.log(zdt.toString()); // 2021-08-01T12:34:56.789+00:00[UTC]
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/epochMilliseconds", "Temporal.ZonedDateTime.prototype.epochMilliseconds")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/equals/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/equals/index.md
new file mode 100644
index 000000000000000..2fdca62c2f0a64b
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/equals/index.md
@@ -0,0 +1,86 @@
+---
+title: Temporal.ZonedDateTime.prototype.equals()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/equals
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.equals
+---
+
+{{JSRef}}
+
+The **`equals()`** method of {{jsxref("Temporal.ZonedDateTime")}} instances returns `true` if this date-time is equivalent in value to another date-time (in a form convertible by {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}}), and `false` otherwise. They are compared both by their instant values, time zones, and their calendars, so two date-times from different calendars or time zones may be considered equal by {{jsxref("Temporal/ZonedDateTime/compare", "Temporal.ZonedDateTime.compare()")}} but not by `equals()`.
+
+## Syntax
+
+```js-nolint
+equals(other)
+```
+
+### Parameters
+
+- `other`
+ - : A string, an object, or a {{jsxref("Temporal.ZonedDateTime")}} instance representing the other date-time to compare. It is converted to a `Temporal.ZonedDateTime` object using the same algorithm as {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}}.
+
+### Return value
+
+`true` if this date-time is equal to `other` both in their instant value, time zone, and their calendar, `false` otherwise.
+
+Note that the time zones are canonicalized before comparison, so if their [time zone IDs](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets) are both named and identify the same time zone, then they would be considered the same even when the exact names may be aliases of each other. Offset identifiers are compared by the offset values they represent. Offset identifiers never compare equal to named identifiers even when the named identifier's time zone always uses that offset.
+
+## Examples
+
+### Using equals()
+
+```js
+// Asia/Kolkata and Asia/Calcutta are aliases of each other
+const dt1 = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:34:56+05:30[Asia/Kolkata]",
+);
+const dt2 = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:34:56+05:30[Asia/Calcutta]",
+);
+console.log(dt1.equals(dt2)); // true
+
+const dt3 = Temporal.ZonedDateTime.from("2021-07-01T12:34:56+05:30[+05:30]");
+console.log(dt1.equals(dt3)); // false
+
+const dt4 = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:34:56+05:30[Asia/Kolkata][u-ca=buddhist]",
+);
+console.log(dt1.equals(dt4)); // false
+```
+
+### Testing if two time zone identifiers are equivalent
+
+```js
+function sameTimeZone(timeZone1, timeZone2) {
+ const dt1 = Temporal.ZonedDateTime.from({
+ year: 2021,
+ month: 7,
+ day: 1,
+ timeZone: timeZone1,
+ });
+ const dt2 = Temporal.ZonedDateTime.from({
+ year: 2021,
+ month: 7,
+ day: 1,
+ timeZone: timeZone2,
+ });
+ return dt1.equals(dt2);
+}
+
+console.log(sameTimeZone("Asia/Kolkata", "Asia/Calcutta")); // true
+console.log(sameTimeZone("Asia/Shanghai", "Asia/Taipei")); // false
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/compare", "Temporal.ZonedDateTime.compare()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/era/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/era/index.md
new file mode 100644
index 000000000000000..baeb828ae46e2c4
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/era/index.md
@@ -0,0 +1,46 @@
+---
+title: Temporal.ZonedDateTime.prototype.era
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/era
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.era
+---
+
+{{JSRef}}
+
+The **`era`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a calendar-specific lowercase string representing the era of this date, or `undefined` if the calendar does not use eras (e.g. ISO 8601). `era` and `eraYear` together uniquely identify a year in a calendar, in the same way that `year` does. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `era` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/ZonedDateTime/with", "with()")}} method to create a new `Temporal.ZonedDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/era", "Temporal.PlainDate.prototype.era")}}.
+
+## Examples
+
+### Using era
+
+```js
+const dt = Temporal.ZonedDateTime.from("2021-07-01[America/New_York]"); // ISO 8601 calendar
+console.log(dt.era); // undefined
+
+const dt2 = Temporal.ZonedDateTime.from(
+ "2021-07-01[America/New_York][u-ca=gregory]",
+);
+console.log(dt2.era); // gregory
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/year", "Temporal.ZonedDateTime.prototype.year")}}
+- {{jsxref("Temporal/ZonedDateTime/eraYear", "Temporal.ZonedDateTime.prototype.eraYear")}}
+- {{jsxref("Temporal/PlainDate/era", "Temporal.PlainDate.prototype.era")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/erayear/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/erayear/index.md
new file mode 100644
index 000000000000000..6b5a9f1f6de0dfa
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/erayear/index.md
@@ -0,0 +1,56 @@
+---
+title: Temporal.ZonedDateTime.prototype.eraYear
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/eraYear
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.eraYear
+---
+
+{{JSRef}}
+
+The **`eraYear`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a non-negative integer representing the year of this date within the era, or `undefined` if the calendar does not use eras (e.g. ISO 8601). The year index usually starts from 1 (more common) or 0, and years in an era can decrease with time (e.g. Gregorian BCE). `era` and `eraYear` together uniquely identify a year in a calendar, in the same way that `year` does. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `eraYear` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/ZonedDateTime/with", "with()")}} method to create a new `Temporal.ZonedDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/eraYear", "Temporal.PlainDate.prototype.eraYear")}}.
+
+## Examples
+
+### Using eraYear
+
+```js
+const dt = Temporal.ZonedDateTime.from("2021-07-01[America/New_York]"); // ISO 8601 calendar
+console.log(dt.eraYear); // undefined
+
+const dt2 = Temporal.ZonedDateTime.from(
+ "2021-07-01[America/New_York][u-ca=gregory]",
+);
+console.log(dt2.eraYear); // 2021
+
+const dt3 = Temporal.ZonedDateTime.from(
+ "-002021-07-01[America/New_York][u-ca=gregory]",
+);
+console.log(dt3.eraYear); // 2022; 0000 is used for the year 1 BC
+
+const dt4 = Temporal.ZonedDateTime.from(
+ "2021-07-01[America/New_York][u-ca=japanese]",
+);
+console.log(dt4.eraYear); // 3
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/year", "Temporal.ZonedDateTime.prototype.year")}}
+- {{jsxref("Temporal/ZonedDateTime/era", "Temporal.ZonedDateTime.prototype.era")}}
+- {{jsxref("Temporal/PlainDate/eraYear", "Temporal.PlainDate.prototype.eraYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/from/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/from/index.md
new file mode 100644
index 000000000000000..aecb3836f52b406
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/from/index.md
@@ -0,0 +1,161 @@
+---
+title: Temporal.ZonedDateTime.from()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/from
+page-type: javascript-static-method
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.from
+---
+
+{{JSRef}}
+
+The **`Temporal.ZonedDateTime.from()`** static method creates a new `Temporal.ZonedDateTime` object from another `Temporal.ZonedDateTime` object, an object with date, time, and time zone properties, or an [RFC 9557](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#rfc_9557_format) string.
+
+## Syntax
+
+```js-nolint
+Temporal.ZonedDateTime.from(info)
+Temporal.ZonedDateTime.from(info, options)
+```
+
+### Parameters
+
+- `info`
+ - : One of the following:
+ - A {{jsxref("Temporal.ZonedDateTime")}} instance, which creates a copy of the instance.
+ - An [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#rfc_9557_format) string containing a date, optionally a time, optionally an offset, a time zone annotation, and optionally a calendar.
+ - An object containing properties that are accepted by either {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}} (`calendar`, `era`, `eraYear`, `year`, `month`, `monthCode`, `day`) or {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}} (`hour`, `minute`, `second`, `millisecond`, `microsecond`, `nanosecond`). The info should explicitly specify a year (as `year` or as `era` and `eraYear`), a month (as `month` or `monthCode`), and a day; others are optional and will be set to their default values. The following properties should be provided too:
+ - `timeZone`
+ - : Either a string or a {{jsxref("Temporal.ZonedDateTime")}} instance representing the time zone to use. If a `Temporal.ZonedDateTime` instance, its time zone is used. If a string, it can be a named time zone identifier, an offset time zone identifier, or a date-time string containing a time zone identifier or an offset (see [time zones and offsets](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets) for more information). The time properties are interpreted in this time zone.
+ - `offset` {{optional_inline}}
+ - : A offset string, in the same format as the [RFC 9557](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#rfc_9557_format) offset (`±HH:mm:ss.sssssssss`), representing the offset from UTC. If omitted, it will be calculated from the time zone and the date-time. `"Z"` is not allowed.
+- `options` {{optional_inline}}
+ - : An object containing some or all of the following properties (in the order they are retrieved and validated):
+ - `disambiguation` {{optional_inline}}
+ - : What to do if the local date-time is ambiguous in the given time zone (there are more than one instants with such local time, or the local time does not exist). Possible values are `"compatible"`, `"earlier"`, `"later"`, and `"reject"`. Defaults to `"compatible"`. For more information about these values, see [ambiguity and gaps from local time to UTC time](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#ambiguity_and_gaps_from_local_time_to_utc_time).
+ - `offset` {{optional_inline}}
+ - : What to do if the offset is explicitly provided in `info` but the offset is invalid for the given time zone in the given local time. Possible values are `"use"`, `"ignore"`, `"reject"`, and `"prefer"`. Defaults to `"reject"`. For more information about these values, see [offset ambiguity](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#offset_ambiguity).
+ - `overflow` {{optional_inline}}
+ - : A string specifying the behavior when a date component is out of range (when using the object `info`). Possible values are:
+ - `"constrain"` (default)
+ - : The date component is [clamped](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#invalid_date_clamping) to the valid range.
+ - `"reject"`
+ - : A {{jsxref("RangeError")}} is thrown if the date component is out of range.
+
+### Return value
+
+A new `Temporal.ZonedDateTime` object, representing the date and time specified by `info` in the specified `calendar` and `timeZone`.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Thrown in one of the following cases:
+ - `info` is not an object or a string.
+ - `options` is not an object or `undefined`.
+ - The provided properties are insufficient to unambiguously determine a date. You usually need to provide a `year` (or `era` and `eraYear`), a `month` (or `monthCode`), and a `day`.
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - The provided properties that specify the same component are inconsistent.
+ - The provided non-numerical properties are not valid; for example, if `monthCode` is never a valid month code in this calendar.
+ - The provided numerical properties are out of range, and `options.overflow` is set to `"reject"`.
+
+## Examples
+
+### Creating a ZonedDateTime from an object
+
+```js
+// Year + month + day + hour + minute + second
+const zdt = Temporal.ZonedDateTime.from({
+ timeZone: "America/New_York",
+ year: 2021,
+ month: 7,
+ day: 1,
+ hour: 12,
+ minute: 34,
+ second: 56,
+});
+console.log(zdt.toString()); // "2021-07-01T12:34:56-04:00[America/New_York]"
+```
+
+### Creating a ZonedDateTime from a string
+
+```js
+const zdt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:34:56-04:00[America/New_York]",
+);
+console.log(zdt.toLocaleString()); // "7/1/2021, 12:34:56 PM EDT" (assuming en-US locale)
+
+// Time given as UTC, and converted to local
+const zdt2 = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:34:56Z[America/New_York]",
+);
+console.log(zdt2.toString()); // "2021-07-01T08:34:56-04:00[America/New_York]"
+```
+
+### Creating a ZonedDateTime from an ISO 8601 / RFC 3339 string
+
+Note that `Temporal.ZonedDateTime.from()` rejects ISO 8601 strings, which do not include a time zone identifier. This is to ensure that the time zone is always known and can be used to derive different offsets as the local time changes.
+
+If you want to parse an ISO 8601 string, first construct a {{jsxref("Temporal.Instant")}} object and then convert it to a `Temporal.ZonedDateTime` object. You can provide any time zone, even if it doesn't match the offset originally given in the string, and the local time will be adjusted accordingly.
+
+```js
+const isoString = "2021-07-01T12:34:56+02:00";
+const instant = Temporal.Instant.from(isoString);
+const zdt = instant.toZonedDateTimeISO("America/New_York");
+console.log(zdt.toString()); // "2021-07-01T06:34:56-04:00[America/New_York]"
+```
+
+### Local time disambiguation
+
+See [ambiguity and gaps from local time to UTC time](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#ambiguity_and_gaps_from_local_time_to_utc_time) for an introduction to this situation.
+
+```js
+const localTimeNotExist = "2024-03-10T02:05:00[America/New_York]";
+// For non-existent times, "compatible" is equivalent to "later"
+const zdt = Temporal.ZonedDateTime.from(localTimeNotExist);
+console.log(zdt.toString()); // "2024-03-10T03:05:00-04:00[America/New_York]"
+
+const zdt2 = Temporal.ZonedDateTime.from(localTimeNotExist, {
+ disambiguation: "earlier",
+});
+console.log(zdt2.toString()); // "2024-03-10T01:05:00-05:00[America/New_York]"
+
+const localTimeAmbiguous = "2024-11-03T01:05:00[America/New_York]";
+// For ambiguous times, "compatible" is equivalent to "earlier"
+const zdt3 = Temporal.ZonedDateTime.from(localTimeAmbiguous);
+console.log(zdt3.toString()); // "2024-11-03T01:05:00-04:00[America/New_York]"
+
+const zdt4 = Temporal.ZonedDateTime.from(localTimeAmbiguous, {
+ disambiguation: "later",
+});
+console.log(zdt4.toString()); // "2024-11-03T01:05:00-05:00[America/New_York]"
+```
+
+### Resolving offset ambiguity
+
+See [offset ambiguity](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#offset_ambiguity) for an introduction to this situation.
+
+```js
+const offsetAmbiguous = "2019-12-23T12:00:00-02:00[America/Sao_Paulo]";
+
+Temporal.ZonedDateTime.from(offsetAmbiguous);
+// RangeError: date-time can't be represented in the given time zone
+Temporal.ZonedDateTime.from(offsetAmbiguous, { offset: "use" }).toString();
+// "2019-12-23T11:00:00-03:00[America/Sao_Paulo]"
+Temporal.ZonedDateTime.from(offsetAmbiguous, { offset: "ignore" }).toString();
+// "2019-12-23T12:00:00-03:00[America/Sao_Paulo]"
+```
+
+For more examples, especially regarding different calendars and overflow settings, see {{jsxref("Temporal/PlainDate/from", "Temporal.PlainDate.from()")}} and {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/ZonedDateTime", "Temporal.ZonedDateTime()")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/gettimezonetransition/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/gettimezonetransition/index.md
new file mode 100644
index 000000000000000..95836766b7dbe48
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/gettimezonetransition/index.md
@@ -0,0 +1,74 @@
+---
+title: Temporal.ZonedDateTime.prototype.getTimeZoneTransition()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/getTimeZoneTransition
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.getTimeZoneTransition
+---
+
+{{JSRef}}
+
+The **`getTimeZoneTransition()`** method of {{jsxref("Temporal.ZonedDateTime")}} instances returns a {{jsxref("Temporal.ZonedDateTime")}} object representing the closest instant after or before this instant at which the time zone's UTC offset changes (the returned instant is the first instant after the change), or `null` if there is no such transition. This is useful for finding out the offset rules of a time zone, such as its daylight saving time pattern.
+
+Note that instants returned about the future may be unreliable, for example due to changes to the time zone definitions.
+
+## Syntax
+
+```js-nolint
+getTimeZoneTransition(direction)
+getTimeZoneTransition(options)
+```
+
+### Parameters
+
+- `direction`
+ - : A string representing the [`direction`](#direction_2) option. This is a convenience overload, so `getTimeZoneTransition(direction)` is equivalent to `round({ direction })`, where `direction` is a string.
+- `options`
+ - : An object containing the following property:
+ - `direction`
+ - : Whether to search before or after the current instant. Must be one of `"next"` or `"previous"`.
+
+### Return value
+
+A {{jsxref("Temporal.ZonedDateTime")}} object with instant `t`, such that:
+
+- The time zone offset at `t` is different from the offset one nanosecond before `t`.
+- `t < this.epochNanoseconds` if `direction` is `"previous"`, or `t > this.epochNanoseconds` if `direction` is `"next"`.
+- For all instants between `this.epochNanoseconds` and `t`, exclusive, the offset is constant.
+
+If there is no such transition, `null` is returned.
+
+## Examples
+
+### Finding the next time zone transition
+
+```js
+const dt = Temporal.ZonedDateTime.from("2024-01-01T00-05:00[America/New_York]");
+const transition = dt.getTimeZoneTransition("next");
+console.log(transition.toString()); // "2024-03-10T03:00:00-04:00[America/New_York]"
+
+const transition2 = transition.getTimeZoneTransition("next");
+console.log(transition2.toString()); // "2024-11-03T01:00:00-05:00[America/New_York]"
+
+const transition3 = dt.getTimeZoneTransition("previous");
+console.log(transition3.toString()); // "2023-11-05T01:00:00-05:00[America/New_York]"
+
+const dt2 = Temporal.ZonedDateTime.from("2024-01-01T00Z[UTC]");
+console.log(dt2.getTimeZoneTransition("next")); // null
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/timeZoneId", "Temporal.ZonedDateTime.prototype.timeZoneId")}}
+- {{jsxref("Temporal/ZonedDateTime/offset", "Temporal.ZonedDateTime.prototype.offset")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/hour/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/hour/index.md
new file mode 100644
index 000000000000000..eb7c6a51924de05
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/hour/index.md
@@ -0,0 +1,67 @@
+---
+title: Temporal.ZonedDateTime.prototype.hour
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/hour
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.hour
+---
+
+{{JSRef}}
+
+The **`hour`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a integer from 0 to 23 representing the hour component of this time.
+
+The set accessor of `hour` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/ZonedDateTime/with", "with()")}} method to create a new `Temporal.ZonedDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainTime/hour", "Temporal.PlainTime.prototype.hour")}}.
+
+For `ZonedDateTime`, `hour` can be non-continuous due to offset changes such as daylight saving time transitions. In this case, the hour may be repeated or skipped.
+
+## Examples
+
+### Using hour
+
+```js
+const dt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:34:56.123456789-04:00[America/New_York]",
+);
+console.log(dt.hour); // 12
+```
+
+### Non-continuous hour
+
+Non-continuous hour is very common due to daylight saving time transitions, which is explained more in [Ambiguity and gaps from local time to UTC time](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#ambiguity_and_gaps_from_local_time_to_utc_time).
+
+```js
+const dt = Temporal.ZonedDateTime.from(
+ "2024-11-03T01:59:00-04:00[America/New_York]",
+);
+console.log(dt.hour); // 1
+const dt2 = dt.add({ minutes: 1 });
+console.log(dt2.hour); // 1
+console.log(dt2.toString()); // 2024-11-03T01:00:00-05:00[America/New_York]
+
+const dt3 = Temporal.ZonedDateTime.from(
+ "2024-03-10T01:59:00-05:00[America/New_York]",
+);
+console.log(dt3.hour); // 1
+const dt4 = dt3.add({ minutes: 1 });
+console.log(dt4.hour); // 3
+console.log(dt4.toString()); // 2024-03-10T03:00:00-04:00[America/New_York]
+```
+
+For this reason, you should always prefer {{jsxref("Temporal/ZonedDateTime/add", "add()")}} and {{jsxref("Temporal/ZonedDateTime/subtract", "subtract()")}} to manipulate dates and times, rather than directly changing the `hour` property.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainTime/hour", "Temporal.PlainTime.prototype.hour")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/hoursinday/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/hoursinday/index.md
new file mode 100644
index 000000000000000..14064b8552267f1
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/hoursinday/index.md
@@ -0,0 +1,54 @@
+---
+title: Temporal.ZonedDateTime.prototype.hoursInDay
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/hoursInDay
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.hoursInDay
+---
+
+{{JSRef}}
+
+The **`hoursInDay`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a positive integer representing the number of hours in the day of this date in the time zone. It may be more or less than 24 in the case of offset changes such as daylight saving time.
+
+Because `ZonedDateTime` is the only class that's time zone-aware, and hours in a day can only change by offset changes, all other classes assume 24-hour days.
+
+The set accessor of `hoursInDay` is `undefined`. You cannot change this property directly.
+
+## Examples
+
+### Using hoursInDay
+
+```js
+const dt = Temporal.ZonedDateTime.from(
+ "2024-03-10T01:58:00-05:00[America/New_York]",
+);
+console.log(dt.hoursInDay); // 23; this is the day of transition into DST
+
+const dt2 = Temporal.ZonedDateTime.from(
+ "2024-11-03T01:58:00-04:00[America/New_York]",
+);
+console.log(dt2.hoursInDay); // 25; this is the day of transition out of DST
+
+const dt3 = Temporal.ZonedDateTime.from(
+ "2024-11-04T01:58:00-05:00[America/New_York]",
+);
+console.log(dt3.hoursInDay); // 24
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/hour", "Temporal.ZonedDateTime.prototype.hour")}}
+- {{jsxref("Temporal/ZonedDateTime/dayOfYear", "Temporal.ZonedDateTime.prototype.dayOfYear")}}
+- {{jsxref("Temporal/ZonedDateTime/daysInMonth", "Temporal.ZonedDateTime.prototype.daysInMonth")}}
+- {{jsxref("Temporal/ZonedDateTime/daysInWeek", "Temporal.ZonedDateTime.prototype.daysInWeek")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/index.md
new file mode 100644
index 000000000000000..5664fe9118cbce1
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/index.md
@@ -0,0 +1,299 @@
+---
+title: Temporal.ZonedDateTime
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime
+page-type: javascript-class
+browser-compat: javascript.builtins.Temporal.ZonedDateTime
+---
+
+{{JSRef}}
+
+The **`Temporal.ZonedDateTime`** object represents a date and time with a time zone. It is fundamentally represented as a combination of an [instant](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Instant), a time zone, and a calendar system.
+
+## Description
+
+A `ZonedDateTime` functions as a bridge between an exact time and a wall-clock time: it simultaneously represents an instant in history (like a {{jsxref("Temporal.Instant")}}) and a local, wall-clock time (like a {{jsxref("Temporal.PlainDateTime")}}). It does so by storing the instant, the time zone, and the calendar system. The time zone is used to convert between the instant and the local time, and the calendar system is used to interpret the local time.
+
+`ZonedDateTime` is the only `Temporal` class that is time zone-aware. The addition of a time zone makes `ZonedDateTime` objects have important behavior differences from {{jsxref("Temporal.PlainDateTime")}} objects. Namely, you can no longer assume that "the time 1 minute afterwards" is the same every day, or that a day has 24 hours. In the worst case, an entire day may be missing from the local calendar. Below, we offer a quick overview of time zones and offsets and how they affect conversion between UTC time and local time.
+
+### Time zones and offsets
+
+All times in JavaScript have one golden standard: the UTC time, which increments continuously and uniformly as physical time progresses. By contrast, users are more interested in their local time, which is the time they read on their calendars and clocks. The process of converting between UTC time and local time involves a time zone _offset_, which is calculated as:
+
+```plain
+local time = UTC time + offset
+```
+
+For example, if the UTC time is 1970-01-01T00:00:00, and the offset is "-05:00", then the local time is:
+
+```plain
+1970-01-01T00:00:00 + -05:00 = 1969-12-31T19:00:00
+```
+
+By suffixing this local time with the offset, thus expressing this time as "1969-12-31T19:00:00-05:00", it can now be unambiguously understood as an instant in history.
+
+To know the offset, we need two pieces of information, the _time zone_, and the _instant_. The time zone is a region on Earth where the same offset is used at all times. Two clocks in the same time zone will always show the same time simultaneously, but the offset is not necessarily constant: that is, these clocks' times may change abruptly. This commonly happens during daylight saving time transitions, where the offset changes by an hour, which happens twice a year. Offsets can also change permanently due to political changes, e.g., a country switching time zones.
+
+The time zones are stored in the [IANA Time Zone Database](https://www.iana.org/time-zones). Each IANA time zone has:
+
+- A _primary time zone identifier_ that uniquely identifies the time zone. It usually refers to a geographic area anchored by a city (e.g. `Europe/Paris` or `Africa/Kampala`), but can also denote single-offset time zones like `UTC` (a consistent `+00:00` offset) or `Etc/GMT+5` (which for historical reasons is a negative offset `-05:00`). For historical reasons, the primary name for the UTC time zone is `UTC`, though in IANA it is `Etc/UTC`.
+- A _time zone definition_ in the form of a table that maps UTC date/time ranges (including future ranges) to specific offsets.
+- Zero or more _non-primary time zone identifiers_ that are aliases to the primary time zone identifier. These are usually historical names that are no longer in use, but are kept for compatibility reasons. See below for more information.
+
+As input, named identifiers are matched case-insensitively. Internally, they are stored in their preferred case, and non-primary identifiers will _not_ be converted to their primary identifier.
+
+> [!NOTE]
+> When setting the time zone name, you rarely want to set it to `"UTC"`. `ZonedDateTime` is intended to be displayed to users, but no human lives in the "UTC" time zone. If you don't know the time zone at construction time but know the wall-clock time, use a {{jsxref("Temporal.PlainDateTime")}}. If you know the exact instant, use a {{jsxref("Temporal.Instant")}}.
+
+When a `Temporal` API accepts a _time zone identifier_, in addition to primary time zone identifiers and non-primary time zone identifiers, it also accepts an _offset time zone identifier_, which is in the same form as the offset, except subminute precision is not allowed. For example, `+05:30`, `-08`, `+0600` are all valid offsets identifiers. Internally, offset identifiers are stored in the `±HH:mm` form.
+
+> [!NOTE]
+> Avoid using offset identifiers if there is a named time zone you can use instead. Even if a region has always used a single offset, it is better to use the named identifier to guard against future political changes to the offset.
+>
+> If a region uses (or has used) multiple offsets, then using its named time zone is even more important. This is because `Temporal.ZonedDateTime` can use methods like `add` or `with` to create new instances at a different instant. If those derived instances correspond to an instant that uses a different offset (for example, after a Daylight Saving Time transition) then your calculations will have an incorrect local time. Using a named time zone ensures that local dates and times are always adjusted for the correct offset for that instant.
+
+For convenience, when providing a time zone identifier to `Temporal` APIs such as `Temporal.ZonedDateTime.prototype.withTimeZone()` and the `timeZoneId` option of `Temporal.ZonedDateTime.from()`, you can provide it in a few other forms:
+
+- As another `ZonedDateTime` instance, whose `timeZoneId` will be used.
+- As an [RFC 9557 string](#rfc_9557_format) with a time zone annotation, whose time zone identifier will be used.
+- As an ISO 8601 / RFC 3339 string containing an offset, whose offset will be used as an offset identifier; or, if using `Z`, then the `"UTC"` time zone is used. This usage is generally not recommended, because as discussed above, offset identifiers lack the ability to safely derive other `Temporal.ZonedDateTime` instances across an offset transition like when daylight saving time starts or ends. Instead, consider just using `Temporal.Instant` or fetching the user's actual named time zone.
+
+The IANA time zone database changes from time to time, usually to add new time zones in response to political changes. However, on rare occasions, IANA time zone identifiers are renamed to match updated English translation of a city name or to update outdated naming conventions. For example, here are a few notable name changes:
+
+| Current IANA primary identifier | Old, now non-primary identifier |
+| -------------------------------- | ------------------------------- |
+| `America/Argentina/Buenos_Aires` | `America/Buenos_Aires` |
+| `Asia/Kolkata` | `Asia/Calcutta` |
+| `Asia/Ho_Chi_Minh` | `Asia/Saigon` |
+| `Europe/Kyiv` | `Europe/Kiev` |
+
+Historically, these renames caused problems for programmers because the the Unicode [CLDR database](https://github.com/unicode-org/cldr-json/blob/main/cldr-json/cldr-bcp47/bcp47/timezone.json) (a library used by browsers rely on to supply time zone identifiers and data) did not follow IANA's renaming for [stability reasons](https://unicode.org/reports/tr35/#Time_Zone_Identifiers). As a result, some browsers like Chrome and Safari reported CLDR's outdated identifiers, while other browsers like Firefox overrode CLDR's defaults and reported the up-to-date primary identifiers.
+
+With the introduction of Temporal, this behavior is now more standardized:
+
+- [CLDR data](https://github.com/unicode-org/cldr-json/blob/main/cldr-json/cldr-bcp47/bcp47/timezone.json) now includes an `"_iana"` attribute that indicates the most up-to-date identifier if the older, stable identifier has been renamed. Browsers can use this new attribute to provide up-to-date identifiers to callers.
+- Time zone identifiers provided by the programmer will never be replaced with an alias. For example, if the caller provides `Asia/Calcutta` or `Asia/Kolkata` as the identifier input to `Temporal.ZonedDateTime.from()`, then the same identifier is returned in the resulting instance's `timeZoneId`. Note that the letter case of outputs will be normalized to match IANA, so that `ASIA/calCuTTa` as input generates a `timeZoneId` of `Asia/Calcutta` as output.
+- When a time zone identifier is not provided by a caller but is instead sourced from the system itself (for example, when using `Temporal.Now.timeZoneId()`), modern identifiers are returned in all browsers. Note that for future city renames, there will be a two-year lag before these system-provided-identifier APIs expose the new name, thereby giving other components (like a Node server) time to update their copies of the IANA database to recognize the new name.
+
+This standardization applies outside of `Temporal` as well. For example, the `timeZone` option returned by {{jsxref("Intl/DateTimeFormat/resolvedOptions", "Intl.DateTimeFormat.prototype.resolvedOptions()")}} is also never replaced with an alias, though browsers have traditionally canonicalized these identifiers prior to standardization by Temporal. On the other hand, {{jsxref("Intl/Locale/getTimeZones", "Intl.Locale.prototype.getTimeZones()")}} and {{jsxref("Intl.supportedValuesOf()")}} (`timeZone` option) will return the most up-to-date identifier, while some browsers used to return the old, non-primary identifier.
+
+### RFC 9557 format
+
+`ZonedDateTime` objects can be serialized and parsed using the [RFC 9557](https://datatracker.ietf.org/doc/html/rfc9557) format, an extension to the [ISO 8601 / RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) format. The string has the following form (spaces are only for readability and should not be present in the actual string):
+
+```plain
+YYYY-MM-DD T HH:mm:ss.sssssssss Z/±HH:mm:ss.sssssssss [time_zone_id] [u-ca=calendar_id]
+```
+
+- `YYYY`
+ - : Either a four-digit number, or a six-digit number with a `+` or `-` sign.
+- `MM`
+ - : A two-digit number from `01` to `12`.
+- `DD`
+ - : A two-digit number from `01` to `31`. The `YYYY`, `MM`, and `DD` components can be separated by `-` or nothing.
+- `T` {{optional_inline}}
+ - : The date-time separator, which can be `T`, `t`, or a space. Present if and only if `HH` is present.
+- `HH` {{optional_inline}}
+ - : A two-digit number from `00` to `23`. Defaults to `00`.
+- `mm` {{optional_inline}}
+ - : A two-digit number from `00` to `59`. Defaults to `00`.
+- `ss.sssssssss` {{optional_inline}}
+ - : A two-digit number from `00` to `59`. May optionally be followed by a `.` or `,` and one to nine digits. Defaults to `00`. The `HH`, `mm`, and `ss` components can be separated by `:` or nothing. You can omit either just `ss` or both `ss` and `mm`, so the time can be one of three forms: `HH`, `HH:mm`, or `HH:mm:ss.sssssssss`.
+- `Z/±HH:mm:ss.sssssssss` {{optional_inline}}
+ - : Either the UTC designator `Z` or `z`, or an offset from UTC in the form `+` or `-` followed by the same format as the time component. Note that subminute precision may be unsupported by other systems. If omitted, the offset is derived from the time zone identifier. If present, then the time must be provided too. `Z` is not the same as `+00:00`: the former means that the time is given in UTC form regardless of the time zone identifier, while the latter means that the time is given in local time which happens to be UTC+0, and will be validated against the time zone identifier via the [`offset` option](#offset_ambiguity).
+- `[time_zone_id]`
+ - : Replace `time_zone_id` with the time zone identifier (named or offset) as described above. May have a _critical flag_ by prefixing the identifier with `!`: e.g., `[!America/New_York]`. This flag generally tells other systems that it cannot be ignored if they don't support it. Note that it is required for `Temporal.ZonedDateTime.from()`: omitting it causes a `RangeError`. If you want to parse ISO 8601 / RFC 3339 strings without time zone identifier annotations, use {{jsxref("Temporal/Instant/from", "Temporal.Instant.from()")}} instead.
+- `[u-ca=calendar_id]` {{optional_inline}}
+ - : Replace `calendar_id` with the calendar to use. May have a _critical flag_ by prefixing the key with `!`: e.g., `[!u-ca=iso8601]`. This flag generally tells other systems that it cannot be ignored if they don't support it. The `Temporal` parser will throw an error if the annotations contain two or more calendar annotations and one of them is critical. Defaults to `[u-ca=iso8601]`. Note that the `YYYY-MM-DD` is always interpreted as an ISO 8601 calendar date and then converted to the specified calendar.
+
+As an input, other annotations in the `[key=value]` format are ignored, and they must not have the critical flag.
+
+When serializing, you can configure the fractional second digits, whether to display the offset/time zone ID/calendar ID, and whether to add a critical flag for the annotations.
+
+### Ambiguity and gaps from local time to UTC time
+
+Given a time zone, conversion from UTC to local time is straightforward: you first get the offset using the time zone name and the instant, then add the offset to the instant. The reverse is not true: conversion from local time to UTC time, without an explicit offset, is ambiguous, because one local time can correspond to zero, one, or many UTC times. Consider the most common cause: daylight saving time transitions. Take New York as an example. Its standard offset is UTC-5, but during DST, all clocks are set forward by an hour, so the offset becomes UTC-4. In the US, transitions happen at 2:00 AM local time, so consider these two transition days:
+
+| UTC time | New York time |
+| -------------------- | ------------------------- |
+| 2024-03-10T06:58:00Z | 2024-03-10T01:58:00-05:00 |
+| 2024-03-10T06:59:00Z | 2024-03-10T01:59:00-05:00 |
+| 2024-03-10T07:00:00Z | 2024-03-10T03:00:00-04:00 |
+| --- | --- |
+| 2024-11-03T05:58:00Z | 2024-11-03T01:58:00-04:00 |
+| 2024-11-03T05:59:00Z | 2024-11-03T01:59:00-04:00 |
+| 2024-11-03T06:00:00Z | 2024-11-03T01:00:00-05:00 |
+
+As you can see, in March, one hour disappeared from the local time, and in November, we have two hours that have the same wall-clock time. Suppose that we stored a `PlainDateTime` that says "2024-03-10T02:05:00", and we want to interpret it in the `America/New_York` time zone, there will be no time that corresponds to it, while a `PlainDateTime` that says "2024-11-03T01:05:00" can correspond to two different instants.
+
+When constructing a `ZonedDateTime` from a local time (using {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}}, {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}, {{jsxref("Temporal/PlainDateTime/toZonedDateTime", "Temporal.PlainDateTime.prototype.toZonedDateTime()")}}), the behavior for ambiguity and gaps is configurable via the `disambiguation` option:
+
+- `earlier`
+ - : If there are two possible instants, choose the earlier one. If there is a gap, go back by the gap duration.
+- `later`
+ - : If there are two possible instants, choose the later one. If there is a gap, go forward by the gap duration.
+- `compatible` (default)
+ - : Same behavior as {{jsxref("Date")}}: use `later` for gaps and `earlier` for ambiguities.
+- `reject`
+ - : Throw a `RangeError` whenever there is an ambiguity or a gap.
+
+There are several cases where there's no ambiguity when constructing a `ZonedDateTime`:
+
+- If the time is specified in UTC via the `Z` offset.
+- If the offset is explicitly provided and used (see below).
+
+### Offset ambiguity
+
+We already demonstrated how ambiguity may arise from interpreting a local time in a time zone, without providing an explicit offset. However, if you provide an explicit offset, then another conflict arises: between the offset as specified, and the offset as calculated from the time zone and the local time. This is an unavoidable real-world issue: if you store a time in the future, with an anticipated offset, then before that time comes, the time zone definition may have changed due to political reasons. For example, suppose in 2018, we set a reminder at the time `2019-12-23T12:00:00-02:00[America/Sao_Paulo]` (which is a daylight saving time; Brazil is in the southern hemisphere, so it enters DST in October and exits in February). But before that time comes, in early 2019, Brazil decides to stop observing DST, so the real offset becomes `-03:00`. Should the reminder now still fire at noon (keeping the local time), or should it fire at 11:00 AM (keeping the exact time)?
+
+When constructing a `ZonedDateTime` with {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}} or when updating it using the {{jsxref("Temporal/ZonedDateTime/with", "with()")}} method, the behavior for offset ambiguity is configurable via the `offset` option:
+
+- `use`
+ - : Use the offset to calculate the exact time. This option "uses" the offset when determining the instant represented by the string, which will be the same instant originally calculated when we stored the time, even if the offset at that instant has changed. The time zone identifier is still used to then infer the (possibly updated) offset and use that offset to convert the exact time to local time.
+- `ignore`
+ - : Use the time zone identifier to re-calculate the offset, ignoring the offset that's specified in the string. This option keeps the same local time as originally calculated when we stored the time, but may correspond to a different instant. Note that this option may cause the same local time interpretation ambiguity as demonstrated above, which is resolved using the `disambiguation` option.
+- `reject`
+ - : Throw a `RangeError` whenever there is a conflict between the offset and the time zone identifier. This is the default for {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}}.
+- `prefer`
+ - : Use the offset if it's valid, otherwise calculate the offset from the time zone identifier. This is the default for {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}} (see the method for more details). This is different from `ignore` because in the case of local time ambiguity, the offset is used to resolve it rather than the `disambiguation` option.
+
+Note that the `Z` offset does not mean `+00:00`; it is always considered valid regardless of the time zone. The time is interpreted as a UTC time, and the time zone identifier is then used to convert it to local time. In other words, `Z` enforces the same behavior as the `ignore` option and its results can never be ambiguous.
+
+> [!NOTE]
+> Although {{jsxref("Temporal/Instant/from", "Temporal.Instant.from()")}} also takes an [RFC 9557](#rfc_9557_format) string in the same form, there is no ambiguity because it always ignores the time zone identifier and reads the offset only.
+
+## Constructor
+
+- {{jsxref("Temporal/ZonedDateTime/ZonedDateTime", "Temporal.ZonedDateTime()")}}
+ - : Creates a new `Temporal.ZonedDateTime` object by directly supplying the underlying data.
+
+## Static methods
+
+- {{jsxref("Temporal/ZonedDateTime/compare", "Temporal.ZonedDateTime.compare()")}}
+ - : Returns a number (-1, 0, or 1) indicating whether the first date-time comes before, is the same as, or comes after the second date-time. Equivalent to comparing the {{jsxref("Temporal/ZonedDateTime/epochNanoseconds", "epochNanoseconds")}} of the two datetimes.
+- {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}}
+ - : Creates a new `Temporal.ZonedDateTime` object from another `Temporal.ZonedDateTime` object, an object with date, time, and time zone properties, or an [RFC 9557](#rfc_9557_format) string.
+
+## Instance properties
+
+These properties are defined on `Temporal.ZonedDateTime.prototype` and shared by all `Temporal.ZonedDateTime` instances.
+
+- {{jsxref("Temporal/ZonedDateTime/calendarId", "Temporal.ZonedDateTime.prototype.calendarId")}}
+ - : Returns a string representing the [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars) used to interpret the internal ISO 8601 date.
+- {{jsxref("Object/constructor", "Temporal.ZonedDateTime.prototype.constructor")}}
+ - : The constructor function that created the instance object. For `Temporal.ZonedDateTime` instances, the initial value is the {{jsxref("Temporal/ZonedDateTime/ZonedDateTime", "Temporal.ZonedDateTime()")}} constructor.
+- {{jsxref("Temporal/ZonedDateTime/day", "Temporal.ZonedDateTime.prototype.day")}}
+ - : Returns a positive integer representing the 1-based day index in the month of this date, which is the same day number you would see on a calendar. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Generally starts at 1 and is continuous, but not always.
+- {{jsxref("Temporal/ZonedDateTime/dayOfWeek", "Temporal.ZonedDateTime.prototype.dayOfWeek")}}
+ - : Returns a positive integer representing the 1-based day index in the week of this date. Days in a week are numbered sequentially from `1` to {{jsxref("Temporal/ZonedDateTime/daysInWeek", "daysInWeek")}}, with each number mapping to its name. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. 1 usually represents Monday in the calendar, even when locales using the calendar may consider a different day as the first day of the week (see {{jsxref("Intl/Locale/getWeekInfo", "Intl.Locale.prototype.getWeekInfo()")}}).
+- {{jsxref("Temporal/ZonedDateTime/dayOfYear", "Temporal.ZonedDateTime.prototype.dayOfYear")}}
+ - : Returns a positive integer representing the 1-based day index in the year of this date. The first day of this year is `1`, and the last day is the {{jsxref("Temporal/ZonedDateTime/daysInYear", "daysInYear")}}. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+- {{jsxref("Temporal/ZonedDateTime/daysInMonth", "Temporal.ZonedDateTime.prototype.daysInMonth")}}
+ - : Returns a positive integer representing the number of days in the month of this date. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+- {{jsxref("Temporal/ZonedDateTime/daysInWeek", "Temporal.ZonedDateTime.prototype.daysInWeek")}}
+ - : Returns a positive integer representing the number of days in the week of this date. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. For the ISO 8601 calendar, this is always 7, but in other calendar systems it may differ from week to week.
+- {{jsxref("Temporal/ZonedDateTime/daysInYear", "Temporal.ZonedDateTime.prototype.daysInYear")}}
+ - : Returns a positive integer representing the number of days in the year of this date. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. For the ISO 8601 calendar, this is 365, or 366 in a leap year.
+- {{jsxref("Temporal/ZonedDateTime/epochMilliseconds", "Temporal.ZonedDateTime.prototype.epochMilliseconds")}}
+ - : Returns an integer representing the number of milliseconds elapsed since the Unix epoch (midnight at the beginning of January 1, 1970, UTC) to this instant. Equivalent to dividing `epochNanoseconds` by `1e6` and flooring the result.
+- {{jsxref("Temporal/ZonedDateTime/epochNanoseconds", "Temporal.ZonedDateTime.prototype.epochNanoseconds")}}
+ - : Returns a {{jsxref("BigInt")}} representing the number of nanoseconds elapsed since the Unix epoch (midnight at the beginning of January 1, 1970, UTC) to this instant.
+- {{jsxref("Temporal/ZonedDateTime/era", "Temporal.ZonedDateTime.prototype.era")}}
+ - : Returns a calendar-specific lowercase string representing the era of this date, or `undefined` if the calendar does not use eras (e.g. ISO 8601). `era` and `eraYear` together uniquely identify a year in a calendar, in the same way that `year` does. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. For Gregorian, it is either `"gregory"` or `"gregory-inverse"`.
+- {{jsxref("Temporal/ZonedDateTime/eraYear", "Temporal.ZonedDateTime.prototype.eraYear")}}
+ - : Returns a non-negative integer representing the year of this date within the era, or `undefined` if the calendar does not use eras (e.g. ISO 8601). The year index usually starts from 1 (more common) or 0, and years in an era can decrease with time (e.g. Gregorian BCE). `era` and `eraYear` together uniquely identify a year in a calendar, in the same way that `year` does. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+- {{jsxref("Temporal/ZonedDateTime/hour", "Temporal.ZonedDateTime.prototype.hour")}}
+ - : Returns a integer from 0 to 23 representing the hour component of this time.
+- {{jsxref("Temporal/ZonedDateTime/hoursInDay", "Temporal.ZonedDateTime.prototype.hoursInDay")}}
+ - : Returns a positive integer representing the number of hours in the day of this date in the time zone. It may be more or less than 24 in the case of offset changes such as daylight saving time.
+- {{jsxref("Temporal/ZonedDateTime/inLeapYear", "Temporal.ZonedDateTime.prototype.inLeapYear")}}
+ - : Returns a boolean indicating whether this date is in a leap year. A leap year is a year that has more days (due to a leap day or leap month) than a common year. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+- {{jsxref("Temporal/ZonedDateTime/microsecond", "Temporal.ZonedDateTime.prototype.microsecond")}}
+ - : Returns a integer from 0 to 999 representing the microsecond (10-6 second) component of this time.
+- {{jsxref("Temporal/ZonedDateTime/millisecond", "Temporal.ZonedDateTime.prototype.millisecond")}}
+ - : Returns a integer from 0 to 999 representing the millisecond (10-3 second) component of this time.
+- {{jsxref("Temporal/ZonedDateTime/minute", "Temporal.ZonedDateTime.prototype.minute")}}
+ - : Returns a integer from 0 to 59 representing the minute component of this time.
+- {{jsxref("Temporal/ZonedDateTime/month", "Temporal.ZonedDateTime.prototype.month")}}
+ - : Returns a positive integer representing the 1-based month index in the year of this date. The first month of this year is `1`, and the last month is the {{jsxref("Temporal/ZonedDateTime/monthsInYear", "monthsInYear")}}. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Note that unlike {{jsxref("Date.prototype.getMonth()")}}, the index is 1-based. If the calendar has leap months, then the month with the same {{jsxref("Temporal/ZonedDateTime/monthCode", "monthCode")}} may have different `month` indexes for different years.
+- {{jsxref("Temporal/ZonedDateTime/monthCode", "Temporal.ZonedDateTime.prototype.monthCode")}}
+ - : Returns a calendar-specific string representing the month of this date. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Usually it is `M` plus a two-digit month number. For leap months, it is the previous month's code followed by `L`. If the leap month is the first month of the year, the code is `M00L`.
+- {{jsxref("Temporal/ZonedDateTime/monthsInYear", "Temporal.ZonedDateTime.prototype.monthsInYear")}}
+ - : Returns a positive integer representing the number of months in the year of this date. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. For the ISO 8601 calendar, this is always 12, but in other calendar systems it may differ.
+- {{jsxref("Temporal/ZonedDateTime/nanosecond", "Temporal.ZonedDateTime.prototype.nanosecond")}}
+ - : Returns a integer from 0 to 999 representing the nanosecond (10-9 second) component of this time.
+- {{jsxref("Temporal/ZonedDateTime/offset", "Temporal.ZonedDateTime.prototype.offset")}}
+ - : Returns a string representing the [offset](#time_zones_and_offsets) used to interpret the internal instant, in the form `±HH:mm` (or `±HH:mm:ss.sssssssss` with as much subminute precision as necessary).
+- {{jsxref("Temporal/ZonedDateTime/offsetNanoseconds", "Temporal.ZonedDateTime.prototype.offsetNanoseconds")}}
+ - : Returns an integer representing the [offset](#time_zones_and_offsets) used to interpret the internal instant, as a number of nanoseconds (positive or negative).
+- {{jsxref("Temporal/ZonedDateTime/second", "Temporal.ZonedDateTime.prototype.second")}}
+ - : Returns a integer from 0 to 59 representing the second component of this time.
+- {{jsxref("Temporal/ZonedDateTime/timeZoneId", "Temporal.ZonedDateTime.prototype.timeZoneId")}}
+ - : Returns a string representing the [time zone identifier](#time_zones_and_offsets) used to interpret the internal instant. It uses the same string used when constructing the `Temporal.ZonedDateTime` object, which is either an IANA time zone name or a fixed offset.
+- {{jsxref("Temporal/ZonedDateTime/weekOfYear", "Temporal.ZonedDateTime.prototype.weekOfYear")}}
+ - : Returns a positive integer representing the 1-based week index in the {{jsxref("Temporal/ZonedDateTime/yearOfWeek", "yearOfWeek")}} of this date, or `undefined` if the calendar does not have a well-defined week system. The first week of the year is `1`. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Note that for ISO 8601, the first and last few days of the year may be attributed to the last week of the previous year or the first week of the next year.
+- {{jsxref("Temporal/ZonedDateTime/year", "Temporal.ZonedDateTime.prototype.year")}}
+ - : Returns an integer representing the number of years of this date relative to the start of a calendar-specific epoch year. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Usually year 1 is either the first year of the latest era or the ISO 8601 year `0001`. If the epoch is in the middle of the year, that year will have the same value before and after the start date of the era.
+- {{jsxref("Temporal/ZonedDateTime/yearOfWeek", "Temporal.ZonedDateTime.prototype.yearOfWeek")}}
+ - : Returns an integer representing the year to be paired with the {{jsxref("Temporal/ZonedDateTime/weekOfYear", "weekOfYear")}} of this date, or `undefined` if the calendar does not have a well-defined week system. [Calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent. Usually this is the year of the date, but for ISO 8601, the first and last few days of the year may be attributed to the last week of the previous year or the first week of the next year, causing the `yearOfWeek` to differ by 1.
+- `Temporal.ZonedDateTime.prototype[Symbol.toStringTag]`
+ - : The initial value of the [`[Symbol.toStringTag]`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) property is the string `"Temporal.ZonedDateTime"`. This property is used in {{jsxref("Object.prototype.toString()")}}.
+
+## Instance methods
+
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+ - : Returns a new `Temporal.ZonedDateTime` object representing this date-time moved forward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}).
+- {{jsxref("Temporal/ZonedDateTime/equals", "Temporal.ZonedDateTime.prototype.equals()")}}
+ - : Returns `true` if this date-time is equivalent in value to another date-time (in a form convertible by {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}}), and `false` otherwise. They are compared both by their instant values, time zones, and their calendars, so two date-times from different calendars or time zones may be considered equal by {{jsxref("Temporal/ZonedDateTime/compare", "Temporal.ZonedDateTime.compare()")}} but not by `equals()`.
+- {{jsxref("Temporal/ZonedDateTime/getTimeZoneTransition", "Temporal.ZonedDateTime.prototype.getTimeZoneTransition()")}}
+ - : Returns a `Temporal.ZonedDateTime` object representing the first instant after or before this instant at which the time zone's UTC offset changes, or `null` if there is no such transition. This is useful for finding out the offset rules of a time zone, such as its daylight saving time pattern.
+- {{jsxref("Temporal/ZonedDateTime/round", "Temporal.ZonedDateTime.prototype.round()")}}
+ - : Returns a new `Temporal.ZonedDateTime` object representing this date-time rounded to the given unit.
+- {{jsxref("Temporal/ZonedDateTime/since", "Temporal.ZonedDateTime.prototype.since()")}}
+ - : Returns a new {{jsxref("Temporal.Duration")}} object representing the duration from another date-time (in a form convertible by {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}}) to this date-time. The duration is positive if the other date-time is before this date-time, and negative if after.
+- {{jsxref("Temporal/ZonedDateTime/startOfDay", "Temporal.ZonedDateTime.prototype.startOfDay()")}}
+ - : Returns a `Temporal.ZonedDateTime` object representing the first instant of this date in the time zone. It usually has a time of `00:00:00`, but may be different if the midnight doesn't exist due to offset changes, in which case the first time that exists is returned.
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+ - : Returns a new `Temporal.ZonedDateTime` object representing this date-time moved backward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}).
+- {{jsxref("Temporal/ZonedDateTime/toInstant", "Temporal.ZonedDateTime.prototype.toInstant()")}}
+ - : Returns a new {{jsxref("Temporal.Instant")}} object representing the instant of this date-time.
+- {{jsxref("Temporal/ZonedDateTime/toJSON", "Temporal.ZonedDateTime.prototype.toJSON()")}}
+ - : Returns a string representing this date-time in the same [RFC 9557 format](#rfc_9557_format) as calling {{jsxref("Temporal/ZonedDateTime/toString", "toString()")}}. Intended to be implicitly called by {{jsxref("JSON.stringify()")}}.
+- {{jsxref("Temporal/ZonedDateTime/toLocaleString", "Temporal.ZonedDateTime.prototype.toLocaleString()")}}
+ - : Returns a string with a language-sensitive representation of this date-time.
+- {{jsxref("Temporal/ZonedDateTime/toPlainDate", "Temporal.ZonedDateTime.prototype.toPlainDate()")}}
+ - : Returns a new {{jsxref("Temporal.PlainDate")}} object representing the date portion of this date-time.
+- {{jsxref("Temporal/ZonedDateTime/toPlainDateTime", "Temporal.ZonedDateTime.prototype.toPlainDateTime()")}}
+ - : Returns a new {{jsxref("Temporal.PlainDateTime")}} object representing the date and time portions of this date-time. Only the time zone information is removed.
+- {{jsxref("Temporal/ZonedDateTime/toPlainTime", "Temporal.ZonedDateTime.prototype.toPlainTime()")}}
+ - : Returns a new {{jsxref("Temporal.PlainTime")}} object representing the time portion of this date-time.
+- {{jsxref("Temporal/ZonedDateTime/toString", "Temporal.ZonedDateTime.prototype.toString()")}}
+ - : Returns a string representing this date-time in the [RFC 9557 format](#rfc_9557_format).
+- {{jsxref("Temporal/ZonedDateTime/until", "Temporal.ZonedDateTime.prototype.until()")}}
+ - : Returns a new {{jsxref("Temporal.Duration")}} object representing the duration from this date-time to another date-time (in a form convertible by {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}}). The duration is positive if the other date-time is after this date-time, and negative if before.
+- {{jsxref("Temporal/ZonedDateTime/valueOf", "Temporal.ZonedDateTime.prototype.valueOf()")}}
+ - : Throws a {{jsxref("TypeError")}}, which prevents `Temporal.ZonedDateTime` instances from being [implicitly converted to primitives](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) when used in arithmetic or comparison operations.
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+ - : Returns a new `Temporal.ZonedDateTime` object representing this date-time with some fields replaced by new values.
+- {{jsxref("Temporal/ZonedDateTime/withCalendar", "Temporal.ZonedDateTime.prototype.withCalendar()")}}
+ - : Returns a new `Temporal.ZonedDateTime` object representing this date-time interpreted in the new calendar system.
+- {{jsxref("Temporal/ZonedDateTime/withPlainTime", "Temporal.ZonedDateTime.prototype.withPlainTime()")}}
+ - : Returns a new `Temporal.ZonedDateTime` object representing this date-time with the time part entirely replaced by the new time (in a form convertible by {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}})
+- {{jsxref("Temporal/ZonedDateTime/withTimeZone", "Temporal.ZonedDateTime.prototype.withTimeZone()")}}
+ - : Returns a new `Temporal.ZonedDateTime` object representing the same instant as this date-time but in the new time zone.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal.Instant")}}
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal.PlainTime")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/inleapyear/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/inleapyear/index.md
new file mode 100644
index 000000000000000..177d9ee31661bfb
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/inleapyear/index.md
@@ -0,0 +1,44 @@
+---
+title: Temporal.ZonedDateTime.prototype.inLeapYear
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/inLeapYear
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.inLeapYear
+---
+
+{{JSRef}}
+
+The **`inLeapYear`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a boolean indicating whether this date is in a leap year. A leap year is a year that has more days (due to a leap day or leap month) than a common year. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `inLeapYear` is `undefined`. You cannot change this property directly.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/inLeapYear", "Temporal.PlainDate.prototype.inLeapYear")}}.
+
+## Examples
+
+### Using inLeapYear
+
+```js
+const dt = Temporal.ZonedDateTime.from("2021-07-01[America/New_York]");
+console.log(dt.inLeapYear); // false
+console.log(dt.daysInYear); // 365
+console.log(dt.monthsInYear); // 12
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/year", "Temporal.ZonedDateTime.prototype.year")}}
+- {{jsxref("Temporal/ZonedDateTime/daysInYear", "Temporal.ZonedDateTime.prototype.daysInYear")}}
+- {{jsxref("Temporal/ZonedDateTime/monthsInYear", "Temporal.ZonedDateTime.prototype.monthsInYear")}}
+- {{jsxref("Temporal/PlainDate/inLeapYear", "Temporal.PlainDate.prototype.inLeapYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/microsecond/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/microsecond/index.md
new file mode 100644
index 000000000000000..9756fb79813bcbe
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/microsecond/index.md
@@ -0,0 +1,44 @@
+---
+title: Temporal.ZonedDateTime.prototype.microsecond
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/microsecond
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.microsecond
+---
+
+{{JSRef}}
+
+The **`microsecond`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a integer from 0 to 999 representing the microsecond (10-6 second) component of this time.
+
+The set accessor of `microsecond` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/ZonedDateTime/with", "with()")}} method to create a new `Temporal.ZonedDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainTime/microsecond", "Temporal.PlainTime.prototype.microsecond")}}.
+
+## Examples
+
+### Using microsecond
+
+```js
+const dt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:34:56.123456789-04:00[America/New_York]",
+);
+console.log(dt.microsecond); // 456
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/second", "Temporal.ZonedDateTime.prototype.second")}}
+- {{jsxref("Temporal/ZonedDateTime/millisecond", "Temporal.ZonedDateTime.prototype.millisecond")}}
+- {{jsxref("Temporal/ZonedDateTime/nanosecond", "Temporal.ZonedDateTime.prototype.nanosecond")}}
+- {{jsxref("Temporal/PlainTime/microsecond", "Temporal.PlainTime.prototype.microsecond")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/millisecond/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/millisecond/index.md
new file mode 100644
index 000000000000000..edefbc312ba6bf7
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/millisecond/index.md
@@ -0,0 +1,44 @@
+---
+title: Temporal.ZonedDateTime.prototype.millisecond
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/millisecond
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.millisecond
+---
+
+{{JSRef}}
+
+The **`millisecond`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a integer from 0 to 999 representing the millisecond (10-3 second) component of this time.
+
+The set accessor of `millisecond` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/ZonedDateTime/with", "with()")}} method to create a new `Temporal.ZonedDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainTime/millisecond", "Temporal.PlainTime.prototype.millisecond")}}.
+
+## Examples
+
+### Using millisecond
+
+```js
+const dt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:34:56.123456789-04:00[America/New_York]",
+);
+console.log(dt.millisecond); // 123
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/second", "Temporal.ZonedDateTime.prototype.second")}}
+- {{jsxref("Temporal/ZonedDateTime/microsecond", "Temporal.ZonedDateTime.prototype.microsecond")}}
+- {{jsxref("Temporal/ZonedDateTime/nanosecond", "Temporal.ZonedDateTime.prototype.nanosecond")}}
+- {{jsxref("Temporal/PlainTime/millisecond", "Temporal.PlainTime.prototype.millisecond")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/minute/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/minute/index.md
new file mode 100644
index 000000000000000..5a2cc8f9b917a3a
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/minute/index.md
@@ -0,0 +1,71 @@
+---
+title: Temporal.ZonedDateTime.prototype.minute
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/minute
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.minute
+---
+
+{{JSRef}}
+
+The **`minute`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a integer from 0 to 59 representing the minute component of this time.
+
+The set accessor of `minute` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/ZonedDateTime/with", "with()")}} method to create a new `Temporal.ZonedDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainTime/minute", "Temporal.PlainTime.prototype.minute")}}.
+
+For `ZonedDateTime`, `minute` can be non-continuous due to offset changes. While much rarer than `hour` changes (because daylight saving time shifts are usually by whole hours), it can still happen.
+
+## Examples
+
+### Using minute
+
+```js
+const dt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:34:56.123456789-04:00[America/New_York]",
+);
+console.log(dt.minute); // 34
+```
+
+### Non-continuous minute
+
+Typically, `minute` always goes from 0 to 59 and then back to 0, even when passing through a daylight saving time transition. There's one particular case where DST has a 30-minute offset: Lord Howe Island in Australia, which shifts between +10:30 and +11:00. In this case, the minute can be non-continuous.
+
+```js
+const dt = Temporal.ZonedDateTime.from(
+ "2021-10-03T01:59:00+10:30[Australia/Lord_Howe]",
+);
+console.log(dt.minute); // 59
+const dt2 = dt.add({ minutes: 1 });
+console.log(dt2.minute); // 30
+console.log(dt2.toString()); // 2021-10-03T02:30:00+11:00[Australia/Lord_Howe]
+```
+
+There's a second peculiar case where the minute can be non-continuous: the standardization of hourly time zones. In the early 20th century, most countries were using their own time zones which were often not a whole hour offset from UTC. For example, Paris used to have an offset of UTC+0:09:21, which was changed to UTC+0 on March 11, 1911.
+
+```js
+const dt = Temporal.ZonedDateTime.from(
+ "1911-03-10T23:59:00+00:09:21[Europe/Paris]",
+);
+console.log(dt.minute); // 59
+const dt2 = dt.add({ minutes: 1 });
+console.log(dt2.minute); // 50
+console.log(dt2.toString()); // 1911-03-10T23:50:39+00:00[Europe/Paris]
+```
+
+For this reason, you should always prefer {{jsxref("Temporal/ZonedDateTime/add", "add()")}} and {{jsxref("Temporal/ZonedDateTime/subtract", "subtract()")}} to manipulate dates and times, rather than directly changing the `minute` property.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/PlainTime/minute", "Temporal.ZonedDateTime.prototype.minute")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/month/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/month/index.md
new file mode 100644
index 000000000000000..038889898455ca7
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/month/index.md
@@ -0,0 +1,45 @@
+---
+title: Temporal.ZonedDateTime.prototype.month
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/month
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.month
+---
+
+{{JSRef}}
+
+The **`month`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a positive integer representing the 1-based month index in the year of this date. The first month of this year is `1`, and the last month is the {{jsxref("Temporal/ZonedDateTime/monthsInYear", "monthsInYear")}}. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `month` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/ZonedDateTime/with", "with()")}} method to create a new `Temporal.ZonedDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/month", "Temporal.PlainDate.prototype.month")}}.
+
+## Examples
+
+### Using month
+
+```js
+const dt = Temporal.ZonedDateTime.from("2021-07-01[America/New_York]"); // ISO 8601 calendar
+console.log(dt.monthCode); // "M07"
+console.log(dt.month); // 7
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/year", "Temporal.ZonedDateTime.prototype.year")}}
+- {{jsxref("Temporal/ZonedDateTime/day", "Temporal.ZonedDateTime.prototype.day")}}
+- {{jsxref("Temporal/ZonedDateTime/monthCode", "Temporal.ZonedDateTime.prototype.monthCode")}}
+- {{jsxref("Temporal/ZonedDateTime/daysInMonth", "Temporal.ZonedDateTime.prototype.daysInMonth")}}
+- {{jsxref("Temporal/ZonedDateTime/monthsInYear", "Temporal.ZonedDateTime.prototype.monthsInYear")}}
+- {{jsxref("Temporal/PlainDate/month", "Temporal.PlainDate.prototype.month")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/monthcode/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/monthcode/index.md
new file mode 100644
index 000000000000000..9c9418056f9722b
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/monthcode/index.md
@@ -0,0 +1,46 @@
+---
+title: Temporal.ZonedDateTime.prototype.monthCode
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/monthCode
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.monthCode
+---
+
+{{JSRef}}
+
+The **`monthCode`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a calendar-specific string representing the month of this date. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+Usually it is `M` plus a two-digit month number. For leap months, it is the previous month's code followed by `L` (even if it's conceptually a derivative of the following month; for example, in the Hebrew calendar, Adar I has code `M05L` but Adar II has code `M06`). If the leap month is the first month of the year, the code is `M00L`.
+
+The set accessor of `monthCode` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/ZonedDateTime/with", "with()")}} method to create a new `Temporal.ZonedDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/monthCode", "Temporal.PlainDate.prototype.monthCode")}}.
+
+## Examples
+
+### Using monthCode
+
+```js
+const date = Temporal.ZonedDateTime.from("2021-07-01[America/New_York]"); // ISO 8601 calendar
+console.log(date.monthCode); // "M07"
+console.log(date.month); // 7
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/year", "Temporal.ZonedDateTime.prototype.year")}}
+- {{jsxref("Temporal/ZonedDateTime/month", "Temporal.ZonedDateTime.prototype.month")}}
+- {{jsxref("Temporal/ZonedDateTime/daysInMonth", "Temporal.ZonedDateTime.prototype.daysInMonth")}}
+- {{jsxref("Temporal/ZonedDateTime/monthsInYear", "Temporal.ZonedDateTime.prototype.monthsInYear")}}
+- {{jsxref("Temporal/PlainDate/monthCode", "Temporal.PlainDate.prototype.monthCode")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/monthsinyear/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/monthsinyear/index.md
new file mode 100644
index 000000000000000..81562e86852fce0
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/monthsinyear/index.md
@@ -0,0 +1,43 @@
+---
+title: Temporal.ZonedDateTime.prototype.monthsInYear
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/monthsInYear
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.monthsInYear
+---
+
+{{JSRef}}
+
+The **`monthsInYear`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a positive integer representing the number of months in the year of this date. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `monthsInYear` is `undefined`. You cannot change this property directly.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/monthsInYear", "Temporal.PlainDate.prototype.monthsInYear")}}.
+
+## Examples
+
+### Using monthsInYear
+
+```js
+const dt = Temporal.ZonedDateTime.from("2021-07-01[America/New_York]");
+console.log(dt.monthsInYear); // 12
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/year", "Temporal.ZonedDateTime.prototype.year")}}
+- {{jsxref("Temporal/ZonedDateTime/month", "Temporal.ZonedDateTime.prototype.month")}}
+- {{jsxref("Temporal/ZonedDateTime/monthCode", "Temporal.ZonedDateTime.prototype.monthCode")}}
+- {{jsxref("Temporal/ZonedDateTime/daysInMonth", "Temporal.ZonedDateTime.prototype.daysInMonth")}}
+- {{jsxref("Temporal/PlainDate/monthsInYear", "Temporal.PlainDate.prototype.monthsInYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/nanosecond/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/nanosecond/index.md
new file mode 100644
index 000000000000000..b0f9225e70d4f9b
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/nanosecond/index.md
@@ -0,0 +1,44 @@
+---
+title: Temporal.ZonedDateTime.prototype.nanosecond
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/nanosecond
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.nanosecond
+---
+
+{{JSRef}}
+
+The **`nanosecond`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a integer from 0 to 999 representing the nanosecond (10-9 second) component of this time.
+
+The set accessor of `nanosecond` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/ZonedDateTime/with", "with()")}} method to create a new `Temporal.ZonedDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainTime/nanosecond", "Temporal.PlainTime.prototype.nanosecond")}}.
+
+## Examples
+
+### Using nanosecond
+
+```js
+const dt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:34:56.123456789-04:00[America/New_York]",
+);
+console.log(dt.nanosecond); // 789
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/second", "Temporal.ZonedDateTime.prototype.second")}}
+- {{jsxref("Temporal/ZonedDateTime/millisecond", "Temporal.ZonedDateTime.prototype.millisecond")}}
+- {{jsxref("Temporal/ZonedDateTime/microsecond", "Temporal.ZonedDateTime.prototype.microsecond")}}
+- {{jsxref("Temporal/PlainTime/nanosecond", "Temporal.PlainTime.prototype.nanosecond")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/offset/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/offset/index.md
new file mode 100644
index 000000000000000..dda66bfdaab211a
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/offset/index.md
@@ -0,0 +1,62 @@
+---
+title: Temporal.ZonedDateTime.prototype.offset
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/offset
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.offset
+---
+
+{{JSRef}}
+
+The **`offset`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a string representing the [offset](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets) used to interpret the internal instant, in the form `±HH:mm` (or `±HH:mm:ss.sssssssss` with as much subminute precision as necessary). This offset is guaranteed to be valid for the given instant and time zone at construction time.
+
+The set accessor of `offset` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/ZonedDateTime/with", "with()")}} method to create a new `Temporal.ZonedDateTime` object with the desired new value (usually also changing the date/time), or use the {{jsxref("Temporal/ZonedDateTime/withTimeZone", "withTimeZone()")}} method to create a new `Temporal.ZonedDateTime` object in another time zone.
+
+## Examples
+
+### Using offset
+
+```js
+const dt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:00:00-07:00[America/Los_Angeles]",
+);
+console.log(dt.offset); // "-07:00"
+
+const dt2 = Temporal.ZonedDateTime.from("2021-07-01T12:00:00-07[-07]");
+console.log(dt2.offset); // "-07:00"
+
+const dt3 = Temporal.ZonedDateTime.from(
+ "1900-01-01T00:00:00+00:09:21[Europe/Paris]",
+);
+console.log(dt3.offset); // "+00:09:21"
+
+const dt4 = Temporal.ZonedDateTime.from("2021-07-01T12:00:00Z[Asia/Shanghai]");
+console.log(dt4.offset); // "+08:00"
+```
+
+### Changing offset
+
+If the local time happens to have two valid offsets, such as within a DST transition, you can change the offset without changing anything else:
+
+```js
+const zdt = Temporal.ZonedDateTime.from(
+ "2024-11-03T01:05:00-04:00[America/New_York]",
+);
+const newZDT = zdt.with({ offset: "-05:00" });
+console.log(newZDT.toString()); // "2024-11-03T01:05:00-05:00[America/New_York]"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/withTimeZone", "Temporal.ZonedDateTime.prototype.withTimeZone()")}}
+- {{jsxref("Temporal/ZonedDateTime/timeZoneId", "Temporal.ZonedDateTime.prototype.timeZoneId")}}
+- {{jsxref("Temporal/ZonedDateTime/offsetNanoseconds", "Temporal.ZonedDateTime.prototype.offsetNanoseconds")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/offsetnanoseconds/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/offsetnanoseconds/index.md
new file mode 100644
index 000000000000000..ad4a4a849c8b44d
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/offsetnanoseconds/index.md
@@ -0,0 +1,69 @@
+---
+title: Temporal.ZonedDateTime.prototype.offsetNanoseconds
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/offsetNanoseconds
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.offsetNanoseconds
+---
+
+{{JSRef}}
+
+The **`offsetNanoseconds`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns an integer representing the [offset](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets) used to interpret the internal instant, as a number of nanoseconds (positive or negative). The value is a safe integer because it's less than a day, which is 8.64e15 nanoseconds.
+
+The set accessor of `offsetNanoseconds` is `undefined`. You cannot change this property directly. Change {{jsxref("Temporal/ZonedDateTime/offset", "offset")}} to change this property too.
+
+## Examples
+
+### Using offsetNanoseconds
+
+```js
+const dt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:00:00-07:00[America/Los_Angeles]",
+);
+console.log(dt.offsetNanoseconds); // -25200000000000
+
+const dt2 = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:00:00+08:00[Asia/Shanghai]",
+);
+console.log(dt2.offsetNanoseconds); // 28800000000000
+
+const dt3 = Temporal.ZonedDateTime.from(
+ "1900-01-01T00:00:00+00:09:21[Europe/Paris]",
+);
+console.log(dt3.offsetNanoseconds); // 561000000000
+```
+
+Here's one way to get a `ZonedDateTime` representing the same wall-clock time in UTC:
+
+```js
+const dt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:00:00-07:00[America/Los_Angeles]",
+);
+const dtInUTC = dt.add({ nanoseconds: dt.offsetNanoseconds });
+console.log(dtInUTC.withTimeZone("UTC").toString()); // "2021-07-01T12:00:00+00:00[UTC]"
+```
+
+Here's a better way to get the same result:
+
+```js
+const dt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:00:00-07:00[America/Los_Angeles]",
+);
+const dtInUTC = dt.toPlainDateTime().toZonedDateTime("UTC");
+console.log(dtInUTC.toString()); // "2021-07-01T12:00:00+00:00[UTC]"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/withTimeZone", "Temporal.ZonedDateTime.prototype.withTimeZone()")}}
+- {{jsxref("Temporal/ZonedDateTime/offset", "Temporal.ZonedDateTime.prototype.offset")}}
+- {{jsxref("Temporal/ZonedDateTime/timeZoneId", "Temporal.ZonedDateTime.prototype.timeZoneId")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/round/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/round/index.md
new file mode 100644
index 000000000000000..325f2bda050b759
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/round/index.md
@@ -0,0 +1,89 @@
+---
+title: Temporal.ZonedDateTime.prototype.round()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/round
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.round
+---
+
+{{JSRef}}
+
+The **`round()`** method of {{jsxref("Temporal.ZonedDateTime")}} instances returns a new `Temporal.ZonedDateTime` object representing this date-time rounded to the given unit.
+
+## Syntax
+
+```js-nolint
+round(smallestUnit)
+round(options)
+```
+
+### Parameters
+
+- `smallestUnit`
+ - : A string representing the [`smallestUnit`](#smallestunit_2) option. This is a convenience overload, so `round(smallestUnit)` is equivalent to `round({ smallestUnit })`, where `smallestUnit` is a string.
+- `options`
+ - : An object containing some or all of the following properties (in the order they are retrieved and validated):
+ - `roundingIncrement` {{optional_inline}}
+ - : A number (truncated to an integer) representing the rounding increment in the given `smallestUnit`. Defaults to `1`. For all values of `smallestUnit` except `"day"`, the increment must be a divisor of the maximum value of the unit; for example, if the unit is hours, the increment must be a divisor of 24 and must not be 24 itself, which means it can be 1, 2, 3, 4, 6, 8, or 12. For `"day"`, the increment must be 1.
+ - `roundingMode` {{optional_inline}}
+ - : A string specifying how to round off the fractional part of `smallestUnit`. See [`Intl.NumberFormat()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#roundingmode). Defaults to `"halfExpand"`.
+ - `smallestUnit`
+ - : A string representing the smallest unit to include in the output. The value must be one of the following: `"day"`, `"hour"`, `"minute"`, `"second"`, `"millisecond"`, `"microsecond"`, `"nanosecond"`, or their plural forms. For units larger than `"nanosecond"`, fractional parts of the `smallestUnit` will be rounded according to the `roundingIncrement` and `roundingMode` settings.
+
+### Return value
+
+A new {{jsxref("Temporal.ZonedDateTime")}} object representing this date-time rounded to the given unit, where all units smaller than `smallestUnit` are zeroed out.
+
+If `smallestUnit` is `"day"`, the returned date-time will be the [start of day](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/startOfDay) of this date or the next day, depending on the `roundingMode` and the distance to these two instants. Otherwise, the rounding is first performed on its `PlainDateTime` (same as {{jsxref("Temporal/PlainDateTime/round", "Temporal.PlainDateTime.prototype.round()")}}), and then re-interpreted in the same time zone, with `disambiguation: "compatible", offset: "prefer"`. See [ambiguity and gaps from local time to UTC time](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#ambiguity_and_gaps_from_local_time_to_utc_time) and [offset ambiguity](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#offset_ambiguity).
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+
+## Examples
+
+### Rounding off small units
+
+```js
+const zdt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:34:56.123456789[America/New_York]",
+);
+const nearestMillisecond = zdt.round("millisecond");
+console.log(nearestMillisecond.toString()); // 2021-07-01T12:34:56.123-04:00[America/New_York]
+
+const nearestHalfHour = zdt.round({
+ smallestUnit: "minute",
+ roundingIncrement: 30,
+});
+console.log(nearestHalfHour.toString()); // 2021-07-01T12:30:00-04:00[America/New_York]
+
+const nextDay = zdt.round({ smallestUnit: "day", roundingMode: "ceil" });
+console.log(nextDay.toString()); // 2021-07-02T00:00:00-04:00[America/New_York]
+```
+
+### Ambiguity after rounding
+
+It's possible that the rounded date-time is ambiguous in the given time zone. The ambiguity is always resolved using `disambiguation: "compatible", offset: "prefer"`. Here's a quick example:
+
+```js
+const zdt = Temporal.ZonedDateTime.from(
+ "2024-03-10T01:00:00-05:00[America/New_York]",
+);
+const rounded = zdt.round({ smallestUnit: "hour", roundingIncrement: 2 });
+// The result is supposed to be 2024-03-10T02:00:00-05:00[America/New_York],
+// but this time does not exist. `disambiguation: "compatible"` tells us to move
+// forward by 1 hour.
+console.log(rounded.toString()); // 2024-03-10T03:00:00-04:00[America/New_York]
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/second/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/second/index.md
new file mode 100644
index 000000000000000..9a202421e3b8a30
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/second/index.md
@@ -0,0 +1,62 @@
+---
+title: Temporal.ZonedDateTime.prototype.second
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/second
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.second
+---
+
+{{JSRef}}
+
+The **`second`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a integer from 0 to 59 representing the second component of this time.
+
+The set accessor of `second` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/ZonedDateTime/with", "with()")}} method to create a new `Temporal.ZonedDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainTime/second", "Temporal.PlainTime.prototype.second")}}.
+
+For `ZonedDateTime`, `second` can be non-continuous due to offset changes. While much rarer than `hour` or `minute` changes (because daylight saving time shifts are usually by whole hours), it can still happen.
+
+## Examples
+
+### Using second
+
+```js
+const dt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:34:56.123456789-04:00[America/New_York]",
+);
+console.log(dt.second); // 56
+```
+
+### Non-continuous second
+
+Typically, `second` always goes from 0 to 59 and then back to 0, even when passing through a daylight saving time transition. There's a peculiar case where the second can be non-continuous: the standardization of hourly time zones. In the early 20th century, most countries were using their own time zones which were often not a whole hour offset from UTC. For example, Paris used to have an offset of UTC+0:09:21, which was changed to UTC+0 on March 11, 1911.
+
+```js
+const dt = Temporal.ZonedDateTime.from(
+ "1911-03-10T23:59:59+00:09:21[Europe/Paris]",
+);
+console.log(dt.second); // 59
+const dt2 = dt.add({ seconds: 1 });
+console.log(dt2.second); // 39
+console.log(dt2.toString()); // 1911-03-10T23:50:39+00:00[Europe/Paris]
+```
+
+For this reason, you should always prefer {{jsxref("Temporal/ZonedDateTime/add", "add()")}} and {{jsxref("Temporal/ZonedDateTime/subtract", "subtract()")}} to manipulate dates and times, rather than directly changing the `second` property.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/millisecond", "Temporal.ZonedDateTime.prototype.millisecond")}}
+- {{jsxref("Temporal/ZonedDateTime/microsecond", "Temporal.ZonedDateTime.prototype.microsecond")}}
+- {{jsxref("Temporal/ZonedDateTime/nanosecond", "Temporal.ZonedDateTime.prototype.nanosecond")}}
+- {{jsxref("Temporal/PlainTime/second", "Temporal.PlainTime.prototype.second")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/since/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/since/index.md
new file mode 100644
index 000000000000000..64dd3e9556f01f8
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/since/index.md
@@ -0,0 +1,108 @@
+---
+title: Temporal.ZonedDateTime.prototype.since()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/since
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.since
+---
+
+{{JSRef}}
+
+The **`since()`** method of {{jsxref("Temporal.ZonedDateTime")}} instances returns a new {{jsxref("Temporal.Duration")}} object representing the duration from another date-time (in a form convertible by {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}}) to this date-time. The duration is positive if the other date-time is before this date-time, and negative if after.
+
+This method does `this - other`. To do `other - this`, use the {{jsxref("Temporal/ZonedDateTime/until", "until()")}} method.
+
+## Syntax
+
+```js-nolint
+since(other)
+since(other, options)
+```
+
+### Parameters
+
+- `other`
+ - : A string, an object, or a {{jsxref("Temporal.ZonedDateTime")}} instance representing a date-time to subtract from this date-time. It is converted to a `Temporal.ZonedDateTime` object using the same algorithm as {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}}. It must have the same calendar as `this`.
+- `options` {{optional_inline}}
+ - : An object containing the options for {{jsxref("Temporal/Duration/round", "Temporal.Duration.prototype.round()")}}, which includes `largestUnit`, `roundingIncrement`, `roundingMode`, and `smallestUnit`. `largestUnit` and `smallestUnit` accept all possible units. For `largestUnit`, the default value `"auto"` means `"hour"` or `smallestUnit`, whichever is greater. For `smallestUnit`, the default value is `"nanosecond"`. The current date is used as the `relativeTo` option. Note that using [units larger than `"hour"`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration#calendar_durations) may make the duration not portable to other calendars, dates, or time zones.
+
+### Return value
+
+A new {{jsxref("Temporal.Duration")}} object representing the duration _since_ `other` to this date-time. The duration is positive if `other` is before this date-time, and negative if after.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - `other` has a different calendar than `this`.
+ - Any of the options is invalid.
+ - `other` has a different time zone than `this`, and `largestUnit` is `"day"` or above.
+
+## Description
+
+The duration returned is a "hybrid" duration. This means that the duration's date portion represents full calendar days like {{jsxref("Temporal/PlainDateTime/since", "Temporal.PlainDateTime.prototype.since()")}} would return, while its time portion represents real-world elapsed time like {{jsxref("Temporal/Instant/since", "Temporal.Instant.prototype.since()")}} would return. This "hybrid duration" approach automatically adjusts for DST and matches widely-adopted industry standards like [RFC 5545 (iCalendar)](https://datatracker.ietf.org/doc/html/rfc5545). See below for examples.
+
+## Examples
+
+### Offset transitions
+
+When transitions happen, a day may not have exactly 24 hours.
+
+```js
+const start = Temporal.ZonedDateTime.from(
+ "2024-11-03T01:00:00-04:00[America/New_York]",
+);
+const end = Temporal.ZonedDateTime.from(
+ "2024-11-04T01:00:00-05:00[America/New_York]",
+);
+console.log(end.since(start).toString()); // PT25H
+console.log(end.since(start, { largestUnit: "day" }).toString()); // PT1D
+
+const start2 = Temporal.ZonedDateTime.from(
+ "2024-03-10T01:00:00-05:00[America/New_York]",
+);
+const end2 = Temporal.ZonedDateTime.from(
+ "2024-03-11T01:00:00-04:00[America/New_York]",
+);
+console.log(end2.since(start2).toString()); // PT23H
+console.log(end2.since(start2, { largestUnit: "day" }).toString()); // PT1D
+```
+
+For this reason, the returned duration is purely time-based with no date portion by default, so that it stays unambiguous.
+
+### Different time zones
+
+The time portion of the returned duration is purely based on instants and is not affected by time zones. However, if you want to include any date units like `day`, then the start and end must be in the same time zone.
+
+```js
+const start = Temporal.ZonedDateTime.from(
+ "2024-11-03T01:00:00-04:00[America/New_York]",
+);
+// Peru does not use DST so its offset remains -05:00 year-round
+const end = Temporal.ZonedDateTime.from(
+ "2024-11-04T01:00:00-05:00[America/Lima]",
+);
+
+end.since(start); // PT25H
+end.since(start, { largestUnit: "day" }); // RangeError: time zones "America/Lima" and "America/New_York" aren't compatible
+
+end.withTimeZone("America/New_York").since(start, { largestUnit: "day" }); // P1D
+end.since(start.withTimeZone("America/Lima"), { largestUnit: "day" }); // P1D1H
+```
+
+For more examples about how to use `since()`, especially with rounding, see {{jsxref("Temporal/PlainDate/since", "Temporal.PlainDate.prototype.since()")}} and {{jsxref("Temporal/PlainTime/since", "Temporal.PlainTime.prototype.since()")}}.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/until", "Temporal.ZonedDateTime.prototype.until()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/startofday/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/startofday/index.md
new file mode 100644
index 000000000000000..c450cc96b49ca6b
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/startofday/index.md
@@ -0,0 +1,66 @@
+---
+title: Temporal.ZonedDateTime.prototype.startOfDay()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/startOfDay
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.startOfDay
+---
+
+{{JSRef}}
+
+The **`startOfDay()`** method of {{jsxref("Temporal.ZonedDateTime")}} instances returns a {{jsxref("Temporal.ZonedDateTime")}} object representing the first instant of this date in the time zone. It usually has a time of `00:00:00`, but may be different if the midnight doesn't exist due to offset changes, in which case the first time that exists is returned.
+
+It is equivalent to calling {{jsxref("Temporal/ZonedDateTime/withPlainTime", "withPlainTime()")}} with no arguments.
+
+## Syntax
+
+```js-nolint
+startOfDay()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A {{jsxref("Temporal.ZonedDateTime")}} object with instant `t`, such that:
+
+- The date at `t` is different from the date one nanosecond before `t`.
+- The date at `t` is the same as the date of `this`.
+
+## Examples
+
+### Using startOfDay()
+
+```js
+// In the US, DST transitions happen at 2am, so the midnight exists
+const dt = Temporal.ZonedDateTime.from(
+ "2024-03-10T12:00:00-04:00[America/New_York]",
+);
+console.log(dt.startOfDay().toString()); // "2024-03-10T00:00:00-05:00[America/New_York]"
+
+// In Brazil, DST transitions happened at midnight, so the midnight didn't exist
+const dt2 = Temporal.ZonedDateTime.from(
+ "2015-10-18T12:00-02:00[America/Sao_Paulo]",
+);
+console.log(dt2.startOfDay().toString()); // "2015-10-18T01:00:00-02:00[America/Sao_Paulo]"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/hour", "Temporal.ZonedDateTime.prototype.hour")}}
+- {{jsxref("Temporal/ZonedDateTime/hoursInDay", "Temporal.ZonedDateTime.prototype.hoursInDay")}}
+- {{jsxref("Temporal/ZonedDateTime/timeZoneId", "Temporal.ZonedDateTime.prototype.timeZoneId")}}
+- {{jsxref("Temporal/ZonedDateTime/getTimeZoneTransition", "Temporal.ZonedDateTime.prototype.getTimeZoneTransition()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/subtract/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/subtract/index.md
new file mode 100644
index 000000000000000..af2a98c890d2a9a
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/subtract/index.md
@@ -0,0 +1,77 @@
+---
+title: Temporal.ZonedDateTime.prototype.subtract()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/subtract
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.subtract
+---
+
+{{JSRef}}
+
+The **`subtract()`** method of {{jsxref("Temporal.ZonedDateTime")}} instances returns a new `Temporal.ZonedDateTime` object representing this date-time moved backward by a given duration (in a form convertible by {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}).
+
+If you want to subtract two date-times and get a duration, use {{jsxref("Temporal/ZonedDateTime/since", "since()")}} or {{jsxref("Temporal/ZonedDateTime/until", "until()")}} instead.
+
+## Syntax
+
+```js-nolint
+subtract(duration)
+subtract(duration, options)
+```
+
+### Parameters
+
+- `duration`
+ - : A string, an object, or a {{jsxref("Temporal.Duration")}} instance representing a duration to subtract from this date-time. It is converted to a `Temporal.Duration` object using the same algorithm as {{jsxref("Temporal/Duration/from", "Temporal.Duration.from()")}}.
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `overflow` {{optional_inline}}
+ - : A string specifying the behavior when a date component is out of range. Possible values are:
+ - `"constrain"` (default)
+ - : The date component is [clamped](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#invalid_date_clamping) to the valid range.
+ - `"reject"`
+ - : A {{jsxref("RangeError")}} is thrown if the date component is out of range.
+
+### Return value
+
+A new `Temporal.ZonedDateTime` object representing the date-time specified by the original `ZonedDateTime`, minus the duration.
+
+## Description
+
+Subtracting a duration is equivalent to [adding](Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/add) its [negation](Web/JavaScript/Reference/Global_Objects/Temporal/Duration/negated), so all the same considerations apply.
+
+## Examples
+
+### Subtracting a duration
+
+```js
+const start = Temporal.ZonedDateTime.from(
+ "2021-01-01T12:34:56-05:00[America/New_York]",
+);
+const end = start.subtract({
+ years: 1,
+ months: 2,
+ weeks: 3,
+ days: 4,
+ hours: 5,
+ minutes: 6,
+ seconds: 7,
+ milliseconds: 8,
+});
+console.log(end.toString()); // 2019-10-07T07:28:48.992-04:00[America/New_York]
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/since", "Temporal.ZonedDateTime.prototype.since()")}}
+- {{jsxref("Temporal/ZonedDateTime/until", "Temporal.ZonedDateTime.prototype.until()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/timezoneid/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/timezoneid/index.md
new file mode 100644
index 000000000000000..3d7ac2b1e566558
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/timezoneid/index.md
@@ -0,0 +1,72 @@
+---
+title: Temporal.ZonedDateTime.prototype.timeZoneId
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/timeZoneId
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.timeZoneId
+---
+
+{{JSRef}}
+
+The **`timeZoneId`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a string representing the [time zone identifier](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets) used to interpret the internal instant. The string is either a named identifier in the preferred case (such as `"America/New_York"`), or an offset in the form `"±hh:mm"`. If the time zone has aliases, the `timeZoneId` is the identifier used to create the `ZonedDateTime`, without canonicalization to the primary identifier.
+
+The set accessor of `timeZoneId` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/ZonedDateTime/withTimeZone", "withTimeZone()")}} method to create a new `Temporal.ZonedDateTime` object with the desired new value.
+
+> [!NOTE]
+> This string is not intended for display to users. Use {{jsxref("Temporal/ZonedDateTime/toLocaleString", "toLocaleString()")}} with the appropriate options to get a localized string.
+
+## Examples
+
+### Using timeZoneId
+
+```js
+const dt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:00:00-07:00[America/Los_Angeles]",
+);
+console.log(dt.timeZoneId); // "America/Los_Angeles"
+
+const dt2 = Temporal.ZonedDateTime.from("2021-07-01T12:00:00-07:00[-07:00]");
+console.log(dt2.timeZoneId); // "-07:00"
+
+const dt3 = dt2.withTimeZone("Asia/Shanghai");
+console.log(dt3.timeZoneId); // "Asia/Shanghai"
+```
+
+The `timeZoneId` is never canonicalized to the primary identifier; it is the same as the one used to create the `ZonedDateTime`.
+
+```js
+const dt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:00:00+07:00[Asia/Ho_Chi_Minh]",
+);
+const dt2 = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:00:00+07:00[Asia/Saigon]",
+);
+console.log(dt.timeZoneId); // "Asia/Ho_Chi_Minh"
+console.log(dt2.timeZoneId); // "Asia/Saigon"
+```
+
+However, presentational differences will get canonicalized.
+
+```js
+const dt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:00:00+07:00[asia/ho_chi_minh]",
+);
+console.log(dt.timeZoneId); // "Asia/Ho_Chi_Minh"
+
+const dt2 = Temporal.ZonedDateTime.from("2021-07-01T12:00:00+07:00[+07]");
+console.log(dt2.timeZoneId); // "+07:00"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/withTimeZone", "Temporal.ZonedDateTime.prototype.withTimeZone()")}}
+- {{jsxref("Temporal/ZonedDateTime/offset", "Temporal.ZonedDateTime.prototype.offset")}}
+- {{jsxref("Temporal/ZonedDateTime/offsetNanoseconds", "Temporal.ZonedDateTime.prototype.offsetNanoseconds")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/toinstant/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/toinstant/index.md
new file mode 100644
index 000000000000000..c948876dec5e28c
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/toinstant/index.md
@@ -0,0 +1,53 @@
+---
+title: Temporal.ZonedDateTime.prototype.toInstant()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/toInstant
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.toInstant
+---
+
+{{JSRef}}
+
+The **`toInstant()`** method of {{jsxref("Temporal.ZonedDateTime")}} instances returns a new {{jsxref("Temporal.Instant")}} object representing the instant of this date-time.
+
+## Syntax
+
+```js-nolint
+toInstant()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A new {{jsxref("Temporal.Instant")}} object representing the instant of this date-time.
+
+## Examples
+
+### Using toInstant()
+
+```js
+const zdt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:34:56.987654321-04:00[America/New_York]",
+);
+const instant = zdt.toInstant();
+console.log(instant.toString()); // 2021-07-01T16:34:56.987654321Z
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal.Instant")}}
+- {{jsxref("Temporal/ZonedDateTime/toPlainDate", "Temporal.ZonedDateTime.prototype.toPlainDate()")}}
+- {{jsxref("Temporal/ZonedDateTime/toPlainTime", "Temporal.ZonedDateTime.prototype.toPlainTime()")}}
+- {{jsxref("Temporal/ZonedDateTime/toPlainDateTime", "Temporal.ZonedDateTime.prototype.toPlainDateTime()")}}
+- {{jsxref("Temporal/Instant/toZonedDateTimeISO", "Temporal.Instant.prototype.toZonedDateTimeISO()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/tojson/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/tojson/index.md
new file mode 100644
index 000000000000000..a54763dc74ba2e5
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/tojson/index.md
@@ -0,0 +1,78 @@
+---
+title: Temporal.ZonedDateTime.prototype.toJSON()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/toJSON
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.toJSON
+---
+
+{{JSRef}}
+
+The **`toJSON()`** method of {{jsxref("Temporal.ZonedDateTime")}} instances returns a string representing this date-time in the same [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#rfc_9557_format) as calling {{jsxref("Temporal/ZonedDateTime/toString", "toString()")}}. It is intended to be implicitly called by {{jsxref("JSON.stringify()")}}.
+
+## Syntax
+
+```js-nolint
+toJSON()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A string representing the given date-time in the [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#rfc_9557_format), with the calendar annotation included if it is not `"iso8601"`, and the offset and time zone annotation always included.
+
+## Description
+
+The `toJSON()` method is automatically called by {{jsxref("JSON.stringify()")}} when a `Temporal.ZonedDateTime` object is stringified. This method is generally intended to, by default, usefully serialize `Temporal.ZonedDateTime` objects during [JSON](/en-US/docs/Glossary/JSON) serialization, which can then be deserialized using the {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}} function as the reviver of {{jsxref("JSON.parse()")}}.
+
+## Examples
+
+### Using toJSON()
+
+```js
+const zdt = Temporal.ZonedDateTime.from({
+ year: 2021,
+ month: 8,
+ day: 1,
+ timeZone: "America/New_York",
+});
+const zdtStr = zdt.toJSON(); // '2021-08-01T00:00:00-04:00[America/New_York]'
+const zdt2 = Temporal.ZonedDateTime.from(zdtStr);
+```
+
+### JSON serialization and parsing
+
+This example shows how `Temporal.ZonedDateTime` can be serialized as JSON without extra effort, and how to parse it back.
+
+```js
+const zdt = Temporal.ZonedDateTime.from({
+ year: 2021,
+ month: 8,
+ day: 1,
+ timeZone: "America/New_York",
+});
+const jsonStr = JSON.stringify({ meeting: zdt }); // '{"meeting":"2021-08-01T00:00:00-04:00[America/New_York]"}'
+const obj = JSON.parse(jsonStr, (key, value) => {
+ if (key === "meeting") {
+ return Temporal.ZonedDateTime.from(value);
+ }
+ return value;
+});
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}}
+- {{jsxref("Temporal/ZonedDateTime/toString", "Temporal.ZonedDateTime.prototype.toString()")}}
+- {{jsxref("Temporal/ZonedDateTime/toLocaleString", "Temporal.ZonedDateTime.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/tolocalestring/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/tolocalestring/index.md
new file mode 100644
index 000000000000000..c45930562dfd85f
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/tolocalestring/index.md
@@ -0,0 +1,121 @@
+---
+title: Temporal.ZonedDateTime.prototype.toLocaleString()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/toLocaleString
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.toLocaleString
+---
+
+{{JSRef}}
+
+The **`toLocaleString()`** method of {{jsxref("Temporal.ZonedDateTime")}} instances returns a string with a language-sensitive representation of this date-time. In implementations with [`Intl.DateTimeFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat) support, this method delegates to `Intl.DateTimeFormat` and passes this date-time converted to an {{jsxref("Temporal.Instant")}} (because `Intl.DateTimeFormat` cannot directly format a `Temporal.ZonedDateTime`).
+
+Every time `toLocaleString` is called, it has to perform a search in a big database of localization strings, which is potentially inefficient. When the method is called many times with the same arguments, it is better to create a {{jsxref("Intl.DateTimeFormat")}} object and use its {{jsxref("Intl/DateTimeFormat/format", "format()")}} method, because a `DateTimeFormat` object remembers the arguments passed to it and may decide to cache a slice of the database, so future `format` calls can search for localization strings within a more constrained context. However, currently `Intl.DateTimeFormat` does not support formatting `Temporal.ZonedDateTime` objects, so you must convert them to `Temporal.Instant` objects first before passing them to `format()`.
+
+## Syntax
+
+```js-nolint
+toLocaleString()
+toLocaleString(locales)
+toLocaleString(locales, options)
+```
+
+### Parameters
+
+The `locales` and `options` parameters customize the behavior of the function and let applications specify the language whose formatting conventions should be used.
+
+In implementations that support the [`Intl.DateTimeFormat` API](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat), these parameters correspond exactly to the [`Intl.DateTimeFormat()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat) constructor's parameters. Implementations without `Intl.DateTimeFormat` support return the exact same string as {{jsxref("Temporal/ZonedDateTime/toString", "toString()")}}, ignoring both parameters.
+
+- `locales` {{optional_inline}}
+ - : A string with a BCP 47 language tag, or an array of such strings. Corresponds to the [`locales`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#locales) parameter of the `Intl.DateTimeFormat()` constructor.
+- `options` {{optional_inline}}
+
+ - : An object adjusting the output format. Corresponds to the [`options`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#options) parameter of the `Intl.DateTimeFormat()` constructor. If this date-time's calendar is not `"iso8601"`, the `calendar` option must be provided with the same value; otherwise, if this date-time's calendar is `"iso8601"`, the `calendar` option can be any value. The `timeZone` option must not be provided, as it is automatically set to be the date-time's {{jsxref("Temporal/ZonedDateTime/timeZoneId", "timeZoneId")}}. Regarding the [date-time component options](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#date-time_component_options) and the style shortcuts (`dateStyle` and `timeStyle`), the options should follow one of these forms:
+
+ - Provide none of them: `year`, `month`, `day`, `hour`, `minute`, and `second` will default to `"numeric"`.
+ - Provide at least one of `dateStyle` or `timeStyle`: the date-time components will be set according to the specified style and the locale.
+ - Provide some date-time component options. Only the specified date-time components will be included in the output.
+
+See the [`Intl.DateTimeFormat()` constructor](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat) for details on these parameters and how to use them.
+
+### Return value
+
+A string representing the given date-time according to language-specific conventions.
+
+In implementations with `Intl.DateTimeFormat`, this is equivalent to `new Intl.DateTimeFormat(locales, options).format(dateTime.toInstant())`, where `options` has been normalized as described above.
+
+> [!NOTE]
+> Most of the time, the formatting returned by `toLocaleString()` is consistent. However, the output may vary between implementations, even within the same locale — output variations are by design and allowed by the specification. It may also not be what you expect. For example, the string may use non-breaking spaces or be surrounded by bidirectional control characters. You should not compare the results of `toLocaleString()` to hardcoded constants.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+- {{jsxref("TypeError")}}
+ - : Thrown if any of the options is not of the expected type.
+
+## Examples
+
+### Using toLocaleString()
+
+Basic use of this method without specifying a `locale` returns a formatted string in the default locale and with default options.
+
+```js
+const zdt = Temporal.ZonedDateTime.from(
+ "2021-08-01T12:34:56-04:00[America/New_York]",
+);
+
+console.log(zdt.toLocaleString()); // 8/1/2021, 12:34:56 PM EDT (assuming en-US locale)
+```
+
+If the date's calendar doesn't match the locale's default calendar, and the date's calendar is not `iso8601`, an explicit `calendar` option must be provided with the same value.
+
+```js
+const zdt = Temporal.ZonedDateTime.from(
+ "2021-08-01T12:34:56+09:00[Asia/Tokyo][u-ca=japanese]",
+);
+// The ja-JP locale uses the Gregorian calendar by default
+zdt.toLocaleString("ja-JP", { calendar: "japanese" }); // R3/8/1 12:34:56 JST
+```
+
+### Using toLocaleString() with options
+
+You can customize which parts of the date are included in the output by providing the `options` parameter.
+
+```js
+const zdt = Temporal.ZonedDateTime.from(
+ "2021-08-01T12:34:56+09:00[Asia/Tokyo][u-ca=japanese]",
+);
+zdt.toLocaleString("ja-JP", {
+ calendar: "japanese",
+ dateStyle: "full",
+ timeStyle: "full",
+}); // 令和3年8月1日日曜日 12時34分56秒 日本標準時
+zdt.toLocaleString("ja-JP", {
+ calendar: "japanese",
+ year: "numeric",
+ month: "long",
+ hour: "numeric",
+ timeZoneName: "shortGeneric",
+}); // 令和3年8月 12時 JST
+zdt.toLocaleString("ja-JP", {
+ calendar: "japanese",
+ year: "numeric",
+ hour: "numeric",
+ minute: "numeric",
+}); // 令和3年 12:34
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Intl.DateTimeFormat")}}
+- {{jsxref("Temporal/ZonedDateTime/toJSON", "Temporal.ZonedDateTime.prototype.toJSON()")}}
+- {{jsxref("Temporal/ZonedDateTime/toString", "Temporal.ZonedDateTime.prototype.toString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/toplaindate/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/toplaindate/index.md
new file mode 100644
index 000000000000000..bcdbeccba96c606
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/toplaindate/index.md
@@ -0,0 +1,53 @@
+---
+title: Temporal.ZonedDateTime.prototype.toPlainDate()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/toPlainDate
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.toPlainDate
+---
+
+{{JSRef}}
+
+The **`toPlainDate()`** method of {{jsxref("Temporal.ZonedDateTime")}} instances returns a new {{jsxref("Temporal.PlainDate")}} object representing the date portion of this date-time.
+
+## Syntax
+
+```js-nolint
+toPlainDate()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A new {{jsxref("Temporal.PlainDate")}} object representing the date portion of this date-time.
+
+## Examples
+
+### Using toPlainDate()
+
+```js
+const zdt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:34:56.987654321-04:00[America/New_York]",
+);
+const plainDate = zdt.toPlainDate();
+console.log(plainDate.toString()); // 2021-07-01
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal.PlainDate")}}
+- {{jsxref("Temporal/ZonedDateTime/toPlainTime", "Temporal.ZonedDateTime.prototype.toPlainTime()")}}
+- {{jsxref("Temporal/ZonedDateTime/toPlainDateTime", "Temporal.ZonedDateTime.prototype.toPlainDateTime()")}}
+- {{jsxref("Temporal/ZonedDateTime/toInstant", "Temporal.ZonedDateTime.prototype.toInstant()")}}
+- {{jsxref("Temporal/PlainDate/toZonedDateTime", "Temporal.PlainDate.prototype.toZonedDateTime()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/toplaindatetime/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/toplaindatetime/index.md
new file mode 100644
index 000000000000000..d10c41b155cb797
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/toplaindatetime/index.md
@@ -0,0 +1,56 @@
+---
+title: Temporal.ZonedDateTime.prototype.toPlainDateTime()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/toPlainDateTime
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.toPlainDateTime
+---
+
+{{JSRef}}
+
+The **`toPlainDateTime()`** method of {{jsxref("Temporal.ZonedDateTime")}} instances returns a new {{jsxref("Temporal.PlainDateTime")}} object representing the date and time portions of this date-time. Only the time zone information is removed.
+
+> [!WARNING]
+> After a `Temporal.ZonedDateTime` is converted to `Temporal.PlainDateTime`, it's no longer time-zone-aware. Subsequent operations like arithmetic or `with()` operations will not adjust for DST and may not yield the same results as equivalent operations with the original `Temporal.ZonedDateTime`. However, unless you perform those operations across a time zone offset transition, it's impossible to notice the difference. Therefore, be very careful when performing this conversion because subsequent results may be correct most of the time, but only turn out incorrect when moving across offset transitions like when DST starts or ends.
+
+## Syntax
+
+```js-nolint
+toPlainDateTime()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A new {{jsxref("Temporal.PlainDateTime")}} object representing the date and time portions of this date-time.
+
+## Examples
+
+### Using toPlainDateTime()
+
+```js
+const zdt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:34:56.987654321-04:00[America/New_York]",
+);
+const plainDateTime = zdt.toPlainDateTime();
+console.log(plainDateTime.toString()); // 2021-07-01T12:34:56.987654321
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal.PlainDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/toPlainDate", "Temporal.ZonedDateTime.prototype.toPlainDate()")}}
+- {{jsxref("Temporal/ZonedDateTime/toPlainTime", "Temporal.ZonedDateTime.prototype.toPlainTime()")}}
+- {{jsxref("Temporal/ZonedDateTime/toInstant", "Temporal.ZonedDateTime.prototype.toInstant()")}}
+- {{jsxref("Temporal/PlainDateTime/toZonedDateTime", "Temporal.PlainDateTime.prototype.toZonedDateTime()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/toplaintime/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/toplaintime/index.md
new file mode 100644
index 000000000000000..9614b3d0f170c8a
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/toplaintime/index.md
@@ -0,0 +1,55 @@
+---
+title: Temporal.ZonedDateTime.prototype.toPlainTime()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/toPlainTime
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.toPlainTime
+---
+
+{{JSRef}}
+
+The **`toPlainTime()`** method of {{jsxref("Temporal.ZonedDateTime")}} instances returns a new {{jsxref("Temporal.PlainTime")}} object representing the time portion of this date-time.
+
+> [!WARNING]
+> After a `Temporal.ZonedDateTime` is converted to `Temporal.PlainTime`, it's no longer time-zone-aware. Subsequent operations like arithmetic or `with()` operations will not adjust for DST and may not yield the same results as equivalent operations with the original `Temporal.ZonedDateTime`. However, unless you perform those operations across a time zone offset transition, it's impossible to notice the difference. Therefore, be very careful when performing this conversion because subsequent results may be correct most of the time, but only turn out incorrect when moving across offset transitions like when DST starts or ends.
+
+## Syntax
+
+```js-nolint
+toPlainTime()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+A new {{jsxref("Temporal.PlainTime")}} object representing the time portion of this date-time.
+
+## Examples
+
+### Using toPlainTime()
+
+```js
+const zdt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:34:56.987654321-04:00[America/New_York]",
+);
+const plainTime = zdt.toPlainTime();
+console.log(plainTime.toString()); // 12:34:56.987654321
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal.PlainTime")}}
+- {{jsxref("Temporal/ZonedDateTime/toPlainDate", "Temporal.ZonedDateTime.prototype.toPlainDate()")}}
+- {{jsxref("Temporal/ZonedDateTime/toPlainDateTime", "Temporal.ZonedDateTime.prototype.toPlainDateTime()")}}
+- {{jsxref("Temporal/ZonedDateTime/toInstant", "Temporal.ZonedDateTime.prototype.toInstant()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/tostring/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/tostring/index.md
new file mode 100644
index 000000000000000..31a72fb0fbde290
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/tostring/index.md
@@ -0,0 +1,110 @@
+---
+title: Temporal.ZonedDateTime.prototype.toString()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/toString
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.toString
+---
+
+{{JSRef}}
+
+The **`toString()`** method of {{jsxref("Temporal.ZonedDateTime")}} instances returns a string representing this date-time in the [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#rfc_9557_format).
+
+## Syntax
+
+```js-nolint
+toString()
+toString(options)
+```
+
+### Parameters
+
+- `options` {{optional_inline}}
+ - : An object containing the following property:
+ - `calendarName` {{optional_inline}}
+ - : Whether to show the calendar annotation (`[u-ca=calendar_id]`) in the return value. Possible values are:
+ - `"auto"` (default)
+ - : Include the calendar annotation if the calendar is not `"iso8601"`.
+ - `"always"`
+ - : Always include the calendar annotation.
+ - `"never"`
+ - : Never include the calendar annotation. This makes the returned string not recoverable to the same {{jsxref("Temporal.ZonedDateTime")}} instance, although the date value still remains the same.
+ - `"critical"`
+ - : Always include the calendar annotation, and add a critical flag: `[!u-ca=calendar_id]`. Useful when sending the string to certain systems, but not useful for Temporal itself.
+ - `fractionalSecondDigits` {{optional_inline}}
+ - : Either an integer from 0 to 9, or the string `"auto"`. The default is `"auto"`. If `"auto"`, then trailing zeros are removed from the fractional seconds. Otherwise, the fractional part of the second component contains this many digits, padded with zeros or rounded as necessary.
+ - `roundingMode` {{optional_inline}}
+ - : A string specifying how to round off fractional second digits beyond `fractionalSecondDigits`. See [`Intl.NumberFormat()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#roundingmode). Defaults to `"trunc"`.
+ - `smallestUnit` {{optional_inline}}
+ - : A string specifying the smallest unit to include in the output. Possible values are `"minute"`, `"second"`, `"millisecond"`, `"microsecond"`, and `"nanosecond"`, or their plural forms, which (except `"minute"`) are equivalent to `fractionalSecondDigits` values of `0`, `3`, `6`, `9`, respectively. If specified, then `fractionalSecondDigits` is ignored.
+ - `timeZoneName` {{optional_inline}}
+ - : Whether to show the time zone name (`[time_zone_id]`) in the return value. Possible values are:
+ - `"auto"` (default)
+ - : Always include the time zone name.
+ - `"never"`
+ - : Never include the time zone name. This makes the returned string not recoverable to the same {{jsxref("Temporal.ZonedDateTime")}} instance.
+ - `"critical"`
+ - : Always include the time zone name, and add a critical flag: `[!time)zone_id]`. Useful when sending the string to certain systems, but not useful for Temporal itself.
+ - `offset` {{optional_inline}}
+ - : Whether to show the offset (`±HH:mm`) in the return value. Possible values are:
+ - `"auto"` (default)
+ - : Always include the offset.
+ - `"never"`
+ - : Never include the offset. This makes the returned string not recoverable to the same {{jsxref("Temporal.ZonedDateTime")}} instance, if the time zone is included but the time is ambiguous, or if the time zone is also not included.
+
+### Return value
+
+A string in the [RFC 9557 format](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#rfc_9557_format) representing this date-time. The offset and calendar/time zone annotations are included as specified.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown if any of the options is invalid.
+- {{jsxref("TypeError")}}
+ - : Thrown if `options` is not an object or `undefined`.
+
+## Examples
+
+### Using toString()
+
+```js
+const zdt = Temporal.ZonedDateTime.from(
+ "2021-08-01T12:34:56[America/New_York]",
+);
+console.log(zdt.toString()); // '2021-08-01T12:34:56-04:00[America/New_York]'
+```
+
+Even for the `UTC` time zone, the offset is `+00:00`, not `Z`:
+
+```js
+const zdt = Temporal.ZonedDateTime.from("2021-08-01T12:34:56[UTC]");
+console.log(zdt.toString()); // '2021-08-01T12:34:56+00:00[UTC]'
+```
+
+### Using options
+
+For examples with rounding times, see {{jsxref("Temporal/PlainTime/toString", "Temporal.PlainTime.prototype.toString()")}}. For examples with displaying calendars, see {{jsxref("Temporal/PlainDate/toString", "Temporal.PlainDate.prototype.toString()")}}. Here we show controlling the display of time zone and offset:
+
+```js
+const zdt = Temporal.ZonedDateTime.from(
+ "2021-08-01T12:34:56[America/New_York]",
+);
+console.log(zdt.toString({ timeZoneName: "auto", offset: "never" })); // '2021-08-01T12:34:56[America/New_York]'
+console.log(zdt.toString({ timeZoneName: "never", offset: "auto" })); // '2021-08-01T12:34:56-04:00'
+console.log(zdt.toString({ timeZoneName: "never", offset: "never" })); // '2021-08-01T12:34:56'
+console.log(zdt.toString({ timeZoneName: "critical", offset: "never" })); // '2021-08-01T12:34:56[!America/New_York]'
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}}
+- {{jsxref("Temporal/ZonedDateTime/toJSON", "Temporal.ZonedDateTime.prototype.toJSON()")}}
+- {{jsxref("Temporal/ZonedDateTime/toLocaleString", "Temporal.ZonedDateTime.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/until/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/until/index.md
new file mode 100644
index 000000000000000..46ab4443b3fdb7e
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/until/index.md
@@ -0,0 +1,74 @@
+---
+title: Temporal.ZonedDateTime.prototype.until()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/until
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.until
+---
+
+{{JSRef}}
+
+The **`until()`** method of {{jsxref("Temporal.ZonedDateTime")}} instances returns a new {{jsxref("Temporal.Duration")}} object representing the duration from this date-time to another date-time (in a form convertible by {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}}). The duration is positive if the other date-time is after this date-time, and negative if before.
+
+This method does `other - this`. To do `this - other`, use the {{jsxref("Temporal/ZonedDateTime/since", "since()")}} method.
+
+## Syntax
+
+```js-nolint
+until(other)
+until(other, options)
+```
+
+### Parameters
+
+- `other`
+ - : A string, an object, or a {{jsxref("Temporal.ZonedDateTime")}} instance representing a date-time to subtract this date-time from. It is converted to a `Temporal.ZonedDateTime` object using the same algorithm as {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}}. It must have the same calendar as `this`.
+- `options` {{optional_inline}}
+ - : The same options as [`since()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/since#options).
+
+### Return value
+
+A new {{jsxref("Temporal.Duration")}} object representing the duration from this date-time _until_ `other`. The duration is positive if `other` is after this date-time, and negative if before.
+
+### Exceptions
+
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - `other` has a different calendar than `this`.
+ - Any of the options is invalid.
+ - `other` has a different time zone than `this`, and `largestUnit` is `"day"` or above.
+
+## Examples
+
+### Using until()
+
+```js
+const flight = Temporal.ZonedDateTime.from(
+ "2024-12-21T13:31:00-05:00[America/New_York]",
+);
+const now = Temporal.Now.zonedDateTimeISO("America/New_York").round("second");
+if (Temporal.ZonedDateTime.compare(flight, now) < 0) {
+ console.error(
+ "The flight is already in the past. The result may not make sense.",
+ );
+}
+const duration = now.until(flight, { largestUnit: "day" });
+console.log(`The flight is in ${duration.toLocaleString("en-US")}`);
+```
+
+For more examples, see [`since()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/since).
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal.Duration")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/since", "Temporal.ZonedDateTime.prototype.since()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/valueof/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/valueof/index.md
new file mode 100644
index 000000000000000..f0a99e10b15c3b8
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/valueof/index.md
@@ -0,0 +1,68 @@
+---
+title: Temporal.ZonedDateTime.prototype.valueOf()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/valueOf
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.valueOf
+---
+
+{{JSRef}}
+
+The **`valueOf()`** method of {{jsxref("Temporal.ZonedDateTime")}} instances throws a {{jsxref("TypeError")}}, which prevents `Temporal.ZonedDateTime` instances from being [implicitly converted to primitives](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) when used in arithmetic or comparison operations.
+
+## Syntax
+
+```js-nolint
+valueOf()
+```
+
+### Parameters
+
+None.
+
+### Return value
+
+None.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Always thrown.
+
+## Description
+
+Because both [primitive conversion](/en-US/docs/Web/JavaScript/Data_structures#primitive_coercion) and [number conversion](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number#number_coercion) call `valueOf()` before `toString()`, if `valueOf()` is absent, then an expression like `yearMonth1 > yearMonth2` would implicitly compare them as strings, which may have unexpected results. By throwing a `TypeError`, `Temporal.ZonedDateTime` instances prevent such implicit conversions. You need to explicitly convert them to numbers using {{jsxref("Temporal/ZonedDateTime/epochNanoseconds", "Temporal.ZonedDateTime.prototype.epochNanoseconds")}}, or use the {{jsxref("Temporal/ZonedDateTime/compare", "Temporal.ZonedDateTime.compare()")}} static method to compare them.
+
+## Examples
+
+### Arithmetic and comparison operations on Temporal.ZonedDateTime
+
+All arithmetic and comparison operations on `Temporal.ZonedDateTime` instances should use the dedicated methods or convert them to primitives explicitly.
+
+```js
+const zdt1 = Temporal.ZonedDateTime.from(
+ "2022-01-01T00:00:00[America/New_York]",
+);
+const zdt2 = Temporal.ZonedDateTime.from(
+ "2022-07-01T00:00:00[America/New_York]",
+);
+zdt1 > zdt2; // TypeError: can't convert ZonedDateTime to primitive type
+Temporal.ZonedDateTime.compare(zdt1, zdt2); // -1
+
+zdt2 - zdt1; // TypeError: can't convert ZonedDateTime to primitive type
+zdt2.since(zdt1).toString(); // "PT4343H"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/toString", "Temporal.ZonedDateTime.prototype.toString()")}}
+- {{jsxref("Temporal/ZonedDateTime/toJSON", "Temporal.ZonedDateTime.prototype.toJSON()")}}
+- {{jsxref("Temporal/ZonedDateTime/toLocaleString", "Temporal.ZonedDateTime.prototype.toLocaleString()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/weekofyear/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/weekofyear/index.md
new file mode 100644
index 000000000000000..65dc627b265d3b3
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/weekofyear/index.md
@@ -0,0 +1,43 @@
+---
+title: Temporal.ZonedDateTime.prototype.weekOfYear
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/weekOfYear
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.weekOfYear
+---
+
+{{JSRef}}
+
+The **`weekOfYear`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns a positive integer representing the 1-based week index in the {{jsxref("Temporal/ZonedDateTime/yearOfWeek", "yearOfWeek")}} of this date, or `undefined` if the calendar does not have a well-defined week system. The first week of the year is `1`. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `weekOfYear` is `undefined`. You cannot change this property directly. To create a new `Temporal.ZonedDateTime` object with the desired new `weekOfYear` value, use the {{jsxref("Temporal/ZonedDateTime/add", "add()")}} or {{jsxref("Temporal/ZonedDateTime/subtract", "subtract()")}} method with the appropriate number of `weeks`.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/weekOfYear", "Temporal.PlainDate.prototype.weekOfYear")}}.
+
+## Examples
+
+### Using weekOfYear
+
+```js
+const dt = Temporal.ZonedDateTime.from("2021-07-01[America/New_York]");
+console.log(dt.weekOfYear); // 26
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/yearOfWeek", "Temporal.ZonedDateTime.prototype.yearOfWeek")}}
+- {{jsxref("Temporal/ZonedDateTime/dayOfWeek", "Temporal.ZonedDateTime.prototype.dayOfWeek")}}
+- {{jsxref("Temporal/ZonedDateTime/daysInWeek", "Temporal.ZonedDateTime.prototype.daysInWeek")}}
+- {{jsxref("Temporal/ZonedDateTime/daysInYear", "Temporal.ZonedDateTime.prototype.daysInYear")}}
+- {{jsxref("Temporal/PlainDate/weekOfYear", "Temporal.PlainDate.prototype.weekOfYear")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/with/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/with/index.md
new file mode 100644
index 000000000000000..c4076f188effeb8
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/with/index.md
@@ -0,0 +1,136 @@
+---
+title: Temporal.ZonedDateTime.prototype.with()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/with
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.with
+---
+
+{{JSRef}}
+
+The **`with()`** method of {{jsxref("Temporal.ZonedDateTime")}} instances returns a new `Temporal.ZonedDateTime` object representing this date-time with some fields replaced by new values. Because all `Temporal` objects are designed to be immutable, this method essentially functions as the setter for the date-time's fields.
+
+To replace the {{jsxref("Temporal/ZonedDateTime/calendarId", "calendarId")}} property, use the {{jsxref("Temporal/ZonedDateTime/withCalendar", "withCalendar()")}} method. To replace the {{jsxref("Temporal/ZonedDateTime/timeZoneId", "timeZoneId")}} property, use the {{jsxref("Temporal/ZonedDateTime/withTimeZone", "withTimeZone()")}} method.
+
+## Syntax
+
+```js-nolint
+with(info)
+with(info, options)
+```
+
+### Parameters
+
+- `info`
+ - : An object containing at least one of the properties recognized by {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}} (except `calendar`): `day`, `era` and `eraYear`, `hour`, `microsecond`, `millisecond`, `minute`, `month`, `monthCode`, `nanosecond`, `offset`, `second`, `year`. Unspecified properties use the values from the original date-time. You only need to provide one of `month` or `monthCode`, and one of `era` and `eraYear` or `year`, and the other will be updated accordingly.
+- `options` {{optional_inline}}
+ - : An object containing some or all of the following properties (in the order they are retrieved and validated):
+ - `disambiguation` {{optional_inline}}
+ - : What to do if the local date-time is ambiguous in the given time zone (there are more than one instants with such local time, or the local time does not exist). Possible values are `"compatible"`, `"earlier"`, `"later"`, and `"reject"`. Defaults to `"compatible"`. For more information about these values, see [ambiguity and gaps from local time to UTC time](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#ambiguity_and_gaps_from_local_time_to_utc_time).
+ - `offset` {{optional_inline}}
+ - : What to do if the offset is explicitly provided in `info` but the offset is invalid for the given time zone in the given local time. Possible values are `"use"`, `"ignore"`, `"reject"`, and `"prefer"`. Defaults to `"prefer"`. For more information about these values, see [offset ambiguity](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#offset_ambiguity).
+ - `overflow` {{optional_inline}}
+ - : A string specifying the behavior when a date component is out of range (when using the object `info`). Possible values are:
+ - `"constrain"` (default)
+ - : The date component is [clamped](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate#invalid_date_clamping) to the valid range.
+ - `"reject"`
+ - : A {{jsxref("RangeError")}} is thrown if the date component is out of range.
+
+### Return value
+
+A new `Temporal.ZonedDateTime` object, where the fields specified in `info` that are not `undefined` are replaced by the corresponding values, and the rest of the fields are copied from the original date-time.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Thrown in one of the following cases:
+ - `info` is not an object.
+ - `options` is not an object or `undefined`.
+- {{jsxref("RangeError")}}
+ - : Thrown in one of the following cases:
+ - The provided properties that specify the same component are inconsistent.
+ - The provided non-numerical properties are not valid; for example, if `monthCode` is never a valid month code in this calendar.
+ - The provided numerical properties are out of range, and `options.overflow` is set to `"reject"`.
+
+## Examples
+
+### Using with()
+
+```js
+const zdt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:34:56[America/New_York]",
+);
+const newZDT = zdt.with({ hour: 13 });
+console.log(newZDT.toString()); // "2021-07-01T13:34:56-04:00[America/New_York]"
+```
+
+For more examples, see the documentation for the individual properties that can be set using `with()`.
+
+### Offset during date changes
+
+By default, the `offset` option is set to `"prefer"`, which means we use the original offset (or that provided in `info`) if it's valid, and recalculate otherwise. This means if you set to another date that has a different offset due to a DST transition, the offset will be recalculated:
+
+```js
+const zdt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:00:00-04:00[America/New_York]",
+);
+const newZDT = zdt.with({ month: 12 });
+// The offset is recalculated to -05:00
+console.log(newZDT.toString()); // "2021-12-01T12:00:00-05:00[America/New_York]"
+```
+
+And if you set the time to within the DST transition, the offset is used to resolve the ambiguity:
+
+```js
+const zdt = Temporal.ZonedDateTime.from(
+ "2024-11-02T01:05:00-04:00[America/New_York]",
+);
+const newZDT = zdt.with({ day: 3 });
+console.log(newZDT.toString()); // "2024-11-03T01:05:00-04:00[America/New_York]"
+
+const zdt2 = Temporal.ZonedDateTime.from(
+ "2024-11-04T01:05:00-05:00[America/New_York]",
+);
+const newZDT2 = zdt2.with({ day: 3 });
+console.log(newZDT2.toString()); // "2024-11-03T01:05:00-05:00[America/New_York]"
+```
+
+If you use `offset: "use"`, then the offset will be used as-is to obtain the exact time first, and _then_ recalculate the offset:
+
+```js
+const zdt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:00:00-04:00[America/New_York]",
+);
+const newZDT = zdt.with({ month: 12 }, { offset: "use" });
+// The offset is recalculated to -05:00, but the wall-clock time changes
+console.log(newZDT.toString()); // "2021-12-01T11:00:00-05:00[America/New_York]"
+```
+
+You can also set `offset: "reject"` to throw an error if the original offset is invalid, forcing an explicit new offset to be specified:
+
+```js
+const zdt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:00:00-04:00[America/New_York]",
+);
+zdt.with({ month: 12 }, { offset: "reject" });
+// RangeError: date-time can't be represented in the given time zone
+zdt.with({ month: 12, offset: "-05:00" }, { offset: "reject" }).toString();
+// "2021-12-01T12:00:00-05:00[America/New_York]"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/withCalendar", "Temporal.ZonedDateTime.prototype.withCalendar()")}}
+- {{jsxref("Temporal/ZonedDateTime/withTimeZone", "Temporal.ZonedDateTime.prototype.withTimeZone()")}}
+- {{jsxref("Temporal/ZonedDateTime/withPlainTime", "Temporal.ZonedDateTime.prototype.withPlainTime()")}}
+- {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/withcalendar/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/withcalendar/index.md
new file mode 100644
index 000000000000000..86d180569b8bd36
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/withcalendar/index.md
@@ -0,0 +1,64 @@
+---
+title: Temporal.ZonedDateTime.prototype.withCalendar()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/withCalendar
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.withCalendar
+---
+
+{{JSRef}}
+
+The **`withCalendar()`** method of {{jsxref("Temporal.ZonedDateTime")}} instances returns a new `Temporal.ZonedDateTime` object representing this date-time interpreted in the new calendar system. Because all `Temporal` objects are designed to be immutable, this method essentially functions as the setter for the date-time's {{jsxref("Temporal/ZonedDateTime/calendarId", "calendarId")}} property.
+
+To replace the date-time component properties, use the {{jsxref("Temporal/ZonedDateTime/with", "with()")}} method. To replace its time zone, use the {{jsxref("Temporal/ZonedDateTime/withTimeZone", "withTimeZone()")}} method.
+
+## Syntax
+
+```js-nolint
+withCalendar(calendar)
+```
+
+### Parameters
+
+- `calendar`
+ - : A string that corresponds to the {{jsxref("Temporal/ZonedDateTime/calendarId", "calendarId")}} property.
+
+### Return value
+
+A new `Temporal.ZonedDateTime` object, representing the date-time specified by the original `ZonedDateTime`, interpreted in the new calendar system.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Thrown if `calendar` is not a string.
+- {{jsxref("RangeError")}}
+ - : Thrown if `calendar` is not a valid calendar identifier.
+
+## Examples
+
+### Using withCalendar()
+
+```js
+const zdt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:34:56[America/New_York]",
+);
+const newZDT = zdt.withCalendar("islamic");
+console.log(newZDT.toLocaleString("en-US", { calendar: "islamic" }));
+// 11/21/1442 AH, 12:34:56 PM EDT
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/withTimeZone", "Temporal.ZonedDateTime.prototype.withTimeZone()")}}
+- {{jsxref("Temporal/ZonedDateTime/withPlainTime", "Temporal.ZonedDateTime.prototype.withPlainTime()")}}
+- {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}}
+- {{jsxref("Temporal/ZonedDateTime/calendarId", "Temporal.ZonedDateTime.prototype.calendarId")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/withplaintime/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/withplaintime/index.md
new file mode 100644
index 000000000000000..edc56f4a6771dbd
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/withplaintime/index.md
@@ -0,0 +1,74 @@
+---
+title: Temporal.ZonedDateTime.prototype.withPlainTime()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/withPlainTime
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.withPlainTime
+---
+
+{{JSRef}}
+
+The **`withPlainTime()`** method of {{jsxref("Temporal.ZonedDateTime")}} instances returns a new `Temporal.ZonedDateTime` object representing this date-time with the time part entirely replaced by the new time (in a form convertible by {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}})
+
+This method will replace all time properties, defaulting to `0` where properties are unspecified. If you only want to replace some of the time properties, use the {{jsxref("Temporal/ZonedDateTime/with", "with()")}} method instead.
+
+## Syntax
+
+```js-nolint
+withPlainTime()
+withPlainTime(plainTime)
+```
+
+### Parameters
+
+- `plainTime` {{optional_inline}}
+ - : A string, an object, or a {{jsxref("Temporal.PlainTime")}} instance representing the new time. It is converted to a `Temporal.PlainTime` object using the same algorithm as {{jsxref("Temporal/PlainTime/from", "Temporal.PlainTime.from()")}}. If not specified, the time part is set to the [start of the day](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/startOfDay) (which is usually `00:00:00` unless it doesn't exist due to offset transitions). [Disambiguation](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets) always happens in the `"compatible"` mode; if you want to use a different mode, use the {{jsxref("Temporal/ZonedDateTime/with", "with()")}} method instead.
+
+### Return value
+
+A new `Temporal.ZonedDateTime` object, with the date part and the time zone copied from the original date-time and the time part replaced by the new time.
+
+## Examples
+
+### Using withPlainTime()
+
+```js
+const zdt = Temporal.ZonedDateTime.from(
+ "2021-07-01T12:34:56[America/New_York]",
+);
+
+// You can pass a string
+const newZDT = zdt.withPlainTime("13:45:00");
+console.log(newZDT.toString()); // "2021-07-01T13:45:00-04:00[America/New_York]"
+
+// You can only specify some time properties, and the rest default to 0;
+// for the with() method, they would be copied from the original date-time
+const newZDT2 = zdt.withPlainTime({ hour: 13 });
+console.log(newZDT2.toString()); // "2021-07-01T13:00:00-04:00[America/New_York]"
+
+// You can pass nothing to set the time to midnight
+const newZDT3 = zdt.withPlainTime();
+console.log(newZDT3.toString()); // "2021-07-01T00:00:00-04:00[America/New_York]"
+
+// But, if midnight doesn't exist, it may be a different time
+const zdt2 = Temporal.ZonedDateTime.from(
+ "2015-10-18T12:00-02:00[America/Sao_Paulo]",
+);
+console.log(zdt2.withPlainTime().toString()); // "2015-10-18T01:00:00-02:00[America/Sao_Paulo]"
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/withCalendar", "Temporal.ZonedDateTime.prototype.withCalendar()")}}
+- {{jsxref("Temporal/ZonedDateTime/withTimeZone", "Temporal.ZonedDateTime.prototype.withTimeZone()")}}
+- {{jsxref("Temporal/ZonedDateTime/toPlainTime", "Temporal.ZonedDateTime.prototype.toPlainTime()")}}
+- {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/withtimezone/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/withtimezone/index.md
new file mode 100644
index 000000000000000..bb6871fbca34819
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/withtimezone/index.md
@@ -0,0 +1,77 @@
+---
+title: Temporal.ZonedDateTime.prototype.withTimeZone()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/withTimeZone
+page-type: javascript-instance-method
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.withTimeZone
+---
+
+{{JSRef}}
+
+The **`withTimeZone()`** method of {{jsxref("Temporal.ZonedDateTime")}} instances returns a new `Temporal.ZonedDateTime` object representing the same instant as this date-time but in the new time zone. Because all `Temporal` objects are designed to be immutable, this method essentially functions as the setter for the date-time's {{jsxref("Temporal/ZonedDateTime/timeZoneId", "timeZoneId")}} property.
+
+To replace the date-time component properties, use the {{jsxref("Temporal/ZonedDateTime/with", "with()")}} method. To replace its calendar, use the {{jsxref("Temporal/ZonedDateTime/withCalendar", "withCalendar()")}} method.
+
+## Syntax
+
+```js-nolint
+withTimeZone(timeZone)
+```
+
+### Parameters
+
+- `timeZone`
+ - : Either a string or a {{jsxref("Temporal.ZonedDateTime")}} instance representing the time zone to use. If a `Temporal.ZonedDateTime` instance, its time zone is used. If a string, it can be a named time zone identifier, an offset time zone identifier, or a date-time string containing a time zone identifier or an offset (see [time zones and offsets](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#time_zones_and_offsets) for more information).
+
+### Return value
+
+A new `Temporal.ZonedDateTime` object representing the same instant as this date-time but in the new time zone.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Thrown if `timeZone` is not a string or a `Temporal.ZonedDateTime` instance.
+- {{jsxref("RangeError")}}
+ - : Thrown if the time zone name is invalid.
+
+## Examples
+
+### Using withTimeZone()
+
+```js
+const meetingTime = Temporal.ZonedDateTime.from(
+ "2021-08-01T12:00[America/New_York]",
+);
+const meetingTimeInParis = meetingTime.withTimeZone("Europe/Paris");
+console.log(meetingTimeInParis.toString()); // 2021-08-01T18:00:00+02:00[Europe/Paris]
+```
+
+### Replacing the time zone while keeping the same wall-clock time
+
+In the rare case where you want to keep the wall-clock time the same but change the time zone (and result in a different instant), convert it to a {{jsxref("Temporal.PlainDateTime")}} first:
+
+```js
+const meetingTime = Temporal.ZonedDateTime.from(
+ "2021-08-01T12:00[America/New_York]",
+);
+const meetingTimeInParis = meetingTime
+ .toPlainDateTime()
+ .toZonedDateTime("Europe/Paris");
+console.log(meetingTimeInParis.toString()); // 2021-08-01T12:00:00+02:00[Europe/Paris]
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/withCalendar", "Temporal.ZonedDateTime.prototype.withCalendar()")}}
+- {{jsxref("Temporal/ZonedDateTime/withPlainTime", "Temporal.ZonedDateTime.prototype.withPlainTime()")}}
+- {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}}
+- {{jsxref("Temporal/ZonedDateTime/timeZoneId", "Temporal.ZonedDateTime.prototype.timeZoneId")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/year/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/year/index.md
new file mode 100644
index 000000000000000..a141352d58f4dc6
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/year/index.md
@@ -0,0 +1,44 @@
+---
+title: Temporal.ZonedDateTime.prototype.year
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/year
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.year
+---
+
+{{JSRef}}
+
+The **`year`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns an integer representing the number of years of this date relative to the start of a calendar-specific epoch year. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `year` is `undefined`. You cannot change this property directly. Use the {{jsxref("Temporal/ZonedDateTime/with", "with()")}} method to create a new `Temporal.ZonedDateTime` object with the desired new value.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/year", "Temporal.PlainDate.prototype.year")}}.
+
+## Examples
+
+### Using year
+
+```js
+const dt = Temporal.ZonedDateTime.from("2021-07-01[America/New_York]"); // ISO 8601 calendar
+console.log(dt.year); // 2021
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/era", "Temporal.ZonedDateTime.prototype.era")}}
+- {{jsxref("Temporal/ZonedDateTime/eraYear", "Temporal.ZonedDateTime.prototype.eraYear")}}
+- {{jsxref("Temporal/ZonedDateTime/yearOfWeek", "Temporal.ZonedDateTime.prototype.yearOfWeek")}}
+- {{jsxref("Temporal/ZonedDateTime/month", "Temporal.ZonedDateTime.prototype.month")}}
+- {{jsxref("Temporal/ZonedDateTime/day", "Temporal.ZonedDateTime.prototype.day")}}
+- {{jsxref("Temporal/PlainDate/year", "Temporal.PlainDate.prototype.year")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/yearofweek/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/yearofweek/index.md
new file mode 100644
index 000000000000000..b2cf8e71366b6a3
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/yearofweek/index.md
@@ -0,0 +1,35 @@
+---
+title: Temporal.ZonedDateTime.prototype.yearOfWeek
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/yearOfWeek
+page-type: javascript-instance-accessor-property
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.yearOfWeek
+---
+
+{{JSRef}}
+
+The **`yearOfWeek`** accessor property of {{jsxref("Temporal.ZonedDateTime")}} instances returns an integer representing the year to be paired with the {{jsxref("Temporal/ZonedDateTime/weekOfYear", "weekOfYear")}} of this date, or `undefined` if the calendar does not have a well-defined week system. It is [calendar](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#calendars)-dependent.
+
+The set accessor of `yearOfWeek` is `undefined`. You cannot change this property directly.
+
+For general information and more examples, see {{jsxref("Temporal/PlainDate/yearOfWeek", "Temporal.PlainDate.prototype.yearOfWeek")}}.
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/with", "Temporal.ZonedDateTime.prototype.with()")}}
+- {{jsxref("Temporal/ZonedDateTime/add", "Temporal.ZonedDateTime.prototype.add()")}}
+- {{jsxref("Temporal/ZonedDateTime/subtract", "Temporal.ZonedDateTime.prototype.subtract()")}}
+- {{jsxref("Temporal/ZonedDateTime/year", "Temporal.ZonedDateTime.prototype.year")}}
+- {{jsxref("Temporal/ZonedDateTime/weekOfYear", "Temporal.ZonedDateTime.prototype.weekOfYear")}}
+- {{jsxref("Temporal/ZonedDateTime/dayOfWeek", "Temporal.ZonedDateTime.prototype.dayOfWeek")}}
+- {{jsxref("Temporal/ZonedDateTime/daysInWeek", "Temporal.ZonedDateTime.prototype.daysInWeek")}}
+- {{jsxref("Temporal/ZonedDateTime/daysInYear", "Temporal.ZonedDateTime.prototype.daysInYear")}}
+- {{jsxref("Temporal/PlainDate/yearOfWeek", "Temporal.PlainDate.prototype.yearOfWeek")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/zoneddatetime/index.md b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/zoneddatetime/index.md
new file mode 100644
index 000000000000000..09d1e852a97410f
--- /dev/null
+++ b/files/en-us/web/javascript/reference/global_objects/temporal/zoneddatetime/zoneddatetime/index.md
@@ -0,0 +1,63 @@
+---
+title: Temporal.ZonedDateTime()
+slug: Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime/ZonedDateTime
+page-type: javascript-constructor
+browser-compat: javascript.builtins.Temporal.ZonedDateTime.ZonedDateTime
+---
+
+{{JSRef}}
+
+The **`Temporal.ZonedDateTime()`** constructor creates {{jsxref("Temporal.ZonedDateTime")}} objects.
+
+This constructor allows you to create instances by directly supplying the underlying data. Like all other `Temporal` classes, you should usually construct `Temporal.ZonedDateTime` objects using the {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}} static method, which can handle a variety of input types.
+
+## Syntax
+
+```js-nolint
+new Temporal.ZonedDateTime(epochNanoseconds, timeZone)
+new Temporal.ZonedDateTime(epochNanoseconds, timeZone, calendar)
+```
+
+> **Note:** `Temporal.ZonedDateTime()` can only be constructed with [`new`](/en-US/docs/Web/JavaScript/Reference/Operators/new). Attempting to call it without `new` throws a {{jsxref("TypeError")}}.
+
+### Parameters
+
+- `epochNanoseconds`
+ - : A [BigInt](/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) that corresponds to the {{jsxref("Temporal/ZonedDateTime/epochNanoseconds", "epochNanoseconds")}} property.
+- `timeZone`
+ - : A string that corresponds to the {{jsxref("Temporal/ZonedDateTime/timeZoneId", "timeZoneId")}} property. Unlike all other `Temporal` APIs, it must be a valid time zone identifier (either named or offset) as-is, and cannot be a `Temporal.ZonedDateTime` instance or a date-time string.
+- `calendar` {{optional_inline}}
+ - : A string that corresponds to the {{jsxref("Temporal/ZonedDateTime/calendarId", "calendarId")}} property. Defaults to `"iso8601"`.
+
+### Return value
+
+A new `Temporal.ZonedDateTime` object, representing the specific instant specified by the parameters.
+
+### Exceptions
+
+- {{jsxref("TypeError")}}
+ - : Thrown if `timeZone` or `calendar` is not a string.
+- {{jsxref("RangeError")}}
+ - : Thrown if any parameter is not within the valid range.
+
+## Examples
+
+### Using Temporal.ZonedDateTime()
+
+```js
+const zdt = new Temporal.ZonedDateTime(0n, "America/New_York");
+console.log(zdt.toString()); // '1969-12-31T19:00:00-05:00[America/New_York]'
+```
+
+## Specifications
+
+{{Specifications}}
+
+## Browser compatibility
+
+{{Compat}}
+
+## See also
+
+- {{jsxref("Temporal.ZonedDateTime")}}
+- {{jsxref("Temporal/ZonedDateTime/from", "Temporal.ZonedDateTime.from()")}}
diff --git a/files/en-us/web/javascript/reference/global_objects/typedarray/find/index.md b/files/en-us/web/javascript/reference/global_objects/typedarray/find/index.md
index 679ad35b2e12161..4674048ba1318d1 100644
--- a/files/en-us/web/javascript/reference/global_objects/typedarray/find/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/typedarray/find/index.md
@@ -42,9 +42,9 @@ See {{jsxref("Array.prototype.find()")}} for more details. This method is not ge
## Examples
-### Find a prime number in a typed array
+### Find the first prime number in a typed array
-The following example finds an element in the typed array that is a prime number (or returns {{jsxref("undefined")}} if there is no prime number).
+The following example returns the first element in the typed array that is a prime number, or {{jsxref("undefined")}} if there is no prime number.
```js
function isPrime(element, index, array) {
diff --git a/files/en-us/web/javascript/reference/global_objects/typedarray/findindex/index.md b/files/en-us/web/javascript/reference/global_objects/typedarray/findindex/index.md
index 6de911a0f8f6336..3bafcc6f3b0f169 100644
--- a/files/en-us/web/javascript/reference/global_objects/typedarray/findindex/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/typedarray/findindex/index.md
@@ -41,10 +41,9 @@ See {{jsxref("Array.prototype.findIndex()")}} for more details. This method is n
## Examples
-### Find the index of a prime number in a typed array
+### Find the index of the first prime number in a typed array
-The following example finds the index of an element in the typed array that is a prime
-number (or returns `-1` if there is no prime number).
+The following example returns the index of the first element in the typed array that is a prime number, or `-1` if there is no prime number.
```js
function isPrime(element, index, array) {
diff --git a/files/en-us/web/javascript/reference/global_objects/typedarray/findlast/index.md b/files/en-us/web/javascript/reference/global_objects/typedarray/findlast/index.md
index 08765cb2f6160ed..650548bb177466b 100644
--- a/files/en-us/web/javascript/reference/global_objects/typedarray/findlast/index.md
+++ b/files/en-us/web/javascript/reference/global_objects/typedarray/findlast/index.md
@@ -43,7 +43,7 @@ See {{jsxref("Array.prototype.findLast()")}} for more details. This method is no
### Find the last prime number in a typed array
-The following example returns the value of the last element in the typed array that is a prime number, or {{jsxref("undefined")}} if there is no prime number.
+The following example returns the last element in the typed array that is a prime number, or {{jsxref("undefined")}} if there is no prime number.
```js
function isPrime(element) {
diff --git a/files/en-us/web/javascript/reference/index.md b/files/en-us/web/javascript/reference/index.md
index 1819afebd62827f..9d2bb98878bbf87 100644
--- a/files/en-us/web/javascript/reference/index.md
+++ b/files/en-us/web/javascript/reference/index.md
@@ -62,6 +62,7 @@ If you are new to JavaScript, start with the [guide](/en-US/docs/Web/JavaScript/
- {{jsxref("BigInt")}}
- {{jsxref("Math")}}
- {{jsxref("Date")}}
+- {{jsxref("Temporal")}}
### Text processing
diff --git a/files/en-us/web/javascript/reference/operators/instanceof/index.md b/files/en-us/web/javascript/reference/operators/instanceof/index.md
index 90c9a4a6cb7222b..9025ec3445a129e 100644
--- a/files/en-us/web/javascript/reference/operators/instanceof/index.md
+++ b/files/en-us/web/javascript/reference/operators/instanceof/index.md
@@ -143,16 +143,16 @@ stringObject instanceof Object; // true
stringObject instanceof Date; // false
```
-### Using instanceof with Date
+### Using instanceof with Map
-The following example shows the behavior of `instanceof` with `Date` objects.
+The following example shows the behavior of `instanceof` with `Map` objects.
```js
-const myDate = new Date();
+const myMap = new Map();
-myDate instanceof Date; // true
-myDate instanceof Object; // true
-myDate instanceof String; // false
+myMap instanceof Map; // true
+myMap instanceof Object; // true
+myMap instanceof String; // false
```
### Objects created using Object.create()
diff --git a/files/en-us/web/javascript/reference/operators/object_initializer/index.md b/files/en-us/web/javascript/reference/operators/object_initializer/index.md
index c61b8e889601bdd..15d2411aa70252e 100644
--- a/files/en-us/web/javascript/reference/operators/object_initializer/index.md
+++ b/files/en-us/web/javascript/reference/operators/object_initializer/index.md
@@ -47,7 +47,7 @@ An object initializer is an expression that describes the initialization of an {
The object literal syntax is not the same as the **J**ava**S**cript **O**bject **N**otation ([JSON](/en-US/docs/Glossary/JSON)). Although they look similar, there are differences between them:
- JSON _only_ permits property definition using the `"property": value` syntax. The property name must be double-quoted, and the definition cannot be a shorthand. Computed property names are not allowed either.
-- JSON object property values can only be strings, numbers, `true`, `false`, `null`, arrays, or another JSON object. This means JSON cannot express methods or non-plain objects like [`Date`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) or [`RegExp`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp).
+- JSON object property values can only be strings, numbers, `true`, `false`, `null`, arrays, or another JSON object. This means JSON cannot express methods or non-plain objects like [`Map`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) or [`RegExp`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp).
- In JSON, `"__proto__"` is a normal property key. In an object literal, it [sets the object's prototype](#prototype_setter).
JSON is a _strict subset_ of the object literal syntax, meaning that every valid JSON text can be parsed as an object literal, and would likely not cause syntax errors. The only exception is that the object literal syntax prohibits duplicate `__proto__` keys, which does not apply to [`JSON.parse()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse). The latter treats `__proto__` like a normal property and takes the last occurrence as the property's value. The only time when the object value they represent (a.k.a. their semantic) differ is also when the source contains the `__proto__` key — for object literals, it sets the object's prototype; for JSON, it's a normal property.
diff --git a/files/en-us/web/manifest/share_target/index.md b/files/en-us/web/manifest/share_target/index.md
index 860d2fcedf50f5e..500e64ab6608250 100644
--- a/files/en-us/web/manifest/share_target/index.md
+++ b/files/en-us/web/manifest/share_target/index.md
@@ -4,11 +4,10 @@ slug: Web/Manifest/share_target
page-type: web-manifest-member
status:
- experimental
- - non-standard
browser-compat: html.manifest.share_target
---
-{{QuickLinksWithSubpages("/en-US/docs/Web/Manifest")}}{{SeeCompatTable}}{{non-standard_header}}
+{{QuickLinksWithSubpages("/en-US/docs/Web/Manifest")}}{{SeeCompatTable}}
The `share_target` manifest member allows installed {{Glossary("Progressive Web Apps")}} (PWAs) to be registered as a share target in the system's share dialog.
diff --git a/files/jsondata/InterfaceData.json b/files/jsondata/InterfaceData.json
index afe3d992e83f44b..7b141388609d7f8 100644
--- a/files/jsondata/InterfaceData.json
+++ b/files/jsondata/InterfaceData.json
@@ -552,6 +552,14 @@
"inh": "CSSRule",
"impl": []
},
+ "CSSFunctionDeclarations": {
+ "inh": "CSSRule",
+ "impl": []
+ },
+ "CSSFunctionDescriptors": {
+ "inh": "CSSStyleDeclaration",
+ "impl": []
+ },
"CSSFunctionRule": {
"inh": "CSSGroupingRule",
"impl": []
@@ -3072,6 +3080,26 @@
"inh": "",
"impl": []
},
+ "SharedStorageAppendMethod": {
+ "inh": "SharedStorageModifierMethod",
+ "impl": []
+ },
+ "SharedStorageClearMethod": {
+ "inh": "SharedStorageModifierMethod",
+ "impl": []
+ },
+ "SharedStorageDeleteMethod": {
+ "inh": "SharedStorageModifierMethod",
+ "impl": []
+ },
+ "SharedStorageModifierMethod": {
+ "inh": "",
+ "impl": []
+ },
+ "SharedStorageSetMethod": {
+ "inh": "SharedStorageModifierMethod",
+ "impl": []
+ },
"SharedStorageWorklet": {
"inh": "Worklet",
"impl": []
diff --git a/package.json b/package.json
index 36e04ae05b7dd38..e11002dcbefc1e8 100644
--- a/package.json
+++ b/package.json
@@ -50,12 +50,12 @@
"cli-progress": "^3.12.0",
"cross-env": "7.0.3",
"env-cmd": "10.1.0",
- "fdir": "^6.4.2",
+ "fdir": "^6.4.3",
"gray-matter": "^4.0.3",
"husky": "9.1.7",
"js-yaml": "^4.1.0",
- "lint-staged": "15.4.0",
- "markdownlint-cli2": "0.17.1",
+ "lint-staged": "15.4.1",
+ "markdownlint-cli2": "0.17.2",
"markdownlint-rule-search-replace": "1.2.0",
"prettier": "3.4.2"
},
diff --git a/yarn.lock b/yarn.lock
index cba746877a5d85f..e382283e1b3f05d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3693,10 +3693,10 @@ fd-slicer@~1.1.0:
dependencies:
pend "~1.2.0"
-fdir@^6.4.2:
- version "6.4.2"
- resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.2.tgz#ddaa7ce1831b161bc3657bb99cb36e1622702689"
- integrity sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==
+fdir@^6.4.2, fdir@^6.4.3:
+ version "6.4.3"
+ resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.3.tgz#011cdacf837eca9b811c89dbb902df714273db72"
+ integrity sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==
fecha@^4.2.0:
version "4.2.3"
@@ -5604,10 +5604,10 @@ linkify-it@^5.0.0:
dependencies:
uc.micro "^2.0.0"
-lint-staged@15.4.0:
- version "15.4.0"
- resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.4.0.tgz#ea2d096c35452ba7854f31431bb5d195260c9474"
- integrity sha512-UdODqEZiQimd7rCzZ2vqFuELRNUda3mdv7M93jhE4SmDiqAj/w/msvwKgagH23jv2iCPw6Q5m+ltX4VlHvp2LQ==
+lint-staged@15.4.1:
+ version "15.4.1"
+ resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.4.1.tgz#b34e3297ae13fdb2d99b3456e2dbd8e20798bced"
+ integrity sha512-P8yJuVRyLrm5KxCtFx+gjI5Bil+wO7wnTl7C3bXhvtTaAFGirzeB24++D0wGoUwxrUKecNiehemgCob9YL39NA==
dependencies:
chalk "~5.4.1"
commander "~12.1.0"
@@ -5842,15 +5842,15 @@ markdownlint-cli2-formatter-default@0.0.5:
resolved "https://registry.yarnpkg.com/markdownlint-cli2-formatter-default/-/markdownlint-cli2-formatter-default-0.0.5.tgz#b8fde4e127f9a9c0596e6d45eed352dd0aa0ff98"
integrity sha512-4XKTwQ5m1+Txo2kuQ3Jgpo/KmnG+X90dWt4acufg6HVGadTUG5hzHF/wssp9b5MBYOMCnZ9RMPaU//uHsszF8Q==
-markdownlint-cli2@0.17.1:
- version "0.17.1"
- resolved "https://registry.yarnpkg.com/markdownlint-cli2/-/markdownlint-cli2-0.17.1.tgz#4455105fe5d75821597779f7a442ce5c5ce0fede"
- integrity sha512-n1Im9lhKJJE12/u2N0GWBwPqeb0HGdylN8XpSFg9hbj35+QalY9Vi6mxwUQdG6wlSrrIq9ZDQ0Q85AQG9V2WOg==
+markdownlint-cli2@0.17.2:
+ version "0.17.2"
+ resolved "https://registry.yarnpkg.com/markdownlint-cli2/-/markdownlint-cli2-0.17.2.tgz#8d3dc2637fae42cea01fe3bf218501cbf33a7cd5"
+ integrity sha512-XH06ZOi8wCrtOSSj3p8y3yJzwgzYOSa7lglNyS3fP05JPRzRGyjauBb5UvlLUSCGysMmULS1moxdRHHudV+g/Q==
dependencies:
globby "14.0.2"
js-yaml "4.1.0"
jsonc-parser "3.3.1"
- markdownlint "0.37.3"
+ markdownlint "0.37.4"
markdownlint-cli2-formatter-default "0.0.5"
micromatch "4.0.8"
@@ -5873,10 +5873,10 @@ markdownlint-rule-search-replace@1.2.0:
dependencies:
markdownlint-rule-helpers "0.21.0"
-markdownlint@0.37.3:
- version "0.37.3"
- resolved "https://registry.yarnpkg.com/markdownlint/-/markdownlint-0.37.3.tgz#061ac5462e97fedc7a96aaac5c132885e4161bfd"
- integrity sha512-eoQqH0291YCCjd+Pe1PUQ9AmWthlVmS0XWgcionkZ8q34ceZyRI+pYvsWksXJJL8OBkWCPwp1h/pnXxrPFC4oA==
+markdownlint@0.37.4:
+ version "0.37.4"
+ resolved "https://registry.yarnpkg.com/markdownlint/-/markdownlint-0.37.4.tgz#dd58c4a13b798d4702438e5f7fd587a219f753f6"
+ integrity sha512-u00joA/syf3VhWh6/ybVFkib5Zpj2e5KB/cfCei8fkSRuums6nyisTWGqjTWIOFoFwuXoTBQQiqlB4qFKp8ncQ==
dependencies:
markdown-it "14.1.0"
micromark "4.0.1"