{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 34e04efef8a9b5f201cf","webpack:///./src/js-joda.js","webpack:///./src/Clock.js","webpack:///./src/assert.js","webpack:///./src/errors.js","webpack:///./src/Instant.js","webpack:///./src/LocalTime.js","webpack:///./src/MathUtil.js","webpack:///./src/LocalDateTime.js","webpack:///./src/LocalDate.js","webpack:///./src/chrono/IsoChronology.js","webpack:///./src/Enum.js","webpack:///./src/Month.js","webpack:///./src/temporal/ChronoField.js","webpack:///./src/temporal/ChronoUnit.js","webpack:///./src/Duration.js","webpack:///./src/temporal/TemporalAmount.js","webpack:///./src/Year.js","webpack:///./src/temporal/TemporalUnit.js","webpack:///./src/temporal/TemporalField.js","webpack:///./src/temporal/ValueRange.js","webpack:///./src/temporal/Temporal.js","webpack:///./src/temporal/TemporalAccessor.js","webpack:///./src/temporal/TemporalQueries.js","webpack:///./src/temporal/TemporalQuery.js","webpack:///./src/ZoneOffset.js","webpack:///./src/format/ResolverStyle.js","webpack:///./src/chrono/ChronoLocalDate.js","webpack:///./src/format/DateTimeFormatter.js","webpack:///./src/Period.js","webpack:///./src/format/ParsePosition.js","webpack:///./src/format/DateTimeBuilder.js","webpack:///./src/format/EnumMap.js","webpack:///./src/format/DateTimeParseContext.js","webpack:///./src/format/DateTimePrintContext.js","webpack:///./src/format/DateTimeFormatterBuilder.js","webpack:///./src/format/DecimalStyle.js","webpack:///./src/format/SignStyle.js","webpack:///./src/format/StringBuilder.js","webpack:///./src/DayOfWeek.js","webpack:///./src/chrono/ChronoLocalDateTime.js","webpack:///./src/temporal/TemporalAdjusters.js","webpack:///./src/temporal/TemporalAdjuster.js","webpack:///./src/_init.js"],"names":[],"mappings":"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","file":"js-joda.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"JSJoda\"] = factory();\n\telse\n\t\troot[\"JSJoda\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 34e04efef8a9b5f201cf\n **/","/**\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nexport { Clock } from './Clock';\nexport { DateTimeException, DateTimeParseException } from './errors';\nexport { DayOfWeek } from './DayOfWeek';\nexport { Duration } from './Duration';\nexport { Instant } from './Instant';\nexport { LocalDate } from './LocalDate';\nexport { LocalTime } from './LocalTime';\nexport { LocalDateTime } from './LocalDateTime';\n// export { MathUtil } from './MathUtil'; what for export MathUtil ?\nexport { Month } from './Month';\nexport { Period } from './Period';\nexport { Year } from './Year';\nexport { ZoneOffset } from './ZoneOffset';\n\nexport {ChronoField} from './temporal/ChronoField';\nexport {ChronoUnit} from './temporal/ChronoUnit';\nexport {TemporalAdjusters} from './temporal/TemporalAdjusters';\nexport {TemporalQueries} from './temporal/TemporalQueries';\n\nexport {DateTimeFormatter} from './format/DateTimeFormatter';\nexport {DateTimeFormatterBuilder} from './format/DateTimeFormatterBuilder';\nexport {ResolverStyle} from './format/ResolverStyle';\n\nimport './_init';\n\n\n/** WEBPACK FOOTER **\n ** ./src/js-joda.js\n **/","/**\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport {abstractMethodFail} from './assert';\nimport {Instant} from './Instant';\nimport {ZoneOffset} from './ZoneOffset';\n\n/**\n * A clock providing access to the current instant, date and time using a time-zone.\n *
\n * Instances of this class are used to find the current instant, which can be\n * interpreted using the stored time-zone to find the current date and time.\n * As such, a clock can be used instead of {@link System#currentTimeMillis()}\n * and {@link TimeZone#getDefault()}.\n *
\n * Use of a {@code Clock} is optional. All key date-time classes also have a\n * {@code now()} factory method that uses the system clock in the default time zone.\n * The primary purpose of this abstraction is to allow alternate clocks to be\n * plugged in as and when required. Applications use an object to obtain the\n * current time rather than a static method. This can simplify testing.\n *
\n * Best practice for applications is to pass a {@code Clock} into any method\n * that requires the current instant.\n *\n * This approach allows an alternate clock, such as {@link #fixed(Instant, ZoneId) fixed}\n * or {@link #offset(Clock, Duration) offset} to be used during testing.\n *
\n * The {@code system} factory methods provide clocks based on the best available\n * system clock This may use {@link System#currentTimeMillis()}, or a higher\n * resolution clock if one is available.\n */\n\n/**\n * The javascript Clock implementation differs from the openjdk.\n *\n * Javascript only provides the UTC millis of epoch and the ZoneOffset in minutes of the system default time.\n * Javascript do not provide the system default ZoneId.\n *\n * the system default ZoneId is only guessable by the ZoneOffset, like moment-timezone does by returning one ZoneId\n * with the same ZoneOffset.\n *\n * Therefore we are doing a shortcut here, by defining a SystemUTCClock and a SystemDefaultClock, the Clock itself\n * is returning the ZoneOffset and not the ZoneRules as in the jdk. We should change it, when introducing the iana\n * timezone database and implementing the timezone domains.\n *\n */\n\nexport class Clock {\n /**\n * Obtains a clock that returns the current instant using the\n * system clock, converting to date and time using the Date.getTime() UTC millis.\n *
\n * This clock, rather than {@link #systemDefaultZone()}, should be used when\n * you need the current instant without the date or time.\n *
\n * @return {Clock} a clock that uses the system clock in the UTC zone, not null\n */\n static systemUTC() {\n return new SystemUTCClock();\n }\n\n /**\n * Obtains a clock that returns the current instant using the best available\n * system clock, converting to date and time using the default time-zone.\n *
\n * This clock is based on the available system clock using the Date.getTime() UTC millis\n *
\n * Using this method hard codes a dependency to the default time-zone into your application.\n *\n * The {@link #systemUTC() UTC clock} should be used when you need the current instant\n * without the date or time.\n *
\n *\n * @return {Clock} a clock that uses the system clock in the default zone, not null\n * @see ZoneId#systemDefault()\n */\n static systemDefaultZone() {\n return new SystemDefaultClock();\n }\n\n /**\n * Obtains a clock that always returns the same instant.\n *
\n * This clock simply returns the specified instant.\n * As such, it is not a clock in the conventional sense.\n * The main use case for this is in testing, where the fixed clock ensures\n * tests are not dependent on the current clock.\n *\n * @param {Instant} fixedInstant the instant to use as the clock, not null\n * @param {ZoneOffset} zoneOffset the zoneOffset to use as zone Offset, not null\n * @return {Clock} a clock that always returns the same instant, not null\n */\n static fixed(fixedInstant, zoneOffset) {\n return new FixedClock(fixedInstant, zoneOffset);\n }\n\n /**\n * Gets the current millisecond instant of the clock.\n *
\n * This returns the millisecond-based instant, measured from 1970-01-01T00:00Z (UTC).\n * This is equivalent to the definition of {@link Date#getTime()}.\n *
\n * Most applications should avoid this method and use {@link Instant} to represent\n * an instant on the time-line rather than a raw millisecond value.\n * This method is provided to allow the use of the clock in high performance use cases\n * where the creation of an object would be unacceptable.\n *
\n * The default implementation currently calls {@link #instant}.\n *\n * @return the current millisecond instant from this clock, measured from\n * the Java epoch of 1970-01-01T00:00Z (UTC), not null\n */\n millis(){\n abstractMethodFail('millis');\n }\n\n /**\n * Gets the current instant of the clock.\n *
\n * This returns an instant representing the current instant as defined by the clock.\n *\n * @return {Instant} the current instant from this clock, not null\n */\n instant(){\n abstractMethodFail('instant');\n }\n\n /**\n * in opposite to the jdk implementation the Clock itself returns the offset, that is because\n * javascript provides only the UTC and the \"local\" (system default time zone.\n * it is not possible the get the system default ZoneId without guessing. If we would define ZoneRules, we had to\n * define something like a virtual, not standard ZoneId like \"SystemDefault\".\n * Until we to not have a tzdb, we leave this question open\n *\n * @return {number}\n */\n offset(){\n abstractMethodFail('offset');\n }\n}\n\nclass SystemClock extends Clock {\n millis() {\n return new Date().getTime();\n }\n\n instant() {\n return Instant.ofEpochMilli(this.millis());\n }\n\n offset() {\n return ZoneOffset.ofTotalSeconds(0);\n }\n}\n\n/**\n * Implementation of a clock that always returns the latest time from\n * {@link Date#getTime()}.\n */\nclass SystemUTCClock extends SystemClock{\n toString(){\n return 'SystemClock[UTC]';\n }\n}\n\n/**\n * Implementation of a clock that always returns the latest time from\n * sytem default Zone {@link Date#getTime()} and {@link Date#getTimeZoneOffset()}.\n */\nclass SystemDefaultClock extends SystemClock{\n offset(instant) {\n var offsetInMinutes = new Date().getTimezoneOffset(instant.toEpochMilli());\n return ZoneOffset.ofTotalMinutes(offsetInMinutes * -1);\n }\n\n toString(){\n return 'SystemClock[default]';\n }\n}\n\n/**\n * Implementation of a clock that always returns the same instant.\n * This is typically used for testing.\n */\nclass FixedClock extends Clock{\n constructor(fixedInstant, zoneOffset) {\n super();\n this._instant = fixedInstant;\n this._zoneOffset = zoneOffset;\n }\n\n instant() {\n return this._instant;\n }\n\n offset() {\n return this._zoneOffset;\n }\n\n toString(){\n return 'FixedClock[]';\n }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Clock.js\n **/","/**\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nimport {NullPointerException, IllegalArgumentException} from './errors';\n\nexport function assert(assertion, msg, error) {\n if(!assertion){\n if (error) {\n throw new error(msg);\n } else {\n throw new Error(msg);\n }\n }\n}\n\nexport function requireNonNull(value, parameterName) {\n if (value == null) {\n throw new NullPointerException(parameterName + ' must not be null');\n }\n return value;\n}\n\nexport function requireInstance(value, _class, parameterName) {\n if (!(value instanceof _class)) {\n throw new IllegalArgumentException(parameterName + ' must be an instance of ' + (_class.name ? _class.name : _class));\n }\n return value;\n}\n\nexport function abstractMethodFail(methodName){\n throw new TypeError('abstract mehod ' + methodName + 'is not implemented');\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/assert.js\n **/","/**\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nfunction createErrorType(name, init, superErrorClass = Error) {\n function E(message) {\n if (!Error.captureStackTrace){\n this.stack = (new Error()).stack;\n } else {\n Error.captureStackTrace(this, this.constructor);\n }\n this.message = message;\n init && init.apply(this, arguments);\n\n }\n E.prototype = new superErrorClass();\n E.prototype.name = name;\n E.prototype.constructor = E;\n return E;\n}\n\nexport var DateTimeException = createErrorType('DateTimeException', messageWithCause);\nexport var DateTimeParseException = createErrorType('DateTimeParseException', messageForDateTimeParseException);\nexport var UnsupportedTemporalTypeException = createErrorType('UnsupportedTemporalTypeException', null, DateTimeException);\nexport var ArithmeticException = createErrorType('ArithmeticException');\nexport var IllegalArgumentException = createErrorType('IllegalArgumentException');\nexport var IllegalStateException = createErrorType('IllegalStateException');\nexport var NullPointerException = createErrorType('NullPointerException');\n\nfunction messageWithCause(message, cause = null) {\n let msg = message || this.name;\n if (cause !== null && cause instanceof Error) {\n msg += '\\n-------\\nCaused by: ' + cause.stack + '\\n-------\\n';\n }\n this.message = msg;\n}\n\nfunction messageForDateTimeParseException(message, text = '', index = 0, cause = null) {\n let msg = message || this.name;\n msg += ': ' + text + ', at index: ' + index;\n if (cause !== null && cause instanceof Error) {\n msg += '\\n-------\\nCaused by: ' + cause.stack + '\\n-------\\n';\n }\n this.message = msg;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/errors.js\n **/","/**\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport {requireNonNull, requireInstance} from './assert';\nimport {DateTimeException, UnsupportedTemporalTypeException} from './errors';\n\nimport {Clock} from './Clock';\nimport {LocalTime} from './LocalTime';\nimport {MathUtil} from './MathUtil';\n\nimport {Temporal} from './temporal/Temporal';\nimport {ChronoField} from './temporal/ChronoField';\nimport {ChronoUnit} from './temporal/ChronoUnit';\nimport {TemporalQueries} from './temporal/TemporalQueries';\nimport {createTemporalQuery} from './temporal/TemporalQuery';\nimport {DateTimeFormatter} from './format/DateTimeFormatter';\n\nconst NANOS_PER_MILLI = 1000000;\n\n/**\n * An instantaneous point on the time-line.\n * \n * This class models a single instantaneous point on the time-line.\n * This might be used to record event time-stamps in the application.\n * \n * Time-scale\n * \n * The length of the solar day is the standard way that humans measure time.\n * This has traditionally been subdivided into 24 hours of 60 minutes of 60 seconds,\n * forming a 86400 second day.\n * \n * Modern timekeeping is based on atomic clocks which precisely define an SI second\n * relative to the transitions of a Caesium atom. The length of an SI second was defined\n * to be very close to the 86400th fraction of a day.\n * \n * Unfortunately, as the Earth rotates the length of the day varies.\n * In addition, over time the average length of the day is getting longer as the Earth slows.\n * As a result, the length of a solar day in 2012 is slightly longer than 86400 SI seconds.\n * The actual length of any given day and the amount by which the Earth is slowing\n * are not predictable and can only be determined by measurement.\n * The UT1 time-scale captures the accurate length of day, but is only available some\n * time after the day has completed.\n * \n * The UTC time-scale is a standard approach to bundle up all the additional fractions\n * of a second from UT1 into whole seconds, known as leap-seconds.\n * A leap-second may be added or removed depending on the Earth's rotational changes.\n * As such, UTC permits a day to have 86399 SI seconds or 86401 SI seconds where\n * necessary in order to keep the day aligned with the Sun.\n * \n * The modern UTC time-scale was introduced in 1972, introducing the concept of whole leap-seconds.\n * Between 1958 and 1972, the definition of UTC was complex, with minor sub-second leaps and\n * alterations to the length of the notional second. As of 2012, discussions are underway\n * to change the definition of UTC again, with the potential to remove leap seconds or\n * introduce other changes.\n * \n * Given the complexity of accurate timekeeping described above, this Java API defines\n * its own time-scale, the Java Time-Scale.\n * \n * The Java Time-Scale divides each calendar day into exactly 86400\n * subdivisions, known as seconds. These seconds may differ from the\n * SI second. It closely matches the de facto international civil time\n * scale, the definition of which changes from time to time.\n * \n * The Java Time-Scale has slightly different definitions for different\n * segments of the time-line, each based on the consensus international\n * time scale that is used as the basis for civil time. Whenever the\n * internationally-agreed time scale is modified or replaced, a new\n * segment of the Java Time-Scale must be defined for it. Each segment\n * must meet these requirements:\n *
\n * The seconds and nanoseconds are extracted from the specified milliseconds.\n *\n * @param {number} epochMilli - the number of milliseconds from 1970-01-01T00:00:00Z\n * @return {Instant} an instant, not null\n * @throws DateTimeException if the instant exceeds the maximum or minimum instant\n */\n static ofEpochMilli(epochMilli) {\n var secs = MathUtil.floorDiv(epochMilli, 1000);\n var mos = MathUtil.floorMod(epochMilli, 1000);\n return Instant._create(secs, mos * 1000000);\n }\n\n /**\n * Obtains an instance of {@code Instant} from a temporal object.\n *
\n * A {@code TemporalAccessor} represents some form of date and time information.\n * This factory converts the arbitrary temporal object to an instance of {@code Instant}.\n *
\n * The conversion extracts the {@link ChronoField#INSTANT_SECONDS INSTANT_SECONDS}\n * and {@link ChronoField#NANO_OF_SECOND NANO_OF_SECOND} fields.\n *
\n * This method matches the signature of the functional interface {@link TemporalQuery}\n * allowing it to be used as a query via method reference, {@code Instant::from}.\n *\n * @param {TemporalAccessor} temporal - the temporal object to convert, not null\n * @return {Instant} the instant, not null\n * @throws DateTimeException if unable to convert to an {@code Instant}\n */\n static from(temporal) {\n try {\n let instantSecs = temporal.getLong(ChronoField.INSTANT_SECONDS);\n let nanoOfSecond = temporal.get(ChronoField.NANO_OF_SECOND);\n return Instant.ofEpochSecond(instantSecs, nanoOfSecond);\n } catch (ex) {\n throw new DateTimeException('Unable to obtain Instant from TemporalAccessor: ' +\n temporal + ', type ' + typeof temporal, ex);\n }\n }\n\n /**\n * Obtains an instance of {@code Instant} from a text string such as\n * {@code 2007-12-03T10:15:30.000Z}.\n *
\n * The string must represent a valid instant in UTC and is parsed using\n * {@link DateTimeFormatter#ISO_INSTANT}.\n *\n * @param {string} text - the text to parse, not null\n * @return {Instant} the parsed instant, not null\n * @throws DateTimeParseException if the text cannot be parsed\n */\n static parse(text) {\n return DateTimeFormatter.ISO_INSTANT.parse(text, Instant.FROM);\n }\n\n /**\n *\n * @param {number} seconds\n * @param {number} nanoOfSecond\n * @returns {Instant}\n * @private\n */\n static _create(seconds, nanoOfSecond){\n if(seconds === 0 && nanoOfSecond === 0){\n return Instant.EPOCH;\n }\n return new Instant(seconds, nanoOfSecond);\n }\n\n /**\n *\n * @param {number} seconds\n * @param {number} nanoOfSecond\n * @private\n */\n static _validate(seconds, nanoOfSecond){\n if (seconds < Instant.MIN_SECONDS || seconds > Instant.MAX_SECONDS) {\n throw new DateTimeException('Instant exceeds minimum or maximum instant');\n }\n if (nanoOfSecond < 0 || nanoOfSecond > LocalTime.NANOS_PER_SECOND) {\n throw new DateTimeException('Instant exceeds minimum or maximum instant');\n }\n }\n\n /**\n * \n * @param {number} seconds\n * @param {number} nanoOfSecond\n * @private\n */\n constructor(seconds, nanoOfSecond){\n super();\n Instant._validate(seconds, nanoOfSecond);\n this._seconds = seconds;\n this._nanos = nanoOfSecond;\n }\n\n /**\n * Checks if the specified field is supported.\n *
\n * This checks if this instant can be queried for the specified field.\n * If false, then calling the {@link #range(TemporalField) range} and\n * {@link #get(TemporalField) get} methods will throw an exception.\n *
\n * If the field is a {@link ChronoField} then the query is implemented here.\n * The supported fields are:\n *
\n * If the field is not a {@code ChronoField}, then the result of this method\n * is obtained by invoking {@code TemporalField.isSupportedBy(TemporalAccessor)}\n * passing {@code this} as the argument.\n * Whether the field is supported is determined by the field.\n *\n * @param {TemporalField|TemporalUnit} fieldOrUnit - the field to check, null returns false\n * @return {boolean} true if the field is supported on this instant, false if not\n */\n isSupported(fieldOrUnit) {\n if (fieldOrUnit instanceof ChronoField) {\n return fieldOrUnit === ChronoField.INSTANT_SECONDS || fieldOrUnit === ChronoField.NANO_OF_SECOND || fieldOrUnit === ChronoField.MICRO_OF_SECOND || fieldOrUnit === ChronoField.MILLI_OF_SECOND;\n }\n if (fieldOrUnit instanceof ChronoUnit) {\n return fieldOrUnit.isTimeBased() || fieldOrUnit === ChronoUnit.DAYS;\n }\n return fieldOrUnit != null && fieldOrUnit.isSupportedBy(this);\n }\n\n /**\n * Gets the range of valid values for the specified field.\n *
\n * The range object expresses the minimum and maximum valid values for a field.\n * This instant is used to enhance the accuracy of the returned range.\n * If it is not possible to return the range, because the field is not supported\n * or for some other reason, an exception is thrown.\n *
\n * If the field is a {@link ChronoField} then the query is implemented here.\n * The {@link #isSupported(TemporalField) supported fields} will return\n * appropriate range instances.\n * All other {@code ChronoField} instances will throw a {@code DateTimeException}.\n *
\n * If the field is not a {@code ChronoField}, then the result of this method\n * is obtained by invoking {@code TemporalField.rangeRefinedBy(TemporalAccessor)}\n * passing {@code this} as the argument.\n * Whether the range can be obtained is determined by the field.\n *\n * @param {TemporalField} field - the field to query the range for, not null\n * @return {ValueRange} the range of valid values for the field, not null\n * @throws DateTimeException if the range for the field cannot be obtained\n */\n range(field) {\n return super.range(field);\n }\n\n /**\n * Gets the value of the specified field from this instant as an {@code int}.\n *
\n * This queries this instant for the value for the specified field.\n * The returned value will always be within the valid range of values for the field.\n * If it is not possible to return the value, because the field is not supported\n * or for some other reason, an exception is thrown.\n *
\n * If the field is a {@link ChronoField} then the query is implemented here.\n * The {@link #isSupported(TemporalField) supported fields} will return valid\n * values based on this date-time, except {@code INSTANT_SECONDS} which is too\n * large to fit in an {@code int} and throws a {@code DateTimeException}.\n * All other {@code ChronoField} instances will throw a {@code DateTimeException}.\n *
\n * If the field is not a {@code ChronoField}, then the result of this method\n * is obtained by invoking {@code TemporalField.getFrom(TemporalAccessor)}\n * passing {@code this} as the argument. Whether the value can be obtained,\n * and what the value represents, is determined by the field.\n *\n * @param {TemporalField} field - the field to get, not null\n * @return {number} the value for the field\n * @throws DateTimeException if a value for the field cannot be obtained\n * @throws ArithmeticException if numeric overflow occurs\n */\n get(field) {\n if (field instanceof ChronoField) {\n switch (field) {\n case ChronoField.NANO_OF_SECOND: return this._nanos;\n case ChronoField.MICRO_OF_SECOND: return MathUtil.intDiv(this._nanos, 1000);\n case ChronoField.MILLI_OF_SECOND: return MathUtil.intDiv(this._nanos, NANOS_PER_MILLI);\n case ChronoField.INSTANT_SECONDS:\n ChronoField.INSTANT_SECONDS.checkValidIntValue(this._seconds);\n }\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n return this.range(field).checkValidIntValue(field.getFrom(this), field);\n }\n\n /**\n * Gets the value of the specified field from this instant as a {@code long}.\n *
\n * This queries this instant for the value for the specified field.\n * If it is not possible to return the value, because the field is not supported\n * or for some other reason, an exception is thrown.\n *
\n * If the field is a {@link ChronoField} then the query is implemented here.\n * The {@link #isSupported(TemporalField) supported fields} will return valid\n * values based on this date-time.\n * All other {@code ChronoField} instances will throw a {@code DateTimeException}.\n *
\n * If the field is not a {@code ChronoField}, then the result of this method\n * is obtained by invoking {@code TemporalField.getFrom(TemporalAccessor)}\n * passing {@code this} as the argument. Whether the value can be obtained,\n * and what the value represents, is determined by the field.\n *\n * @param {TemporalField} field - the field to get, not null\n * @return {number} the value for the field\n * @throws DateTimeException if a value for the field cannot be obtained\n * @throws ArithmeticException if numeric overflow occurs\n */\n getLong(field) {\n if (field instanceof ChronoField) {\n switch (field) {\n case ChronoField.NANO_OF_SECOND: return this._nanos;\n case ChronoField.MICRO_OF_SECOND: return MathUtil.intDiv(this._nanos, 1000);\n case ChronoField.MILLI_OF_SECOND: return MathUtil.intDiv(this._nanos, NANOS_PER_MILLI);\n case ChronoField.INSTANT_SECONDS: return this._seconds;\n }\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n return field.getFrom(this);\n }\n\n /**\n * Gets the number of seconds from the Java epoch of 1970-01-01T00:00:00Z.\n *\n * The epoch second count is a simple incrementing count of seconds where\n * second 0 is 1970-01-01T00:00:00Z.\n * The nanosecond part of the day is returned by {@code getNanosOfSecond}.\n *\n * @return {number} the seconds from the epoch of 1970-01-01T00:00:00Z\n */\n epochSecond(){\n return this._seconds;\n }\n\n /**\n * Gets the number of nanoseconds, later along the time-line, from the start\n * of the second.\n *\n * The nanosecond-of-second value measures the total number of nanoseconds from\n * the second returned by {@code getEpochSecond}.\n *\n * @return {number} the nanoseconds within the second, always positive, never exceeds 999,999,999\n */\n nano(){\n return this._nanos;\n }\n\n //-------------------------------------------------------------------------\n /**\n * function overloading for {@link Instant.with}\n *\n * if called with 1 argument {@link Instant.withTemporalAdjuster} is called\n * otherwise {@link Instant.with2}\n *\n * @param {!(TemporalAdjuster|TemporalField)} adjusterOrField\n * @param {number} newValue\n * @returns {Instant}\n */\n with(adjusterOrField, newValue){\n if(arguments.length === 1){\n return this.withTemporalAdjuster(adjusterOrField);\n } else {\n return this.with2(adjusterOrField, newValue);\n }\n }\n /**\n * Returns an adjusted copy of this instant.\n *
\n * This returns a new {@code Instant}, based on this one, with the date adjusted.\n * The adjustment takes place using the specified adjuster strategy object.\n * Read the documentation of the adjuster to understand what adjustment will be made.\n *
\n * The result of this method is obtained by invoking the\n * {@link TemporalAdjuster#adjustInto(Temporal)} method on the\n * specified adjuster passing {@code this} as the argument.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {!TemporalAdjuster} adjuster - the adjuster to use, not null\n * @return {Instant} an {@code Instant} based on {@code this} with the adjustment made, not null\n * @throws DateTimeException if the adjustment cannot be made\n * @throws ArithmeticException if numeric overflow occurs\n */\n withTemporalAdjuster(adjuster) {\n requireNonNull(adjuster, 'adjuster');\n return adjuster.adjustInto(this);\n }\n\n /**\n * Returns a copy of this instant with the specified field set to a new value.\n *
\n * This returns a new {@code Instant}, based on this one, with the value\n * for the specified field changed.\n * If it is not possible to set the value, because the field is not supported or for\n * some other reason, an exception is thrown.\n *
\n * If the field is a {@link ChronoField} then the adjustment is implemented here.\n * The supported fields behave as follows:\n *
\n * In all cases, if the new value is outside the valid range of values for the field\n * then a {@code DateTimeException} will be thrown.\n *
\n * All other {@code ChronoField} instances will throw a {@code DateTimeException}.\n *
\n * If the field is not a {@code ChronoField}, then the result of this method\n * is obtained by invoking {@code TemporalField.adjustInto(Temporal, long)}\n * passing {@code this} as the argument. In this case, the field determines\n * whether and how to adjust the instant.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {TemporalField} field - the field to set in the result, not null\n * @param {number} newValue - the new value of the field in the result\n * @return {Instant} an {@code Instant} based on {@code this} with the specified field set, not null\n * @throws DateTimeException if the field cannot be set\n * @throws ArithmeticException if numeric overflow occurs\n */\n with2(field, newValue) {\n requireNonNull(field, 'field');\n if (field instanceof ChronoField) {\n field.checkValidValue(newValue);\n switch (field) {\n case ChronoField.MILLI_OF_SECOND: {\n let nval = newValue * NANOS_PER_MILLI;\n return (nval !== this._nanos? Instant._create(this._seconds, nval) : this);\n }\n case ChronoField.MICRO_OF_SECOND: {\n let nval = newValue * 1000;\n return (nval !== this._nanos? Instant._create(this._seconds, nval) : this);\n }\n case ChronoField.NANO_OF_SECOND: return (newValue !== this._nanos? Instant._create(this._seconds, newValue) : this);\n case ChronoField.INSTANT_SECONDS: return (newValue !== this._seconds ? Instant._create(newValue, this._nanos) : this);\n }\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n return field.adjustInto(this, newValue);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this {@code Instant} truncated to the specified unit.\n *
\n * Truncating the instant returns a copy of the original with fields\n * smaller than the specified unit set to zero.\n * The fields are calculated on the basis of using a UTC offset as seen\n * in {@code toString}.\n * For example, truncating with the {@link ChronoUnit#MINUTES MINUTES} unit will\n * round down to the nearest minute, setting the seconds and nanoseconds to zero.\n *
\n * The unit must have a {@linkplain TemporalUnit#getDuration() duration}\n * that divides into the length of a standard day without remainder.\n * This includes all supplied time units on {@link ChronoUnit} and\n * {@link ChronoUnit#DAYS DAYS}. Other units throw an exception.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {!TemporalUnit} unit - the unit to truncate to, not null\n * @return {Instant} an {@code Instant} based on this instant with the time truncated, not null\n * @throws DateTimeException if the unit is invalid for truncation\n */\n truncatedTo(unit) {\n requireNonNull(unit, 'unit');\n if (unit === ChronoUnit.NANOS) {\n return this;\n }\n var unitDur = unit.duration();\n if (unitDur.seconds() > LocalTime.SECONDS_PER_DAY) {\n throw new DateTimeException('Unit is too large to be used for truncation');\n }\n var dur = unitDur.toNanos();\n if (MathUtil.intMod(LocalTime.NANOS_PER_DAY, dur) !== 0) {\n throw new DateTimeException('Unit must divide into a standard day without remainder');\n }\n var nod = MathUtil.intMod(this._seconds, LocalTime.SECONDS_PER_DAY) * LocalTime.NANOS_PER_SECOND + this._nanos;\n var result = MathUtil.intDiv(nod, dur) * dur;\n return this.plusNanos(result - nod);\n }\n\n //-----------------------------------------------------------------------\n /**\n *\n * @param {TemporalAmount|number} amount\n * @param {TemporalUnit} unit - only required if first param is a TemporalAmount\n * @return {Instant}\n */\n plus(amount, unit){\n if(arguments.length === 1){\n return this.plus1(amount);\n } else {\n return this.plus2(amount, unit);\n }\n }\n\n /**\n * @param {!TemporalAmount} amount\n * @return {Instant}\n * @throws DateTimeException\n * @throws ArithmeticException\n */\n plus1(amount) {\n requireNonNull(amount, 'amount');\n return amount.addTo(this);\n }\n\n /**\n * @param {!number} amountToAdd\n * @param {!TemporalUnit} unit\n * @return {Instant}\n * @throws DateTimeException\n * @throws ArithmeticException\n */\n plus2(amountToAdd, unit) {\n if (unit instanceof ChronoUnit) {\n switch (unit) {\n case ChronoUnit.NANOS: return this.plusNanos(amountToAdd);\n case ChronoUnit.MICROS: return this._plus(MathUtil.intDiv(amountToAdd, 1000000), MathUtil.intMod(amountToAdd, 1000000) * 1000);\n case ChronoUnit.MILLIS: return this.plusMillis(amountToAdd);\n case ChronoUnit.SECONDS: return this.plusSeconds(amountToAdd);\n case ChronoUnit.MINUTES: return this.plusSeconds(MathUtil.safeMultiply(amountToAdd, LocalTime.SECONDS_PER_MINUTE));\n case ChronoUnit.HOURS: return this.plusSeconds(MathUtil.safeMultiply(amountToAdd, LocalTime.SECONDS_PER_HOUR));\n case ChronoUnit.HALF_DAYS: return this.plusSeconds(MathUtil.safeMultiply(amountToAdd, LocalTime.SECONDS_PER_DAY / 2));\n case ChronoUnit.DAYS: return this.plusSeconds(MathUtil.safeMultiply(amountToAdd, LocalTime.SECONDS_PER_DAY));\n }\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n }\n return unit.addTo(this, amountToAdd);\n }\n\n /**\n * Returns a copy of this instant with the specified duration in seconds added.\n * \n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} secondsToAdd the seconds to add, positive or negative\n * @return {Instant} an {@code Instant} based on this instant with the specified seconds added, not null\n * @throws DateTimeException if the result exceeds the maximum or minimum instant\n */\n plusSeconds(secondsToAdd) {\n return this._plus(secondsToAdd, 0);\n }\n\n /**\n * Returns a copy of this instant with the specified duration in milliseconds added.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} millisToAdd - the milliseconds to add, positive or negative\n * @return {Instant} an {@code Instant} based on this instant with the specified milliseconds added, not null\n * @throws DateTimeException if the result exceeds the maximum or minimum instant\n * @throws ArithmeticException if numeric overflow occurs\n */\n plusMillis(millisToAdd) {\n return this._plus(MathUtil.intDiv(millisToAdd, 1000), MathUtil.intMod(millisToAdd, 1000) * NANOS_PER_MILLI);\n }\n\n /**\n * Returns a copy of this instant with the specified duration in nanoseconds added.\n * \n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} nanosToAdd - the nanoseconds to add, positive or negative\n * @return {Instant} an {@code Instant} based on this instant with the specified nanoseconds added, not null\n * @throws DateTimeException if the result exceeds the maximum or minimum instant\n */\n plusNanos(nanosToAdd) {\n return this._plus(0, nanosToAdd);\n }\n\n /**\n * Returns a copy of this instant with the specified duration added.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} secondsToAdd - the seconds to add, positive or negative\n * @param {number} nanosToAdd - the nanos to add, positive or negative\n * @return {Instant} an {@code Instant} based on this instant with the specified seconds added, not null\n * @throws DateTimeException if the result exceeds the maximum or minimum instant\n */\n _plus(secondsToAdd, nanosToAdd) {\n if ((secondsToAdd | nanosToAdd) === 0) {\n return this;\n }\n var epochSec = this._seconds + secondsToAdd;\n epochSec = epochSec + MathUtil.intDiv(nanosToAdd, LocalTime.NANOS_PER_SECOND);\n var _nanosToAdd = nanosToAdd % LocalTime.NANOS_PER_SECOND;\n var nanoAdjustment = this._nanos + _nanosToAdd;\n return Instant.ofEpochSecond(epochSec, nanoAdjustment);\n }\n\n //-----------------------------------------------------------------------\n /**\n *\n * @param {TemporalAmount|number} amount\n * @param {TemporalUnit} unit - only required if first param is a TemporalAmount\n * @return {Instant}\n */\n minus(amount, unit){\n if(arguments.length === 1){\n return this.minus1(amount);\n } else {\n return this.minus2(amount, unit);\n }\n }\n\n /**\n * @param {!TemporalAmount} amount\n * @return {Instant}\n * @throws DateTimeException\n * @throws ArithmeticException\n */\n minus1(amount) {\n requireNonNull(amount, 'amount');\n return amount.subtractFrom(this);\n }\n\n /**\n * @param {!number} amountToSubtract\n * @param {!TemporalUnit} unit\n * @return {Instant}\n * @throws DateTimeException\n * @throws ArithmeticException\n */\n minus2(amountToSubtract, unit) {\n return this.plus2(-1 * amountToSubtract, unit);\n }\n\n /**\n * Returns a copy of this instant with the specified duration in seconds subtracted.\n *\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} secondsToSubtract - the seconds to subtract, positive or negative\n * @return {Instant} an {@code Instant} based on this instant with the specified seconds subtracted, not null\n * @throws DateTimeException if the result exceeds the maximum or minimum instant\n */\n minusSeconds(secondsToSubtract) {\n return this.plusSeconds(secondsToSubtract * -1);\n }\n\n /**\n * Returns a copy of this instant with the specified duration in milliseconds subtracted.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} millisToSubtract - the milliseconds to subtract, positive or negative\n * @return {Instant} an {@code Instant} based on this instant with the specified milliseconds subtracted, not null\n * @throws DateTimeException if the result exceeds the maximum or minimum instant\n * @throws ArithmeticException if numeric overflow occurs\n */\n minusMillis(millisToSubtract) {\n return this.plusMillis(-1 * millisToSubtract);\n }\n\n /**\n * Returns a copy of this instant with the specified duration in nanoseconds subtracted.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} nanosToSubtract the nanoseconds to subtract, positive or negative\n * @return {Instant} an {@code Instant} based on this instant with the specified nanoseconds subtracted, not null\n * @throws DateTimeException if the result exceeds the maximum or minimum instant\n * @throws ArithmeticException if numeric overflow occurs\n */\n minusNanos(nanosToSubtract) {\n return this.plusNanos(-1 * nanosToSubtract);\n }\n\n //-------------------------------------------------------------------------\n /**\n * Queries this instant using the specified query.\n *
\n * This queries this instant using the specified query strategy object.\n * The {@code TemporalQuery} object defines the logic to be used to\n * obtain the result. Read the documentation of the query to understand\n * what the result of this method will be.\n *
\n * The result of this method is obtained by invoking the\n * {@link TemporalQuery#queryFrom(TemporalAccessor)} method on the\n * specified query passing {@code this} as the argument.\n *\n * @param {!TemporalQuery} query - the query to invoke, not null\n * @return {*} the query result, null may be returned (defined by the query)\n * @throws DateTimeException if unable to query (defined by the query)\n * @throws ArithmeticException if numeric overflow occurs (defined by the query)\n */\n query(query) {\n requireNonNull(query, 'query');\n if (query === TemporalQueries.precision()) {\n return ChronoUnit.NANOS;\n }\n // inline TemporalAccessor.super.query(query) as an optimization\n if (query === TemporalQueries.localDate() || query === TemporalQueries.localTime() ||\n query === TemporalQueries.chronology() || query === TemporalQueries.zoneId() ||\n query === TemporalQueries.zone() || query === TemporalQueries.offset()) {\n return null;\n }\n return query.queryFrom(this);\n }\n\n /**\n * Adjusts the specified temporal object to have this instant.\n *
\n * This returns a temporal object of the same observable type as the input\n * with the instant changed to be the same as this.\n *
\n * The adjustment is equivalent to using {@link Temporal#with(TemporalField, long)}\n * twice, passing {@link ChronoField#INSTANT_SECONDS} and\n * {@link ChronoField#NANO_OF_SECOND} as the fields.\n *
\n * In most cases, it is clearer to reverse the calling pattern by using\n * {@link Temporal#with(TemporalAdjuster)}:\n *
\n * // these two lines are equivalent, but the second approach is recommended\n * temporal = thisInstant.adjustInto(temporal);\n * temporal = temporal.with(thisInstant);\n *\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {!Temporal} temporal - the target object to be adjusted, not null\n * @return {Temporal} the adjusted object, not null\n * @throws DateTimeException if unable to make the adjustment\n * @throws ArithmeticException if numeric overflow occurs\n */\n adjustInto(temporal) {\n requireNonNull(temporal, 'temporal');\n return temporal.with(ChronoField.INSTANT_SECONDS, this._seconds).with(ChronoField.NANO_OF_SECOND, this._nanos);\n }\n\n /**\n * Calculates the period between this instant and another instant in\n * terms of the specified unit.\n *
\n * This calculates the period between two instants in terms of a single unit.\n * The start and end points are {@code this} and the specified instant.\n * The result will be negative if the end is before the start.\n * The calculation returns a whole number, representing the number of\n * complete units between the two instants.\n * The {@code Temporal} passed to this method is converted to a\n * {@code Instant} using {@link #from(TemporalAccessor)}.\n * For example, the period in days between two dates can be calculated\n * using {@code startInstant.until(endInstant, SECONDS)}.\n *
\n * This method operates in association with {@link TemporalUnit#between}.\n * The result of this method is a {@code long} representing the amount of\n * the specified unit. By contrast, the result of {@code between} is an\n * object that can be used directly in addition/subtraction:\n *
\n * long period = start.until(end, SECONDS); // this method\n * dateTime.plus(SECONDS.between(start, end)); // use in plus/minus\n *\n *
\n * The calculation is implemented in this method for {@link ChronoUnit}.\n * The units {@code NANOS}, {@code MICROS}, {@code MILLIS}, {@code SECONDS},\n * {@code MINUTES}, {@code HOURS}, {@code HALF_DAYS} and {@code DAYS}\n * are supported. Other {@code ChronoUnit} values will throw an exception.\n *
\n * If the unit is not a {@code ChronoUnit}, then the result of this method\n * is obtained by invoking {@code TemporalUnit.between(Temporal, Temporal)}\n * passing {@code this} as the first argument and the input temporal as\n * the second argument.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Temporal} endExclusive - the end date, which is converted to an {@code Instant}, not null\n * @param {TemporalUnit} unit - the unit to measure the period in, not null\n * @return {number} the amount of the period between this date and the end date\n * @throws DateTimeException if the period cannot be calculated\n * @throws ArithmeticException if numeric overflow occurs\n */\n until(endExclusive, unit) {\n let end = Instant.from(endExclusive);\n if (unit instanceof ChronoUnit) {\n switch (unit) {\n case ChronoUnit.NANOS: return this._nanosUntil(end);\n case ChronoUnit.MICROS: return this._nanosUntil(end) / 1000;\n case ChronoUnit.MILLIS: return MathUtil.safeSubtract(end.toEpochMilli(), this.toEpochMilli());\n case ChronoUnit.SECONDS: return this._secondsUntil(end);\n case ChronoUnit.MINUTES: return MathUtil.intDiv(this._secondsUntil(end), LocalTime.SECONDS_PER_MINUTE);\n case ChronoUnit.HOURS: return MathUtil.intDiv(this._secondsUntil(end), LocalTime.SECONDS_PER_HOUR);\n case ChronoUnit.HALF_DAYS: return MathUtil.intDiv(this._secondsUntil(end), (12 * LocalTime.SECONDS_PER_HOUR));\n case ChronoUnit.DAYS: return MathUtil.intDiv(this._secondsUntil(end), LocalTime.SECONDS_PER_DAY);\n }\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n }\n return unit.between(this, end);\n }\n\n /**\n *\n * @param {Temporal} end\n * @returns {number}\n * @private\n */\n _nanosUntil(end) {\n let secsDiff = MathUtil.safeSubtract(end.epochSecond(), this.epochSecond());\n let totalNanos = MathUtil.safeMultiply(secsDiff, LocalTime.NANOS_PER_SECOND);\n return MathUtil.safeAdd(totalNanos, end.nano() - this.nano());\n }\n\n /**\n *\n * @param {Temporal} end\n * @returns {number}\n * @private\n */\n _secondsUntil(end) {\n let secsDiff = MathUtil.safeSubtract(end.epochSecond(), this.epochSecond());\n let nanosDiff = end.nano() - this.nano();\n if (secsDiff > 0 && nanosDiff < 0) {\n secsDiff--;\n } else if (secsDiff < 0 && nanosDiff > 0) {\n secsDiff++;\n }\n return secsDiff;\n }\n\n //-----------------------------------------------------------------------\n /**\n * Combines this instant with an offset to create an {@code OffsetDateTime}.\n *
\n * This returns an {@code OffsetDateTime} formed from this instant at the\n * specified offset from UTC/Greenwich. An exception will be thrown if the\n * instant is too large to fit into an offset date-time.\n *
\n * This method is equivalent to\n * {@link OffsetDateTime#ofInstant(Instant, ZoneId) OffsetDateTime.ofInstant(this, offset)}.\n *\n * @param {ZoneOffset} offset - the offset to combine with, not null\n * @return {OffsetDateTime} the offset date-time formed from this instant and the specified offset, not null\n * @throws DateTimeException if the result exceeds the supported range\n */\n //atOffset(offset) {\n // return OffsetDateTime.ofInstant(this, offset);\n //}\n\n /**\n * Combines this instant with a time-zone to create a {@code ZonedDateTime}.\n *
\n * This returns an {@code ZonedDateTime} formed from this instant at the\n * specified time-zone. An exception will be thrown if the instant is too\n * large to fit into a zoned date-time.\n *
\n * This method is equivalent to\n * {@link ZonedDateTime#ofInstant(Instant, ZoneId) ZonedDateTime.ofInstant(this, zone)}.\n *\n * @param {ZoneId} zone - the zone to combine with, not null\n * @return {ZonedDateTime} the zoned date-time formed from this instant and the specified zone, not null\n * @throws DateTimeException if the result exceeds the supported range\n */\n //atZone(zone) {\n // return ZonedDateTime.ofInstant(this, zone);\n //}\n\n //-----------------------------------------------------------------------\n /**\n * Converts this instant to the number of milliseconds from the epoch\n * of 1970-01-01T00:00:00Z.\n *
\n * If this instant represents a point on the time-line too far in the future\n * or past to fit in a {@code long} milliseconds, then an exception is thrown.\n *
\n * If this instant has greater than millisecond precision, then the conversion\n * will drop any excess precision information as though the amount in nanoseconds\n * was subject to integer division by one million.\n *\n * @return {number} the number of milliseconds since the epoch of 1970-01-01T00:00:00Z\n * @throws ArithmeticException if numeric overflow occurs\n */\n toEpochMilli() {\n var millis = MathUtil.safeMultiply(this._seconds, 1000);\n return millis + MathUtil.intDiv(this._nanos, NANOS_PER_MILLI);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Compares this instant to the specified instant.\n *
\n * The comparison is based on the time-line position of the instants.\n * It is \"consistent with equals\", as defined by {@link Comparable}.\n *\n * @param {Instant} otherInstant the other instant to compare to, not null\n * @return {number} the comparator value, negative if less, positive if greater\n * @throws NullPointerException if otherInstant is null\n */\n compareTo(otherInstant) {\n requireNonNull(otherInstant, 'otherInstant');\n requireInstance(otherInstant, Instant, 'otherInstant');\n var cmp = MathUtil.compareNumbers(this._seconds, otherInstant._seconds);\n if (cmp !== 0) {\n return cmp;\n }\n return this._nanos - otherInstant._nanos;\n }\n\n /**\n * Checks if this instant is after the specified instant.\n *
\n * The comparison is based on the time-line position of the instants.\n *\n * @param {Instant} otherInstant the other instant to compare to, not null\n * @return {boolean} true if this instant is after the specified instant\n * @throws NullPointerException if otherInstant is null\n */\n isAfter(otherInstant) {\n return this.compareTo(otherInstant) > 0;\n }\n\n /**\n * Checks if this instant is before the specified instant.\n *
\n * The comparison is based on the time-line position of the instants.\n *\n * @param {Instant} otherInstant the other instant to compare to, not null\n * @return {boolean} true if this instant is before the specified instant\n * @throws NullPointerException if otherInstant is null\n */\n isBefore(otherInstant) {\n return this.compareTo(otherInstant) < 0;\n }\n\n /**\n * Checks if this instant is equal to the specified instant.\n *
\n * The comparison is based on the time-line position of the instants.\n *\n * @param {*} otherInstant - the other instant, null/ undefined returns false\n * @return {boolean} true if the other instant is equal to this one\n */\n equals(otherInstant) {\n if(this === otherInstant){\n return true;\n }\n if(otherInstant instanceof Instant){\n return this.epochSecond() === otherInstant.epochSecond() &&\n this.nano() === otherInstant.nano();\n }\n return false;\n }\n\n /**\n * Returns a hash code for this instant.\n *\n * @return {number} a suitable hash code\n */\n hashCode() {\n return ((this._seconds ^ (this._seconds >>> 24))) + 51 * this._nanos;\n }\n\n /**\n * A string representation of this instant using ISO-8601 representation.\n *
\n * The format used is the same as {@link DateTimeFormatter#ISO_INSTANT}.\n *\n * @return {string} an ISO-8601 representation of this instant, not null\n */\n toString(){\n return DateTimeFormatter.ISO_INSTANT.format(this);\n }\n}\n\nexport function _init() {\n Instant.MIN_SECONDS = -31619119219200; // -1000000-01-01T00:00:00Z\n Instant.MAX_SECONDS = 31494816403199; // +1000000-12-31T23:59:59.999999999Z\n Instant.EPOCH = new Instant(0, 0);\n Instant.MIN = Instant.ofEpochSecond(Instant.MIN_SECONDS, 0);\n Instant.MAX = Instant.ofEpochSecond(Instant.MAX_SECONDS, 999999999);\n Instant.FROM = createTemporalQuery('Instant.FROM', (temporal) => {\n return Instant.from(temporal);\n });\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/Instant.js\n **/","/**\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\n\nimport {MathUtil} from './MathUtil';\nimport {assert, requireNonNull, requireInstance} from './assert';\nimport {DateTimeException, UnsupportedTemporalTypeException, IllegalArgumentException} from './errors';\n\nimport {Clock} from './Clock';\nimport {LocalDateTime} from './LocalDateTime';\n\nimport {DateTimeFormatter} from './format/DateTimeFormatter';\n\nimport {ChronoField} from './temporal/ChronoField';\nimport {ChronoUnit} from './temporal/ChronoUnit';\nimport {Temporal} from './temporal/Temporal';\nimport {TemporalQueries} from './temporal/TemporalQueries';\nimport {createTemporalQuery} from './temporal/TemporalQuery';\n\n/**\n * A time without time-zone in the ISO-8601 calendar system,\n * such as {@code 10:15:30}.\n *
\n * {@link LocalTime} is an immutable date-time object that represents a time,\n * often viewed as hour-minute-second.\n * Time is represented to nanosecond precision.\n * For example, the value '13:45.30.123456789' can be stored in a {@link LocalTime}.\n *
\n * It does not store or represent a date or time-zone.\n * Instead, it is a description of the local time as seen on a wall clock.\n * It cannot represent an instant on the time-line without additional information\n * such as an offset or time-zone.\n *
\n * The ISO-8601 calendar system is the modern civil calendar system used today\n * in most of the world. This API assumes that all calendar systems use the same\n * representation, this class, for time-of-day.\n *\n *
\n * This will query the specified clock to obtain the current time.\n * Using this method allows the use of an alternate clock for testing.\n * The alternate clock may be introduced using {@link Clock dependency injection}.\n *\n * @param {Clock} [clock=Clock.systemDefaultZone()] - the clock to use, not null\n * @return {LocalTime} the current time, not null\n */\n static now(clock = Clock.systemDefaultZone()) {\n requireNonNull(clock, 'clock');\n // inline OffsetTime factory to avoid creating object and InstantProvider checks\n var now = clock.instant(); // called once\n var offset = clock.offset(now);\n var secsOfDay = MathUtil.intMod(now.epochSecond(), LocalTime.SECONDS_PER_DAY);\n secsOfDay = MathUtil.intMod((secsOfDay + offset.totalSeconds()), LocalTime.SECONDS_PER_DAY);\n if (secsOfDay < 0) {\n secsOfDay += LocalTime.SECONDS_PER_DAY;\n }\n return LocalTime.ofSecondOfDay(secsOfDay, now.nano());\n }\n\n /**\n * Obtains an instance of {@link LocalTime} from an hour, minute, second and nanosecond.\n *
\n * This factory may return a cached value, but applications must not rely on this.\n *\n * @param {number} [hour=0] - the hour-of-day to represent, from 0 to 23\n * @param {number} [minute=0] - the minute-of-hour to represent, from 0 to 59\n * @param {number} [second=0] - the second-of-minute to represent, from 0 to 59\n * @param {number} [nanoOfSecond=0] - the nano-of-second to represent, from 0 to 999,999,999\n * @return {LocalTime} the local time, not null\n * @throws {DateTimeException} if the value of any field is out of range\n */\n static of(hour, minute, second, nanoOfSecond) {\n return new LocalTime(hour, minute, second, nanoOfSecond);\n }\n\n /**\n * Obtains an instance of {@link LocalTime} from a second-of-day value, with\n * associated nanos of second.\n *
\n * This factory may return a cached value, but applications must not rely on this.\n *\n * @param {number} [secondOfDay=0] - the second-of-day, from {@code 0} to {@code 24 * 60 * 60 - 1}\n * @param {number} [nanoOfSecond=0] - the nano-of-second, from 0 to 999,999,999\n * @return {LocalTime} the local time, not null\n * @throws {DateTimeException} if the either input value is invalid\n */\n static ofSecondOfDay(secondOfDay=0, nanoOfSecond=0) {\n ChronoField.SECOND_OF_DAY.checkValidValue(secondOfDay);\n ChronoField.NANO_OF_SECOND.checkValidValue(nanoOfSecond);\n var hours = MathUtil.intDiv(secondOfDay, LocalTime.SECONDS_PER_HOUR);\n secondOfDay -= hours * LocalTime.SECONDS_PER_HOUR;\n var minutes = MathUtil.intDiv(secondOfDay, LocalTime.SECONDS_PER_MINUTE);\n secondOfDay -= minutes * LocalTime.SECONDS_PER_MINUTE;\n return new LocalTime(hours, minutes, secondOfDay, nanoOfSecond);\n }\n \n /**\n * Obtains an instance of {@link LocalTime} from a nanos-of-day value.\n *
\n * This factory may return a cached value, but applications must not rely on this.\n *\n * @param {number} [nanoOfDay=0] - the nano of day, from {@code 0} to {@code 24 * 60 * 60 * 1,000,000,000 - 1}\n * @return {LocalTime} the local time, not null\n * @throws {DateTimeException} if the nanos of day value is invalid\n */\n static ofNanoOfDay(nanoOfDay=0) {\n ChronoField.NANO_OF_DAY.checkValidValue(nanoOfDay);\n var hours = MathUtil.intDiv(nanoOfDay, LocalTime.NANOS_PER_HOUR);\n nanoOfDay -= hours * LocalTime.NANOS_PER_HOUR;\n var minutes = MathUtil.intDiv(nanoOfDay, LocalTime.NANOS_PER_MINUTE);\n nanoOfDay -= minutes * LocalTime.NANOS_PER_MINUTE;\n var seconds = MathUtil.intDiv(nanoOfDay, LocalTime.NANOS_PER_SECOND);\n nanoOfDay -= seconds * LocalTime.NANOS_PER_SECOND;\n return new LocalTime(hours, minutes, seconds, nanoOfDay);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Obtains an instance of {@link LocalTime} from a temporal object.\n *
\n * A {@link TemporalAccessor} represents some form of date and time information.\n * This factory converts the arbitrary temporal object to an instance of {@link LocalTime}.\n *
\n * The conversion uses the {@link TemporalQueries#localTime()} query, which relies\n * on extracting the {@link ChronoField#NANO_OF_DAY NANO_OF_DAY} field.\n *
\n * This method matches the signature of the functional interface {@link TemporalQuery}\n * allowing it to be used in queries via method reference, {@link LocalTime::from}.\n *\n * @param {!TemporalAccessor} temporal - the temporal object to convert, not null\n * @return {LocalTime} the local time, not null\n * @throws {DateTimeException} if unable to convert to a {@link LocalTime}\n */\n static from(temporal) {\n requireNonNull(temporal, 'temporal');\n var time = temporal.query(TemporalQueries.localTime());\n if (time == null) {\n throw new DateTimeException(`Unable to obtain LocalTime TemporalAccessor: ${temporal}, type ${temporal.constructor != null ? temporal.constructor.name : ''}`);\n }\n return time;\n }\n\n /**\n * Obtains an instance of {@link LocalTime} from a text string using a specific formatter.\n *
\n * The text is parsed using the formatter, returning a time.\n *\n * @param {!String} text - the text to parse, not null\n * @param {!String} formatter - the formatter to use, not null\n * @return {LocalTime} the parsed local time, not null\n * @throws {DateTimeParseException} if the text cannot be parsed\n */\n static parse(text, formatter=DateTimeFormatter.ISO_LOCAL_TIME) {\n requireNonNull(formatter, 'formatter');\n return formatter.parse(text, LocalTime.FROM);\n }\n\n /**\n * Constructor, previously validated.\n *\n * @param {number} [hour=0] - the hour-of-day to represent, validated from 0 to 23\n * @param {number} [minute=0] - the minute-of-hour to represent, validated from 0 to 59\n * @param {number} [second=0] - the second-of-minute to represent, validated from 0 to 59\n * @param {number} [nanoOfSecond=0] - the nano-of-second to represent, validated from 0 to 999,999,999\n */\n constructor(hour=0, minute=0, second=0, nanoOfSecond=0) {\n super();\n LocalTime._validate(hour, minute, second, nanoOfSecond);\n if ((minute | second | nanoOfSecond) === 0) {\n return LocalTime.HOURS[hour];\n }\n this._hour = hour;\n this._minute = minute;\n this._second = second;\n this._nano = nanoOfSecond;\n }\n\n static _validate(hour, minute, second, nanoOfSecond){\n ChronoField.HOUR_OF_DAY.checkValidValue(hour);\n ChronoField.MINUTE_OF_HOUR.checkValidValue(minute);\n ChronoField.SECOND_OF_MINUTE.checkValidValue(second);\n ChronoField.NANO_OF_SECOND.checkValidValue(nanoOfSecond);\n \n }\n //-----------------------------------------------------------------------\n /**\n * Checks if the specified field is supported.\n *
\n * This checks if this time can be queried for the specified field.\n * If false, then calling the {@link #range(TemporalField) range} and\n * {@link #get(TemporalField) get} methods will throw an exception.\n *
\n * If the field is a {@link ChronoField} then the query is implemented here.\n * The supported fields are:\n *
\n * If the field is not a {@link ChronoField}, then the result of this method\n * is obtained by invoking {@link TemporalField.isSupportedBy}\n * passing this as the argument.\n * Whether the field is supported is determined by the field.\n *\n * @param {ChronoField|ChronoUnit} fieldOrUnit - the field to check, null returns false\n * @return {boolean} true if the field is supported on this time, false if not\n */\n isSupported(fieldOrUnit) {\n if (fieldOrUnit instanceof ChronoField) {\n return fieldOrUnit.isTimeBased();\n } else if (fieldOrUnit instanceof ChronoUnit) {\n return fieldOrUnit.isTimeBased();\n }\n return fieldOrUnit != null && fieldOrUnit.isSupportedBy(this);\n }\n\n /**\n * Gets the range of valid values for the specified field.\n *
\n * The range object expresses the minimum and maximum valid values for a field.\n * This time is used to enhance the accuracy of the returned range.\n * If it is not possible to return the range, because the field is not supported\n * or for some other reason, an exception is thrown.\n *
\n * If the field is a {@link ChronoField} then the query is implemented here.\n * The {@link #isSupported(TemporalField) supported fields} will return\n * appropriate range instances.\n * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n *
\n * If the field is not a {@link ChronoField}, then the result of this method\n * is obtained by invoking {@code TemporalField.rangeRefinedBy(TemporalAccessor)}\n * passing this as the argument.\n * Whether the range can be obtained is determined by the field.\n *\n * @param {ChronoField} field - the field to query the range for, not null\n * @return {ValueRange} the range of valid values for the field, not null\n * @throws {DateTimeException} if the range for the field cannot be obtained\n */\n range(field) {\n requireNonNull(field);\n return super.range(field);\n }\n\n /**\n * Gets the value of the specified field from this time as an {@code int}.\n *
\n * This queries this time for the value for the specified field.\n * The returned value will always be within the valid range of values for the field.\n * If it is not possible to return the value, because the field is not supported\n * or for some other reason, an exception is thrown.\n *
\n * If the field is a {@link ChronoField} then the query is implemented here.\n * The {@link #isSupported(TemporalField) supported fields} will return valid\n * values based on this time, except {@link ChronoField.NANO_OF_DAY} and {@link ChronoField.MICRO_OF_DAY}\n * which are too large to fit in an {@code int} and throw a {@link DateTimeException}.\n * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n *
\n * If the field is not a {@link ChronoField}, then the result of this method\n * is obtained by invoking {@link TemporalField.getFrom}\n * passing this as the argument. Whether the value can be obtained,\n * and what the value represents, is determined by the field.\n *\n * @param {ChronoField} field - the field to get, not null\n * @return {number} the value for the field\n * @throws {DateTimeException} if a value for the field cannot be obtained\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n get(field) {\n return this.getLong(field);\n }\n\n /**\n * Gets the value of the specified field from this time as a {@code long}.\n *
\n * This queries this time for the value for the specified field.\n * If it is not possible to return the value, because the field is not supported\n * or for some other reason, an exception is thrown.\n *
\n * If the field is a {@link ChronoField} then the query is implemented here.\n * The {@link #isSupported(TemporalField) supported fields} will return valid\n * values based on this time.\n * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n *
\n * If the field is not a {@link ChronoField}, then the result of this method\n * is obtained by invoking {@link TemporalField.from}\n * passing this as the argument. Whether the value can be obtained,\n * and what the value represents, is determined by the field.\n *\n * @param {ChronoField} field - the field to get, not null\n * @return {number} the value for the field\n * @throws {DateTimeException} if a value for the field cannot be obtained\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n getLong(field) {\n requireNonNull(field, 'field');\n if (field instanceof ChronoField) {\n return this._get0(field);\n }\n return field.getFrom(this);\n }\n\n /**\n * \n * @param {ChronoField} field\n * @returns {number}\n * @private\n */\n _get0(field) {\n switch (field) {\n case ChronoField.NANO_OF_SECOND: return this._nano;\n case ChronoField.NANO_OF_DAY: return this.toNanoOfDay();\n case ChronoField.MICRO_OF_SECOND: return MathUtil.intDiv(this._nano, 1000);\n case ChronoField.MICRO_OF_DAY: return MathUtil.intDiv(this.toNanoOfDay(), 1000);\n case ChronoField.MILLI_OF_SECOND: return MathUtil.intDiv(this._nano, 1000000);\n case ChronoField.MILLI_OF_DAY: return MathUtil.intDiv(this.toNanoOfDay(), 1000000);\n case ChronoField.SECOND_OF_MINUTE: return this._second;\n case ChronoField.SECOND_OF_DAY: return this.toSecondOfDay();\n case ChronoField.MINUTE_OF_HOUR: return this._minute;\n case ChronoField.MINUTE_OF_DAY: return this._hour * 60 + this._minute;\n case ChronoField.HOUR_OF_AMPM: return MathUtil.intMod(this._hour, 12);\n case ChronoField.CLOCK_HOUR_OF_AMPM: var ham = MathUtil.intMod(this._hour, 12); return (ham % 12 === 0 ? 12 : ham);\n case ChronoField.HOUR_OF_DAY: return this._hour;\n case ChronoField.CLOCK_HOUR_OF_DAY: return (this._hour === 0 ? 24 : this._hour);\n case ChronoField.AMPM_OF_DAY: return MathUtil.intDiv(this._hour, 12);\n }\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Gets the hour-of-day field.\n *\n * @return {number} the hour-of-day, from 0 to 23\n */\n hour() {\n return this._hour;\n }\n\n /**\n * Gets the minute-of-hour field.\n *\n * @return {number} the minute-of-hour, from 0 to 59\n */\n minute() {\n return this._minute;\n }\n\n /**\n * Gets the second-of-minute field.\n *\n * @return {number} the second-of-minute, from 0 to 59\n */\n second() {\n return this._second;\n }\n\n /**\n * Gets the nano-of-second field.\n *\n * @return {number} the nano-of-second, from 0 to 999,999,999\n */\n nano() {\n return this._nano;\n }\n\n /**\n * function overloading for {@link LocalDate.with}\n * \n * if called with 1 (or less) arguments {@link LocalTime.withTemporalAdjuster} is called.\n * Otherwise {@link LocalTime.with2} is called.\n *\n * @param {!(TemporalAdjuster|ChronoField)} adjusterOrField\n * @param {number} newValue - only required if called with 2 arguments\n * @return {LocalTime}\n */\n with(adjusterOrField, newValue){\n if(arguments.length < 2){\n return this.withTemporalAdjuster(adjusterOrField);\n } else {\n return this.with2(adjusterOrField, newValue);\n }\n }\n\n /**\n * Returns an adjusted copy of this time.\n *
\n * This returns a new {@link LocalTime}, based on this one, with the time adjusted.\n * The adjustment takes place using the specified adjuster strategy object.\n * Read the documentation of the adjuster to understand what adjustment will be made.\n *
\n * A simple adjuster might simply set the one of the fields, such as the hour field.\n * A more complex adjuster might set the time to the last hour of the day.\n *
\n * The result of this method is obtained by invoking the\n * {@link TemporalAdjuster.adjustInto} method on the\n * specified adjuster passing this as the argument.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {TemporalAdjuster} adjuster - the adjuster to use, not null\n * @return {LocalTime} a {@link LocalTime} based on this with the adjustment made, not null\n * @throws {DateTimeException} if the adjustment cannot be made\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n withTemporalAdjuster(adjuster) {\n requireNonNull(adjuster, 'adjuster');\n // optimizations\n if (adjuster instanceof LocalTime) {\n return adjuster;\n }\n assert(typeof adjuster.adjustInto === 'function', 'adjuster', IllegalArgumentException);\n return adjuster.adjustInto(this);\n }\n\n /**\n * Returns a copy of this time with the specified field set to a new value.\n *
\n * This returns a new {@link LocalTime}, based on this one, with the value\n * for the specified field changed.\n * This can be used to change any supported field, such as the hour, minute or second.\n * If it is not possible to set the value, because the field is not supported or for\n * some other reason, an exception is thrown.\n *
\n * If the field is a {@link ChronoField} then the adjustment is implemented here.\n * The supported fields behave as follows:\n *
\n * In all cases, if the new value is outside the valid range of values for the field\n * then a {@link DateTimeException} will be thrown.\n *
\n * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n *
\n * If the field is not a {@link ChronoField}, then the result of this method\n * is obtained by invoking {@link TemporalField.adjustInto}\n * passing this as the argument. In this case, the field determines\n * whether and how to adjust the instant.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {!ChronoField} field - the field to set in the result, not null\n * @param {number} newValue - the new value of the field in the result\n * @return {LocalTime} a {@link LocalTime} based on this with the specified field set, not null\n * @throws {DateTimeException} if the field cannot be set\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n with2(field, newValue) {\n requireNonNull(field, 'field');\n if (field instanceof ChronoField) {\n field.checkValidValue(newValue);\n switch (field) {\n case ChronoField.NANO_OF_SECOND: return this.withNano(newValue);\n case ChronoField.NANO_OF_DAY: return LocalTime.ofNanoOfDay(newValue);\n case ChronoField.MICRO_OF_SECOND: return this.withNano(newValue * 1000);\n case ChronoField.MICRO_OF_DAY: return LocalTime.ofNanoOfDay(newValue * 1000);\n case ChronoField.MILLI_OF_SECOND: return this.withNano( newValue * 1000000);\n case ChronoField.MILLI_OF_DAY: return LocalTime.ofNanoOfDay(newValue * 1000000);\n case ChronoField.SECOND_OF_MINUTE: return this.withSecond(newValue);\n case ChronoField.SECOND_OF_DAY: return this.plusSeconds(newValue - this.toSecondOfDay());\n case ChronoField.MINUTE_OF_HOUR: return this.withMinute(newValue);\n case ChronoField.MINUTE_OF_DAY: return this.plusMinutes(newValue - (this._hour * 60 + this._minute));\n case ChronoField.HOUR_OF_AMPM: return this.plusHours(newValue - MathUtil.intMod(this._hour, 12));\n case ChronoField.CLOCK_HOUR_OF_AMPM: return this.plusHours((newValue === 12 ? 0 : newValue) - MathUtil.intMod(this._hour, 12));\n case ChronoField.HOUR_OF_DAY: return this.withHour(newValue);\n case ChronoField.CLOCK_HOUR_OF_DAY: return this.withHour((newValue === 24 ? 0 : newValue));\n case ChronoField.AMPM_OF_DAY: return this.plusHours((newValue - MathUtil.intDiv(this._hour, 12)) * 12);\n }\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n return field.adjustInto(this, newValue);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this {@link LocalTime} with the hour-of-day value altered.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} [hour=0] - the hour-of-day to set in the result, from 0 to 23\n * @return {LocalTime} a {@link LocalTime} based on this time with the requested hour, not null\n * @throws {DateTimeException} if the hour value is invalid\n */\n withHour(hour=0) {\n if (this._hour === hour) {\n return this;\n }\n return new LocalTime(hour, this._minute, this._second, this._nano);\n }\n\n /**\n * Returns a copy of this {@link LocalTime} with the minute-of-hour value altered.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} [minute=0] - the minute-of-hour to set in the result, from 0 to 59\n * @return {LocalTime} a {@link LocalTime} based on this time with the requested minute, not null\n * @throws {DateTimeException} if the minute value is invalid\n */\n withMinute(minute=0) {\n if (this._minute === minute) {\n return this;\n }\n return new LocalTime(this._hour, minute, this._second, this._nano);\n }\n\n /**\n * Returns a copy of this {@link LocalTime} with the second-of-minute value altered.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} [second=0] - the second-of-minute to set in the result, from 0 to 59\n * @return {LocalTime} a {@link LocalTime} based on this time with the requested second, not null\n * @throws {DateTimeException} if the second value is invalid\n */\n withSecond(second=0) {\n if (this._second === second) {\n return this;\n }\n return new LocalTime(this._hour, this._minute, second, this._nano);\n }\n\n /**\n * Returns a copy of this {@link LocalTime} with the nano-of-second value altered.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} [nanoOfSecond=0] - the nano-of-second to set in the result, from 0 to 999,999,999\n * @return {LocalTime} a {@link LocalTime} based on this time with the requested nanosecond, not null\n * @throws {DateTimeException} if the nanos value is invalid\n */\n withNano(nanoOfSecond=0) {\n if (this._nano === nanoOfSecond) {\n return this;\n }\n return new LocalTime(this._hour, this._minute, this._second, nanoOfSecond);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this {@link LocalTime} with the time truncated.\n *
\n * Truncating the time returns a copy of the original time with fields\n * smaller than the specified unit set to zero.\n * For example, truncating with the {@link ChronoUnit.MINUTES} minutes unit\n * will set the second-of-minute and nano-of-second field to zero.\n *
\n * The unit must have a {@linkplain TemporalUnit#getDuration() duration}\n * that divides into the length of a standard day without remainder.\n * This includes all supplied time units on {@link ChronoUnit} and\n * {@link ChronoUnit.DAYS}. Other units throw an exception.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {!ChronoUnit} unit - the unit to truncate to, not null\n * @return {LocalTime} a {@link LocalTime} based on this time with the time truncated, not null\n * @throws {DateTimeException} if unable to truncate\n */\n truncatedTo(unit) {\n requireNonNull(unit, 'unit');\n if (unit === ChronoUnit.NANOS) {\n return this;\n }\n var unitDur = unit.duration();\n if (unitDur.seconds() > LocalTime.SECONDS_PER_DAY) {\n throw new DateTimeException('Unit is too large to be used for truncation');\n }\n var dur = unitDur.toNanos();\n if (MathUtil.intMod(LocalTime.NANOS_PER_DAY, dur) !== 0) {\n throw new DateTimeException('Unit must divide into a standard day without remainder');\n }\n var nod = this.toNanoOfDay();\n return LocalTime.ofNanoOfDay(MathUtil.intDiv(nod, dur) * dur);\n }\n\n //-----------------------------------------------------------------------\n\n /**\n * function overloading for {@link LocalDate.plus}\n *\n * if called with 1 (or less) arguments {@link LocalTime.plus1} is called.\n * Otherwise {@link LocalTime.plus2} is called.\n *\n * @param {!(TemporalAmount|number)} amount\n * @param {ChronoUnit} unit - only required if called with 2 arguments\n * @return {LocalTime}\n */\n plus(amount, unit){\n if(arguments.length < 2){\n return this.plus1(amount);\n } else {\n return this.plus2(amount, unit);\n }\n }\n\n /**\n * Returns a copy of this date with the specified period added.\n *
\n * This method returns a new time based on this time with the specified period added.\n * The amount is typically {@link Period} but may be any other type implementing\n * the {@link TemporalAmount} interface.\n * The calculation is delegated to the specified adjuster, which typically calls\n * back to {@link #plus(long, TemporalUnit)}.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {TemporalAmount} amount - the amount to add, not null\n * @return {LocalTime} a {@link LocalTime} based on this time with the addition made, not null\n * @throws {DateTimeException} if the addition cannot be made\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n plus1(amount) {\n requireNonNull(amount, 'amount');\n return amount.addTo(this);\n }\n\n /**\n * Returns a copy of this time with the specified period added.\n *
\n * This method returns a new time based on this time with the specified period added.\n * This can be used to add any period that is defined by a unit, for example to add hours, minutes or seconds.\n * The unit is responsible for the details of the calculation, including the resolution\n * of any edge cases in the calculation.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} amountToAdd - the amount of the unit to add to the result, may be negative\n * @param {ChronoUnit} unit - the unit of the period to add, not null\n * @return {LocalTime} a {@link LocalTime} based on this time with the specified period added, not null\n * @throws {DateTimeException} if the unit cannot be added to this type\n */\n plus2(amountToAdd, unit) {\n requireNonNull(unit, 'unit');\n if (unit instanceof ChronoUnit) {\n switch (unit) {\n case ChronoUnit.NANOS: return this.plusNanos(amountToAdd);\n case ChronoUnit.MICROS: return this.plusNanos(MathUtil.intMod(amountToAdd, LocalTime.MICROS_PER_DAY) * 1000);\n case ChronoUnit.MILLIS: return this.plusNanos(MathUtil.intMod(amountToAdd, LocalTime.MILLIS_PER_DAY) * 1000000);\n case ChronoUnit.SECONDS: return this.plusSeconds(amountToAdd);\n case ChronoUnit.MINUTES: return this.plusMinutes(amountToAdd);\n case ChronoUnit.HOURS: return this.plusHours(amountToAdd);\n case ChronoUnit.HALF_DAYS: return this.plusHours(MathUtil.intMod(amountToAdd, 2) * 12);\n }\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n }\n return unit.addTo(this, amountToAdd);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this {@link LocalTime} with the specified period in hours added.\n *
\n * This adds the specified number of hours to this time, returning a new time.\n * The calculation wraps around midnight.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} hoursToAdd - the hours to add, may be negative\n * @return {LocalTime} a {@link LocalTime} based on this time with the hours added, not null\n */\n plusHours(hoursToAdd) {\n if (hoursToAdd === 0) {\n return this;\n }\n\n var newHour = MathUtil.intMod(MathUtil.intMod(hoursToAdd, LocalTime.HOURS_PER_DAY) + this._hour + LocalTime.HOURS_PER_DAY, LocalTime.HOURS_PER_DAY);\n return new LocalTime(newHour, this._minute, this._second, this._nano);\n }\n\n /**\n * Returns a copy of this {@link LocalTime} with the specified period in minutes added.\n *
\n * This adds the specified number of minutes to this time, returning a new time.\n * The calculation wraps around midnight.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} minutesToAdd - the minutes to add, may be negative\n * @return {LocalTime} a {@link LocalTime} based on this time with the minutes added, not null\n */\n plusMinutes(minutesToAdd) {\n if (minutesToAdd === 0) {\n return this;\n }\n var mofd = this._hour * LocalTime.MINUTES_PER_HOUR + this._minute;\n var newMofd = MathUtil.intMod(MathUtil.intMod(minutesToAdd, LocalTime.MINUTES_PER_DAY) + mofd + LocalTime.MINUTES_PER_DAY, LocalTime.MINUTES_PER_DAY);\n if (mofd === newMofd) {\n return this;\n }\n var newHour = MathUtil.intDiv(newMofd, LocalTime.MINUTES_PER_HOUR);\n var newMinute = MathUtil.intMod(newMofd, LocalTime.MINUTES_PER_HOUR);\n return new LocalTime(newHour, newMinute, this._second, this._nano);\n }\n\n /**\n * Returns a copy of this {@link LocalTime} with the specified period in seconds added.\n *
\n * This adds the specified number of seconds to this time, returning a new time.\n * The calculation wraps around midnight.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} secondstoAdd - the seconds to add, may be negative\n * @return {LocalTime} a {@link LocalTime} based on this time with the seconds added, not null\n */\n plusSeconds(secondstoAdd) {\n if (secondstoAdd === 0) {\n return this;\n }\n var sofd = this._hour * LocalTime.SECONDS_PER_HOUR +\n this._minute * LocalTime.SECONDS_PER_MINUTE + this._second;\n var newSofd = MathUtil.intMod((MathUtil.intMod(secondstoAdd, LocalTime.SECONDS_PER_DAY) + sofd + LocalTime.SECONDS_PER_DAY), LocalTime.SECONDS_PER_DAY);\n if (sofd === newSofd) {\n return this;\n }\n var newHour = MathUtil.intDiv(newSofd, LocalTime.SECONDS_PER_HOUR);\n var newMinute = MathUtil.intMod(MathUtil.intDiv(newSofd, LocalTime.SECONDS_PER_MINUTE), LocalTime.MINUTES_PER_HOUR);\n var newSecond = MathUtil.intMod(newSofd, LocalTime.SECONDS_PER_MINUTE);\n return new LocalTime(newHour, newMinute, newSecond, this._nano);\n }\n\n /**\n * Returns a copy of this {@link LocalTime} with the specified period in nanoseconds added.\n *
\n * This adds the specified number of nanoseconds to this time, returning a new time.\n * The calculation wraps around midnight.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} nanosToAdd - the nanos to add, may be negative\n * @return {LocalTime} a {@link LocalTime} based on this time with the nanoseconds added, not null\n */\n plusNanos(nanosToAdd) {\n if (nanosToAdd === 0) {\n return this;\n }\n var nofd = this.toNanoOfDay();\n var newNofd = MathUtil.intMod((MathUtil.intMod(nanosToAdd, LocalTime.NANOS_PER_DAY) + nofd + LocalTime.NANOS_PER_DAY), LocalTime.NANOS_PER_DAY);\n if (nofd === newNofd) {\n return this;\n }\n var newHour = MathUtil.intDiv(newNofd, LocalTime.NANOS_PER_HOUR);\n var newMinute = MathUtil.intMod(MathUtil.intDiv(newNofd, LocalTime.NANOS_PER_MINUTE), LocalTime.MINUTES_PER_HOUR);\n var newSecond = MathUtil.intMod(MathUtil.intDiv(newNofd, LocalTime.NANOS_PER_SECOND), LocalTime.SECONDS_PER_MINUTE);\n var newNano = MathUtil.intMod(newNofd, LocalTime.NANOS_PER_SECOND);\n return new LocalTime(newHour, newMinute, newSecond, newNano);\n }\n\n //-----------------------------------------------------------------------\n /**\n * function overloading for {@link LocalDate.minus}\n *\n * if called with 1 (or less) arguments {@link LocalTime.minus1} is called.\n * Otherwise {@link LocalTime.minus2} is called.\n *\n * @param {!(TemporalAmount|number)} amount\n * @param {ChronoUnit} unit - only required if called with 2 arguments\n * @return {LocalTime}\n */\n minus(amount, unit){\n if(arguments.length < 2){\n return this.minus1(amount);\n } else {\n return this.minus2(amount, unit);\n }\n }\n\n /**\n * Returns a copy of this time with the specified period subtracted.\n *
\n * This method returns a new time based on this time with the specified period subtracted.\n * The amount is typically {@link Period} but may be any other type implementing\n * the {@link TemporalAmount} interface.\n * The calculation is delegated to the specified adjuster, which typically calls\n * back to {@link #minus(long, TemporalUnit)}.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {TemporalAmount} amount - the amount to subtract, not null\n * @return {LocalTime} a {@link LocalTime} based on this time with the subtraction made, not null\n * @throws {DateTimeException} if the subtraction cannot be made\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n\n minus1(amount) {\n requireNonNull(amount, 'amount');\n return amount.subtractFrom(this);\n }\n\n /**\n * Returns a copy of this time with the specified period subtracted.\n *
\n * This method returns a new time based on this time with the specified period subtracted.\n * This can be used to subtract any period that is defined by a unit, for example to subtract hours, minutes or seconds.\n * The unit is responsible for the details of the calculation, including the resolution\n * of any edge cases in the calculation.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} amountToSubtract - the amount of the unit to subtract from the result, may be negative\n * @param {ChronoUnit} unit - the unit of the period to subtract, not null\n * @return {LocalTime} a {@link LocalTime} based on this time with the specified period subtracted, not null\n * @throws {DateTimeException} if the unit cannot be added to this type\n */\n minus2(amountToSubtract, unit) {\n requireNonNull(unit, 'unit');\n return this.plus2(-1 * amountToSubtract, unit);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this {@link LocalTime} with the specified period in hours subtracted.\n *
\n * This subtracts the specified number of hours from this time, returning a new time.\n * The calculation wraps around midnight.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} hoursToSubtract - the hours to subtract, may be negative\n * @return {LocalTime} a {@link LocalTime} based on this time with the hours subtracted, not null\n */\n minusHours(hoursToSubtract) {\n return this.plusHours(-1 * MathUtil.intMod(hoursToSubtract, LocalTime.HOURS_PER_DAY));\n }\n\n /**\n * Returns a copy of this {@link LocalTime} with the specified period in minutes subtracted.\n *
\n * This subtracts the specified number of minutes from this time, returning a new time.\n * The calculation wraps around midnight.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} minutesToSubtract - the minutes to subtract, may be negative\n * @return {LocalTime} a {@link LocalTime} based on this time with the minutes subtracted, not null\n */\n minusMinutes(minutesToSubtract) {\n return this.plusMinutes(-1 * MathUtil.intMod(minutesToSubtract, LocalTime.MINUTES_PER_DAY));\n }\n\n /**\n * Returns a copy of this {@link LocalTime} with the specified period in seconds subtracted.\n *
\n * This subtracts the specified number of seconds from this time, returning a new time.\n * The calculation wraps around midnight.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} secondsToSubtract - the seconds to subtract, may be negative\n * @return {LocalTime} a {@link LocalTime} based on this time with the seconds subtracted, not null\n */\n minusSeconds(secondsToSubtract) {\n return this.plusSeconds(-1 * MathUtil.intMod(secondsToSubtract, LocalTime.SECONDS_PER_DAY));\n }\n\n /**\n * Returns a copy of this {@link LocalTime} with the specified period in nanoseconds subtracted.\n *
\n * This subtracts the specified number of nanoseconds from this time, returning a new time.\n * The calculation wraps around midnight.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} nanosToSubtract - the nanos to subtract, may be negative\n * @return {LocalTime} a {@link LocalTime} based on this time with the nanoseconds subtracted, not null\n */\n minusNanos(nanosToSubtract) {\n return this.plusNanos(-1 * MathUtil.intMod(nanosToSubtract, LocalTime.NANOS_PER_DAY));\n }\n\n //-----------------------------------------------------------------------\n /**\n * Queries this time using the specified query.\n *
\n * This queries this time using the specified query strategy object.\n * The {@link TemporalQuery} object defines the logic to be used to\n * obtain the result. Read the documentation of the query to understand\n * what the result of this method will be.\n *
\n * The result of this method is obtained by invoking the\n * {@link TemporalQuery#queryFrom(TemporalAccessor)} method on the\n * specified query passing this as the argument.\n *\n * @param {TemporalQuery} query - the query to invoke, not null\n * @return {*} the query result, null may be returned (defined by the query)\n * @throws {DateTimeException} if unable to query (defined by the query)\n * @throws {ArithmeticException} if numeric overflow occurs (defined by the query)\n */\n query(query) {\n requireNonNull(query, 'query');\n if (query === TemporalQueries.precision()) {\n return ChronoUnit.NANOS;\n } else if (query === TemporalQueries.localTime()) {\n return this;\n }\n // inline TemporalAccessor.super.query(query) as an optimization\n if (query === TemporalQueries.chronology() || query === TemporalQueries.zoneId() ||\n query === TemporalQueries.zone() || query === TemporalQueries.offset() ||\n query === TemporalQueries.localDate()) {\n return null;\n }\n return query.queryFrom(this);\n }\n\n /**\n * Adjusts the specified temporal object to have the same time as this object.\n *
\n * This returns a temporal object of the same observable type as the input\n * with the time changed to be the same as this.\n *
\n * The adjustment is equivalent to using {@link Temporal.with}\n * passing {@link ChronoField.NANO_OF_DAY} as the field.\n *
\n * In most cases, it is clearer to reverse the calling pattern by using\n * {@link Temporal.with}:\n *
\n * // these two lines are equivalent, but the second approach is recommended\n * temporal = thisLocalTime.adjustInto(temporal);\n * temporal = temporal.with(thisLocalTime);\n *\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {TemporalAdjuster} temporal - the target object to be adjusted, not null\n * @return {Temporal} the adjusted object, not null\n * @throws {DateTimeException} if unable to make the adjustment\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n adjustInto(temporal) {\n return temporal.with(LocalTime.NANO_OF_DAY, this.toNanoOfDay());\n }\n\n /**\n * Calculates the period between this time and another time in\n * terms of the specified unit.\n *
\n * This calculates the period between two times in terms of a single unit.\n * The start and end points are this and the specified time.\n * The result will be negative if the end is before the start.\n * The {@link Temporal} passed to this method must be a {@link LocalTime}.\n * For example, the period in hours between two times can be calculated\n * using {@code startTime.until(endTime, HOURS)}.\n *
\n * The calculation returns a whole number, representing the number of\n * complete units between the two times.\n * For example, the period in hours between 11:30 and 13:29 will only\n * be one hour as it is one minute short of two hours.\n *
\n * This method operates in association with {@link TemporalUnit.between}.\n * The result of this method is a {@code long} representing the amount of\n * the specified unit. By contrast, the result of {@code between} is an\n * object that can be used directly in addition/subtraction:\n *
\n * long period = start.until(end, HOURS); // this method\n * dateTime.plus(HOURS.between(start, end)); // use in plus/minus\n *\n *
\n * The calculation is implemented in this method for {@link ChronoUnit}.\n * The units {@link ChronoUnit.NANOS}, {@link ChronoUnit.MICROS}, {@link ChronoUnit.MILLIS}, {@link ChronoUnit.SECONDS},\n * {@link ChronoUnit.MINUTES}, {@link ChronoUnit.HOURS} and {@link ChronoUnit.HALF_DAYS} are supported.\n * Other {@link ChronoUnit} values will throw an exception.\n *
\n * If the unit is not a {@link ChronoUnit}, then the result of this method\n * is obtained by invoking {@link TemporalUnit.between}\n * passing this as the first argument and the input temporal as\n * the second argument.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {TemporalAccessor} endExclusive - the end time, which is converted to a {@link LocalTime}, not null\n * @param {TemporalUnit} unit - the unit to measure the period in, not null\n * @return {number} the amount of the period between this time and the end time\n * @throws {DateTimeException} if the period cannot be calculated\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n until(endExclusive, unit) {\n var end = LocalTime.from(endExclusive);\n if (unit instanceof ChronoUnit) {\n var nanosUntil = end.toNanoOfDay() - this.toNanoOfDay(); // no overflow\n switch (unit) {\n case ChronoUnit.NANOS: return nanosUntil;\n case ChronoUnit.MICROS: return MathUtil.intDiv(nanosUntil, 1000);\n case ChronoUnit.MILLIS: return MathUtil.intDiv(nanosUntil, 1000000);\n case ChronoUnit.SECONDS: return MathUtil.intDiv(nanosUntil, LocalTime.NANOS_PER_SECOND);\n case ChronoUnit.MINUTES: return MathUtil.intDiv(nanosUntil, LocalTime.NANOS_PER_MINUTE);\n case ChronoUnit.HOURS: return MathUtil.intDiv(nanosUntil, LocalTime.NANOS_PER_HOUR);\n case ChronoUnit.HALF_DAYS: return MathUtil.intDiv(nanosUntil, (12 * LocalTime.NANOS_PER_HOUR));\n }\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n }\n return unit.between(this, end);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Combines this time with a date to create a {@link LocalDateTime}.\n *
\n * This returns a {@link LocalDateTime} formed from this time at the specified date.\n * All possible combinations of date and time are valid.\n *\n * @param {LocalDate} date - the date to combine with, not null\n * @return {LocalDateTime} the local date-time formed from this time and the specified date, not null\n */\n atDate(date) {\n return LocalDateTime.of(date, this);\n }\n\n /**\n * Combines this time with an offset to create an {@link OffsetTime}.\n *
\n * This returns an {@link OffsetTime} formed from this time at the specified offset.\n * All possible combinations of time and offset are valid.\n *\n * @param {OffsetTime} offset - the offset to combine with, not null\n * @return {OffsetTime} the offset time formed from this time and the specified offset, not null\n */\n/*\n atOffset(offset) {\n return OffsetTime.of(this, offset);\n }\n*/\n\n //-----------------------------------------------------------------------\n /**\n * Extracts the time as seconds of day,\n * from {@code 0} to {@code 24 * 60 * 60 - 1}.\n *\n * @return {number} the second-of-day equivalent to this time\n */\n toSecondOfDay() {\n var total = this._hour * LocalTime.SECONDS_PER_HOUR;\n total += this._minute * LocalTime.SECONDS_PER_MINUTE;\n total += this._second;\n return total;\n }\n\n /**\n * Extracts the time as nanos of day,\n * from {@code 0} to {@code 24 * 60 * 60 * 1,000,000,000 - 1}.\n *\n * @return {number} the nano of day equivalent to this time\n */\n toNanoOfDay() {\n var total = this._hour * LocalTime.NANOS_PER_HOUR;\n total += this._minute * LocalTime.NANOS_PER_MINUTE;\n total += this._second * LocalTime.NANOS_PER_SECOND;\n total += this._nano;\n return total;\n }\n\n //-----------------------------------------------------------------------\n /**\n * Compares this {@link LocalTime} to another time.\n *
\n * The comparison is based on the time-line position of the local times within a day.\n * It is 'consistent with equals', as defined by {@link Comparable}.\n *\n * @param {LocalTime} other - the other time to compare to, not null\n * @return {number} the comparator value, negative if less, positive if greater\n * @throws {NullPointerException} if {@code other} is null\n */\n compareTo(other) {\n requireNonNull(other, 'other');\n requireInstance(other, LocalTime, 'other');\n var cmp = MathUtil.compareNumbers(this._hour, other._hour);\n if (cmp === 0) {\n cmp = MathUtil.compareNumbers(this._minute, other._minute);\n if (cmp === 0) {\n cmp = MathUtil.compareNumbers(this._second, other._second);\n if (cmp === 0) {\n cmp = MathUtil.compareNumbers(this._nano, other._nano);\n }\n }\n }\n return cmp;\n }\n\n /**\n * Checks if this {@link LocalTime} is after the specified time.\n *
\n * The comparison is based on the time-line position of the time within a day.\n *\n * @param {LocalTime} other - the other time to compare to, not null\n * @return {boolean}true if this is after the specified time\n * @throws {NullPointerException} if {@code other} is null\n */\n isAfter(other) {\n return this.compareTo(other) > 0;\n }\n\n /**\n * Checks if this {@link LocalTime} is before the specified time.\n *
\n * The comparison is based on the time-line position of the time within a day.\n *\n * @param {LocalTime} other - the other time to compare to, not null\n * @return {boolean}true if this point is before the specified time\n * @throws {NullPointerException} if {@code other} is null\n */\n isBefore(other) {\n return this.compareTo(other) < 0;\n }\n\n //-----------------------------------------------------------------------\n /**\n * Checks if this time is equal to another time.\n *
\n * The comparison is based on the time-line position of the time within a day.\n *
\n * Only objects of type {@link LocalTime} are compared, other types return false.\n * To compare the date of two {@link TemporalAccessor} instances, use\n * {@link ChronoField#NANO_OF_DAY} as a comparator.\n *\n * @param {*} other - the object to check, null returns false\n * @return {boolean}true if this is equal to the other time\n */\n equals(other) {\n if (this === other) {\n return true;\n }\n if (other instanceof LocalTime) {\n return this._hour === other._hour && this._minute === other._minute &&\n this._second === other._second && this._nano === other._nano;\n }\n return false;\n }\n\n /**\n * A hash code for this time.\n *\n * @return {number} a suitable hash code\n */\n hashCode() {\n var nod = this.toNanoOfDay();\n return (nod ^ (nod >>> 24));\n }\n\n //-----------------------------------------------------------------------\n /**\n * Outputs this time as a {@link String}, such as {@code 10:15}.\n *
\n * The output will be one of the following ISO-8601 formats:\n *
\n * The format used will be the shortest that outputs the full value of\n * the time where the omitted parts are implied to be zero.\n *\n * @return {string} a string representation of this time, not null\n */\n toString() {\n var buf = '';\n var hourValue = this._hour;\n var minuteValue = this._minute;\n var secondValue = this._second;\n var nanoValue = this._nano;\n buf += hourValue < 10 ? '0' : '';\n buf += hourValue;\n buf += minuteValue < 10 ? ':0' : ':';\n buf += minuteValue;\n if (secondValue > 0 || nanoValue > 0) {\n buf += secondValue < 10 ? ':0' : ':';\n buf += secondValue;\n if (nanoValue > 0) {\n buf += '.';\n if(MathUtil.intMod(nanoValue, 1000000) === 0) {\n buf += ('' + (MathUtil.intDiv(nanoValue, 1000000) + 1000)).substring(1);\n } else if (MathUtil.intMod(nanoValue, 1000) === 0) {\n buf += ('' + (MathUtil.intDiv(nanoValue, 1000) + 1000000)).substring(1);\n } else {\n buf += ('' + (nanoValue + 1000000000)).substring(1);\n }\n }\n }\n return buf;\n }\n\n /**\n * Outputs this time as a {@link String} using the formatter.\n *
\n * This time will be passed to the formatter\n * {@link DateTimeFormatter#format(TemporalAccessor) print method}.\n *\n * @param {DateTineFormatter} formatter - the formatter to use, not null\n * @return {string} the formatted time string, not null\n * @throws {DateTimeException} if an error occurs during printing\n */\n format(formatter) {\n requireNonNull(formatter, 'formatter');\n return formatter.format(this);\n }\n}\n\nexport function _init() {\n /**\n * Constants for the local time of each hour.\n */\n LocalTime.HOURS = [];\n for (let i = 0; i < 24; i++) {\n LocalTime.HOURS[i] = makeLocalTimeConst(i);\n }\n\n function makeLocalTimeConst(hour = 0, minute = 0, second = 0, nano = 0) {\n var localTime = Object.create(LocalTime.prototype);\n Temporal.call(localTime);\n localTime._hour = hour;\n localTime._minute = minute;\n localTime._second = second;\n localTime._nano = nano;\n return localTime;\n }\n\n /**\n * The minimum supported {@link LocalTime}, '00:00'.\n * This is the time of midnight at the start of the day.\n */\n LocalTime.MIN = LocalTime.HOURS[0];\n /**\n * The maximum supported {@link LocalTime}, '23:59:59.999999999'.\n * This is the time just before midnight at the end of the day.\n */\n LocalTime.MAX = makeLocalTimeConst(23, 59, 59, 999999999);\n /**\n * The time of midnight at the start of the day, '00:00'.\n */\n LocalTime.MIDNIGHT = LocalTime.HOURS[0];\n /**\n * The time of noon in the middle of the day, '12:00'.\n */\n LocalTime.NOON = LocalTime.HOURS[12];\n\n LocalTime.FROM = createTemporalQuery('LocalTime.FROM', (temporal) => {\n return LocalTime.from(temporal);\n });\n\n /**\n * Hours per day.\n */\n LocalTime.HOURS_PER_DAY = 24;\n /**\n * Minutes per hour.\n */\n LocalTime.MINUTES_PER_HOUR = 60;\n /**\n * Minutes per day.\n */\n LocalTime.MINUTES_PER_DAY = LocalTime.MINUTES_PER_HOUR * LocalTime.HOURS_PER_DAY;\n /**\n * Seconds per minute.\n */\n LocalTime.SECONDS_PER_MINUTE = 60;\n /**\n * Seconds per hour.\n */\n LocalTime.SECONDS_PER_HOUR = LocalTime.SECONDS_PER_MINUTE * LocalTime.MINUTES_PER_HOUR;\n /**\n * Seconds per day.\n */\n LocalTime.SECONDS_PER_DAY = LocalTime.SECONDS_PER_HOUR * LocalTime.HOURS_PER_DAY;\n /**\n * Milliseconds per day.\n */\n LocalTime.MILLIS_PER_DAY = LocalTime.SECONDS_PER_DAY * 1000;\n /**\n * Microseconds per day.\n */\n LocalTime.MICROS_PER_DAY = LocalTime.SECONDS_PER_DAY * 1000000;\n /**\n * Nanos per second.\n */\n LocalTime.NANOS_PER_SECOND = 1000000000;\n /**\n * Nanos per minute.\n */\n LocalTime.NANOS_PER_MINUTE = LocalTime.NANOS_PER_SECOND * LocalTime.SECONDS_PER_MINUTE;\n /**\n * Nanos per hour.\n */\n LocalTime.NANOS_PER_HOUR = LocalTime.NANOS_PER_MINUTE * LocalTime.MINUTES_PER_HOUR;\n /**\n * Nanos per day.\n */\n LocalTime.NANOS_PER_DAY = LocalTime.NANOS_PER_HOUR * LocalTime.HOURS_PER_DAY;\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/LocalTime.js\n **/","/**\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nimport {ArithmeticException} from './errors';\n\nexport const MAX_SAFE_INTEGER = 9007199254740991;\nexport const MIN_SAFE_INTEGER = -9007199254740991;\n\n/**\n * Math helper with static function for integer operations\n */\nexport class MathUtil {\n /**\n * \n * @param {number} x\n * @param {number} y\n * @returns {number}\n */\n static intDiv(x, y) {\n var r = x/y;\n if(r === 0){\n return 0;\n } else if(r < 0){\n r = Math.ceil(r);\n } else {\n r = Math.floor(r);\n }\n return MathUtil.safeZero(r);\n }\n\n /**\n * \n * @param {number} x\n * @param {number} y\n * @returns {number}\n */\n static intMod(x, y) {\n var r = x - MathUtil.intDiv(x, y) * y;\n if(r === 0){\n return 0;\n } else if(r < 0){\n r = Math.ceil(r);\n } else {\n r = Math.floor(r);\n }\n return MathUtil.safeZero(r);\n }\n\n /**\n * \n * @param {number} x\n * @param {number} y\n * @returns {number}\n */\n static floorDiv(x, y){\n var r = Math.floor(x / y);\n return MathUtil.safeZero(r);\n }\n\n /**\n * \n * @param {number} x\n * @param {number} y\n * @returns {number}\n */\n static floorMod(x, y){\n var r = x - MathUtil.floorDiv(x, y) * y;\n return MathUtil.safeZero(r);\n }\n\n /**\n * \n * @param {number} x\n * @param {number} y\n * @returns {number}\n */\n static safeAdd(x, y) {\n MathUtil.verifyInt(x);\n MathUtil.verifyInt(y);\n if (x === 0) {\n return MathUtil.safeZero(y);\n }\n if (y === 0) {\n return MathUtil.safeZero(x);\n }\n var r = MathUtil.safeToInt(x + y);\n if (r === x || r === y) {\n throw new ArithmeticException('Invalid addition beyond MAX_SAFE_INTEGER!');\n }\n return r;\n }\n\n /**\n * \n * @param {number} x\n * @param {number} y\n * @returns {number}\n */\n static safeSubtract(x, y) {\n MathUtil.verifyInt(x);\n MathUtil.verifyInt(y);\n if (x === 0 && y === 0) {\n return 0;\n } else if (x === 0) {\n return MathUtil.safeZero(-1 * y);\n } else if (y === 0) {\n return MathUtil.safeZero(x);\n }\n return MathUtil.safeToInt(x - y);\n }\n\n /**\n * \n * @param {number} x\n * @param {number} y\n * @returns {number}\n */\n static safeMultiply(x, y) {\n MathUtil.verifyInt(x);\n MathUtil.verifyInt(y);\n if (x === 1) {\n return MathUtil.safeZero(y);\n }\n if (y === 1) {\n return MathUtil.safeZero(x);\n }\n if (x === 0 || y === 0) {\n return 0;\n }\n let r = MathUtil.safeToInt(x * y);\n if (r / y !== x || (x === MIN_SAFE_INTEGER && y === -1) || (y === MIN_SAFE_INTEGER && x === -1)) {\n throw new ArithmeticException('Multiplication overflows: ' + x + ' * ' + y);\n }\n return r;\n }\n\n /**\n * \n * @param {number} value\n * @returns {number}\n */\n static parseInt(value) {\n var r = parseInt(value);\n return MathUtil.safeToInt(r);\n }\n\n /**\n * \n * @param {number} value\n * @returns {number}\n */\n static safeToInt(value) {\n MathUtil.verifyInt(value);\n return MathUtil.safeZero(value);\n }\n\n /**\n * \n * @param {number} value\n */\n static verifyInt(value){\n if (value == null) {\n throw new ArithmeticException(`Invalid value: '${value}', using null or undefined as argument`);\n }\n if (isNaN(value)) {\n throw new ArithmeticException('Invalid int value, using NaN as argument');\n }\n if (value > MAX_SAFE_INTEGER || value < MIN_SAFE_INTEGER) {\n throw new ArithmeticException('Calculation overflows an int: ' + value);\n }\n }\n\n /**\n * \n * @param {number} value\n * @returns {number}\n */\n static safeZero(value){\n return value === 0 ? 0 : value;\n }\n\n /**\n * Compares two Numbers.\n *\n * @param {number} a the first value\n * @param {number} b the second value\n * @return {number} the result\n */\n static compareNumbers(a, b) {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n }\n\n}\n\nMathUtil.MAX_SAFE_INTEGER = MAX_SAFE_INTEGER;\nMathUtil.MIN_SAFE_INTEGER = MIN_SAFE_INTEGER;\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/MathUtil.js\n **/","/*\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport {MathUtil} from './MathUtil';\nimport {assert, requireNonNull, requireInstance} from './assert';\nimport {DateTimeException, UnsupportedTemporalTypeException, IllegalArgumentException} from './errors';\n\nimport {Clock} from './Clock';\nimport {LocalDate} from './LocalDate';\nimport {LocalTime} from './LocalTime';\n\n\nimport {DateTimeFormatter} from './format/DateTimeFormatter';\nimport {ChronoField} from './temporal/ChronoField';\nimport {ChronoUnit} from './temporal/ChronoUnit';\nimport {TemporalQueries} from './temporal/TemporalQueries';\nimport {createTemporalQuery} from './temporal/TemporalQuery';\n\nimport {ChronoLocalDateTime} from './chrono/ChronoLocalDateTime';\n\n/**\n * A date-time without a time-zone in the ISO-8601 calendar system,\n * such as {@code 2007-12-03T10:15:30}.\n *
\n * {@link LocalDateTime} is an immutable date-time object that represents a date-time,\n * often viewed as year-month-day-hour-minute-second. Other date and time fields,\n * such as day-of-year, day-of-week and week-of-year, can also be accessed.\n * Time is represented to nanosecond precision.\n * For example, the value '2nd October 2007 at 13:45.30.123456789' can be\n * stored in a {@link LocalDateTime}.\n *
\n * This class does not store or represent a time-zone.\n * Instead, it is a description of the date, as used for birthdays, combined with\n * the local time as seen on a wall clock.\n * It cannot represent an instant on the time-line without additional information\n * such as an offset or time-zone.\n *
\n * The ISO-8601 calendar system is the modern civil calendar system used today\n * in most of the world. It is equivalent to the proleptic Gregorian calendar\n * system, in which today's rules for leap years are applied for all time.\n * For most applications written today, the ISO-8601 rules are entirely suitable.\n * However, any application that makes use of historical dates, and requires them\n * to be accurate will find the ISO-8601 approach unsuitable.\n *\n *
\n * This will query the {@link Clock#system(ZoneId) system clock} to obtain the current date-time.\n * Specifying the time-zone avoids dependence on the default time-zone.\n *
\n * Using this method will prevent the ability to use an alternate clock for testing\n * because the clock is hard-coded.\n *\n * @param {ZoneId} zone - the zone ID to use, not null\n * @return {LocalDateTime} the current date-time using the system clock, not null\n */\n /*\n static now(zone) {\n return now(Clock.system(zone));\n }\n */\n\n /**\n * Obtains the current date-time from the specified clock.\n *
\n * This will query the specified clock to obtain the current date-time.\n * Using this method allows the use of an alternate clock for testing.\n * The alternate clock may be introduced using {@link Clock dependency injection}.\n *\n * @param {Clock} clock - the clock to use, defaults to Clock.systemDefaultZone()\n * @return {LocalDateTime} the current date-time, not null\n */\n static now(clock = Clock.systemDefaultZone()) {\n requireNonNull(clock, 'clock');\n var now = clock.instant(); // called once\n var offset = clock.offset(now); // getZone().getRules().getOffset(now);\n return LocalDateTime.ofEpochSecond(now.epochSecond(), now.nano(), offset);\n }\n\n //-----------------------------------------------------------------------\n /**\n * function overloading for {@link LocalDateTime.of}\n * \n * if called with 2 arguments and first argument is an instance of LocalDate and second is an\n * instance of LocalTime, then {@link LocalDateTime.ofDateAndTime} is executed.\n * \n * Otherwise {@link LocalDateTime.ofNumbers} is executed.\n * \n * @returns {LocalDateTime}\n */\n static of(){\n if (arguments.length === 2 && (arguments[0] instanceof LocalDate || arguments[1] instanceof LocalTime)){\n return LocalDateTime.ofDateAndTime.apply(this, arguments);\n } else {\n return LocalDateTime.ofNumbers.apply(this, arguments);\n }\n }\n /**\n * Obtains an instance of {@link LocalDateTime} from year, month,\n * day, hour, minute, second and nanosecond.\n *
\n * The day must be valid for the year and month, otherwise an exception will be thrown.\n *\n * @param {number} [year=0] - the year to represent, from MIN_YEAR to MAX_YEAR\n * @param {number} [month=0] - the month-of-year to represent, from 1 to 12 or from a Month\n * @param {number} [dayOfMonth=0] - the day-of-month to represent, from 1 to 31\n * @param {number} [hour=0] - the hour-of-day to represent, from 0 to 23\n * @param {number} [minute=0] - the minute-of-hour to represent, from 0 to 59\n * @param {number} [second=0] - the second-of-minute to represent, from 0 to 59\n * @param {number} [nanoOfSecond=0] - the nano-of-second to represent, from 0 to 999,999,999\n * @return {LocalDateTime} the local date-time, not null\n * @throws {DateTimeException} if the value of any field is out of range\n * @throws {DateTimeException} if the day-of-month is invalid for the month-year\n */\n static ofNumbers(year=0, month=0, dayOfMonth=0, hour=0, minute=0, second=0, nanoOfSecond=0) {\n var date = LocalDate.of(year, month, dayOfMonth);\n var time = LocalTime.of(hour, minute, second, nanoOfSecond);\n return new LocalDateTime(date, time);\n }\n\n /**\n * Obtains an instance of {@link LocalDateTime} from a date and time.\n *\n * @param {!LocalDate} date - the local date, not null\n * @param {!LocalTime} time - the local time, not null\n * @return {LocalDateTime} the local date-time, not null\n */\n static ofDateAndTime(date, time) {\n requireNonNull(date, 'date');\n requireNonNull(time, 'time');\n return new LocalDateTime(date, time);\n }\n\n //-------------------------------------------------------------------------\n /**\n * Obtains an instance of {@link LocalDateTime} from an {@link Instant} and zone ID.\n *
\n * This creates a local date-time based on the specified instant.\n * First, the offset from UTC/Greenwich is obtained using the zone ID and instant,\n * which is simple as there is only one valid offset for each instant.\n * Then, the instant and offset are used to calculate the local date-time.\n *\n * @param {Instant} instant the instant to create the date-time from, not null\n * @param {ZoneId} zone the time-zone, which may be an offset, not null\n * @return {LocalDateTime} the local date-time, not null\n * @throws {DateTimeException} if the result exceeds the supported range\n */\n static ofInstant(instant, zone) {\n requireNonNull(instant, 'instant');\n requireNonNull(zone, 'zone');\n var rules = zone.getRules();\n var offset = rules.getOffset(instant);\n return LocalDateTime.ofEpochSecond(instant.epochSecond(), instant.nano(), offset);\n }\n\n /**\n * Obtains an instance of {@link LocalDateTime} using seconds from the\n * epoch of 1970-01-01T00:00:00Z.\n *
\n * This allows the {@link ChronoField.INSTANT_SECONDS} epoch-second field\n * to be converted to a local date-time. This is primarily intended for\n * low-level conversions rather than general application usage.\n *\n * @param {number} epochSecond - the number of seconds from the epoch of 1970-01-01T00:00:00Z\n * @param {number} nanoOfSecond - the nanosecond within the second, from 0 to 999,999,999\n * @param {ZoneOffset} offset - the zone offset, not null\n * @return {LocalDateTime} the local date-time, not null\n * @throws {DateTimeException} if the result exceeds the supported range\n */\n static ofEpochSecond(epochSecond=0, nanoOfSecond=0, offset) {\n requireNonNull(offset, 'offset');\n var localSecond = epochSecond + offset.totalSeconds(); // overflow caught later\n var localEpochDay = MathUtil.floorDiv(localSecond, LocalTime.SECONDS_PER_DAY);\n var secsOfDay = MathUtil.floorMod(localSecond, LocalTime.SECONDS_PER_DAY);\n var date = LocalDate.ofEpochDay(localEpochDay);\n var time = LocalTime.ofSecondOfDay(secsOfDay, nanoOfSecond);\n return new LocalDateTime(date, time);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Obtains an instance of {@link LocalDateTime} from a temporal object.\n *
\n * A {@link TemporalAccessor} represents some form of date and time information.\n * This factory converts the arbitrary temporal object to an instance of {@link LocalDateTime}.\n *
\n * The conversion extracts and combines {@link LocalDate} and {@link LocalTime}.\n *
\n * This method matches the signature of the functional interface {@link TemporalQuery}\n * allowing it to be used as a query via method reference, {@code LocalDateTime::from}.\n *\n * @param {!TemporalAccessor} temporal - the temporal object to convert, not null\n * @return {LocalDateTime} {LocalDateTime} the local date-time, not null\n * @throws {DateTimeException} if unable to convert to a {@link LocalDateTime}\n */\n static from(temporal) {\n requireNonNull(temporal, 'temporal');\n if (temporal instanceof LocalDateTime) {\n return temporal;\n //} else if (temporal instanceof ZonedDateTime) {\n // return temporal.toLocalDateTime();\n }\n try {\n var date = LocalDate.from(temporal);\n var time = LocalTime.from(temporal);\n return new LocalDateTime(date, time);\n } catch (ex) {\n throw new DateTimeException(`Unable to obtain LocalDateTime TemporalAccessor: ${temporal}, type ${temporal.constructor != null ? temporal.constructor.name : ''}`);\n }\n }\n\n //-----------------------------------------------------------------------\n /**\n * Obtains an instance of {@link LocalDateTime} from a text string using a specific formatter.\n *
\n * The text is parsed using the formatter, returning a date-time.\n *\n * @param {!string} text - the text to parse, not null\n * @param {DateTimeFormatter} [formatter=DateTimeFormatter.ISO_LOCAL_DATE_TIME] - the formatter to use,\n * defaults to DateTimeFormatter.ISO_LOCAL_DATE_TIME\n * @return {LocalDateTime} the parsed local date-time, not null\n * @throws {DateTimeParseException} if the text cannot be parsed\n */\n static parse(text, formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME) {\n return formatter.parse(text, LocalDateTime.FROM);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Constructor.\n *\n * @param {LocalDate} date - the date part of the date-time, validated not null\n * @param {LocalTime} time - the time part of the date-time, validated not null\n */\n constructor(date, time) {\n super();\n requireInstance(date, LocalDate, 'date');\n requireInstance(time, LocalTime, 'time');\n this._date = date;\n this._time = time;\n }\n\n /**\n * Returns a copy of this date-time with the new date and time, checking\n * to see if a new object is in fact required.\n *\n * @param {LocalDate} newDate - the date of the new date-time, not null\n * @param {LocalTime} newTime - the time of the new date-time, not null\n * @return {LocalDateTime} the date-time, not null\n */\n _withDateTime(newDate, newTime) {\n if (this._date === newDate && this._time === newTime) {\n return this;\n }\n return new LocalDateTime(newDate, newTime);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Checks if the specified field is supported.\n *
\n * This checks if this date-time can be queried for the specified field.\n * If false, then calling the {@link LocalDateTime.range} range and\n * {@link LocalDateTime.get} get methods will throw an exception.\n *
\n * If the field is a {@link ChronoField} then the query is implemented here.\n * The supported fields are:\n *
\n * If the field is not a {@link ChronoField}, then the result of this method\n * is obtained by invoking {@link TemporalField.isSupportedBy}\n * passing {@link this} as the argument.\n * Whether the field is supported is determined by the field.\n *\n * @param {TemporalField|TemporalUnit} fieldOrUnit - the field to check, null returns false\n * @return {boolean} true if the field is supported on this date-time, false if not\n */\n isSupported(fieldOrUnit) {\n if (fieldOrUnit instanceof ChronoField) {\n return fieldOrUnit.isDateBased() || fieldOrUnit.isTimeBased();\n } else if (fieldOrUnit instanceof ChronoUnit) {\n return fieldOrUnit.isDateBased() || fieldOrUnit.isTimeBased();\n }\n return fieldOrUnit != null && fieldOrUnit.isSupportedBy(this);\n }\n\n /**\n * Gets the range of valid values for the specified field.\n *
\n * The range object expresses the minimum and maximum valid values for a field.\n * This date-time is used to enhance the accuracy of the returned range.\n * If it is not possible to return the range, because the field is not supported\n * or for some other reason, an exception is thrown.\n *
\n * If the field is a {@link ChronoField} then the query is implemented here.\n * The {@link #isSupported(TemporalField) supported fields} will return\n * appropriate range instances.\n * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n *
\n * If the field is not a {@link ChronoField}, then the result of this method\n * is obtained by invoking {@code TemporalField.rangeRefinedBy(TemporalAccessor)}\n * passing {@link this} as the argument.\n * Whether the range can be obtained is determined by the field.\n *\n * @param {!TemporalField} field - the field to query the range for, not null\n * @return {ValueRange} the range of valid values for the field, not null\n * @throws {DateTimeException} if the range for the field cannot be obtained\n */\n range(field) {\n if (field instanceof ChronoField) {\n return (field.isTimeBased() ? this._time.range(field) : this._date.range(field));\n }\n return field.rangeRefinedBy(this);\n }\n\n /**\n * Gets the value of the specified field from this date-time as an {@link int}.\n *
\n * This queries this date-time for the value for the specified field.\n * The returned value will always be within the valid range of values for the field.\n * If it is not possible to return the value, because the field is not supported\n * or for some other reason, an exception is thrown.\n *
\n * If the field is a {@link ChronoField} then the query is implemented here.\n * The {@link #isSupported(TemporalField) supported fields} will return valid\n * values based on this date-time, except {@link NANO_OF_DAY}, {@link MICRO_OF_DAY},\n * {@link EPOCH_DAY} and {@link EPOCH_MONTH} which are too large to fit in\n * an {@link int} and throw a {@link DateTimeException}.\n * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n *
\n * If the field is not a {@link ChronoField}, then the result of this method\n * is obtained by invoking {@code TemporalField.getFrom(TemporalAccessor)}\n * passing {@link this} as the argument. Whether the value can be obtained,\n * and what the value represents, is determined by the field.\n *\n * @param {!TemporalField} field - the field to get, not null\n * @return {number} the value for the field\n * @throws {DateTimeException} if a value for the field cannot be obtained\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n get(field) {\n if (field instanceof ChronoField) {\n return (field.isTimeBased() ? this._time.get(field) : this._date.get(field));\n }\n return super.get(field);\n }\n\n /**\n * Gets the value of the specified field from this date-time as a {@link long}.\n *
\n * This queries this date-time for the value for the specified field.\n * If it is not possible to return the value, because the field is not supported\n * or for some other reason, an exception is thrown.\n *
\n * If the field is a {@link ChronoField} then the query is implemented here.\n * The {@link #isSupported(TemporalField) supported fields} will return valid\n * values based on this date-time.\n * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n *
\n * If the field is not a {@link ChronoField}, then the result of this method\n * is obtained by invoking {@code TemporalField.getFrom(TemporalAccessor)}\n * passing {@link this} as the argument. Whether the value can be obtained,\n * and what the value represents, is determined by the field.\n *\n * @param {!TemporalField} field - the field to get, not null\n * @return {number} the value for the field\n * @throws {DateTimeException} if a value for the field cannot be obtained\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n getLong(field) {\n requireNonNull(field, 'field');\n if (field instanceof ChronoField) {\n return (field.isTimeBased() ? this._time.getLong(field) : this._date.getLong(field));\n }\n return field.getFrom(this);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Gets the year field.\n *
\n * This method returns the primitive {@link int} value for the year.\n *
\n * The year returned by this method is proleptic as per {@code get(YEAR)}.\n * To obtain the year-of-era, use {@code get(YEAR_OF_ERA}.\n *\n * @return {number} the year, from MIN_YEAR to MAX_YEAR\n */\n year() {\n return this._date.year();\n }\n\n /**\n * Gets the month-of-year field from 1 to 12.\n *
\n * This method returns the month as an {@link int} from 1 to 12.\n * Application code is frequently clearer if the enum {@link Month}\n * is used by calling {@link #getMonth()}.\n *\n * @return {number} the month-of-year, from 1 to 12\n * @see #getMonth()\n */\n monthValue() {\n return this._date.monthValue();\n }\n\n /**\n * Gets the month-of-year field using the {@link Month} enum.\n *
\n * This method returns the enum {@link Month} for the month.\n * This avoids confusion as to what {@link int} values mean.\n * If you need access to the primitive {@link int} value then the enum\n * provides the {@link Month#getValue() int value}.\n *\n * @return {Month} the month-of-year, not null\n * @see #getMonthValue()\n */\n month() {\n return this._date.month();\n }\n\n /**\n * Gets the day-of-month field.\n *
\n * This method returns the primitive {@link int} value for the day-of-month.\n *\n * @return {number} the day-of-month, from 1 to 31\n */\n dayOfMonth() {\n return this._date.dayOfMonth();\n }\n\n /**\n * Gets the day-of-year field.\n *
\n * This method returns the primitive {@link int} value for the day-of-year.\n *\n * @return {number} the day-of-year, from 1 to 365, or 366 in a leap year\n */\n dayOfYear() {\n return this._date.dayOfYear();\n }\n\n /**\n * Gets the day-of-week field, which is an enum {@link DayOfWeek}.\n *
\n * This method returns the enum {@link DayOfWeek} for the day-of-week.\n * This avoids confusion as to what {@link int} values mean.\n * If you need access to the primitive {@link int} value then the enum\n * provides the {@link DayOfWeek#getValue() int value}.\n *
\n * Additional information can be obtained from the {@link DayOfWeek}.\n * This includes textual names of the values.\n *\n * @return {number} the day-of-week, not null\n */\n dayOfWeek() {\n return this._date.dayOfWeek();\n }\n\n //-----------------------------------------------------------------------\n /**\n * Gets the hour-of-day field.\n *\n * @return {number} the hour-of-day, from 0 to 23\n */\n hour() {\n return this._time.hour();\n }\n\n /**\n * Gets the minute-of-hour field.\n *\n * @return {number} the minute-of-hour, from 0 to 59\n */\n minute() {\n return this._time.minute();\n }\n\n /**\n * Gets the second-of-minute field.\n *\n * @return {number} the second-of-minute, from 0 to 59\n */\n second() {\n return this._time.second();\n }\n\n /**\n * Gets the nano-of-second field.\n *\n * @return {number} the nano-of-second, from 0 to 999,999,999\n */\n nano() {\n return this._time.nano();\n }\n\n //-----------------------------------------------------------------------\n /**\n * function overloading for {@link LocalDateTime.with}\n *\n * if called with 1 argument, {@link LocalDateTime.withTemporalAdjuster} is applied,\n * otherwise {@link LocalDateTime.with2}.\n *\n * @param {!(TemporalAdjuster|TemporalField)} adjusterOrField\n * @param {number} newValue - only require if first argument is a TemporalField\n * @returns {LocalDateTime}\n */\n with(adjusterOrField, newValue){\n if(arguments.length === 1){\n return this.withTemporalAdjuster(adjusterOrField);\n } else {\n return this.with2(adjusterOrField, newValue);\n }\n }\n\n /**\n * Returns an adjusted copy of this date-time.\n *
\n * This returns a new {@link LocalDateTime}, based on this one, with the date-time adjusted.\n * The adjustment takes place using the specified adjuster strategy object.\n * Read the documentation of the adjuster to understand what adjustment will be made.\n *
\n * A simple adjuster might simply set the one of the fields, such as the year field.\n * A more complex adjuster might set the date to the last day of the month.\n * A selection of common adjustments is provided in {@link TemporalAdjusters}.\n * These include finding the 'last day of the month' and 'next Wednesday'.\n * Key date-time classes also implement the {@link TemporalAdjuster} interface,\n * such as {@link Month} and {@link MonthDay MonthDay}.\n * The adjuster is responsible for handling special cases, such as the varying\n * lengths of month and leap years.\n *
\n * For example this code returns a date on the last day of July:\n *
\n * import static org.threeten.bp.Month.*;\n * import static org.threeten.bp.temporal.Adjusters.*;\n *\n * result = localDateTime.with(JULY).with(lastDayOfMonth());\n *\n *
\n * The classes {@link LocalDate} and {@link LocalTime} implement {@link TemporalAdjuster},\n * thus this method can be used to change the date, time or offset:\n *
\n * result = localDateTime.with(date);\n * result = localDateTime.with(time);\n *\n *
\n * The result of this method is obtained by invoking the\n * {@link TemporalAdjuster#adjustInto(Temporal)} method on the\n * specified adjuster passing {@link this} as the argument.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {TemporalAdjuster} adjuster the adjuster to use, not null\n * @return {LocalDateTime} a {@link LocalDateTime} based on {@link this} with the adjustment made, not null\n * @throws {DateTimeException} if the adjustment cannot be made\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n withTemporalAdjuster(adjuster) {\n requireNonNull(adjuster, 'adjuster');\n // optimizations\n if (adjuster instanceof LocalDate) {\n return this._withDateTime(adjuster, this._time);\n } else if (adjuster instanceof LocalTime) {\n return this._withDateTime(this._date, adjuster);\n } else if (adjuster instanceof LocalDateTime) {\n return adjuster;\n }\n assert(typeof adjuster.adjustInto === 'function', 'adjuster', IllegalArgumentException);\n return adjuster.adjustInto(this);\n }\n\n /**\n * Returns a copy of this date-time with the specified field set to a new value.\n *
\n * This returns a new {@link LocalDateTime}, based on this one, with the value\n * for the specified field changed.\n * This can be used to change any supported field, such as the year, month or day-of-month.\n * If it is not possible to set the value, because the field is not supported or for\n * some other reason, an exception is thrown.\n *
\n * In some cases, changing the specified field can cause the resulting date-time to become invalid,\n * such as changing the month from 31st January to February would make the day-of-month invalid.\n * In cases like this, the field is responsible for resolving the date. Typically it will choose\n * the previous valid date, which would be the last valid day of February in this example.\n *
\n * If the field is a {@link ChronoField} then the adjustment is implemented here.\n * The {@link #isSupported(TemporalField) supported fields} will behave as per\n * the matching method on {@link LocalDate#with(TemporalField, long) LocalDate}\n * or {@link LocalTime#with(TemporalField, long) LocalTime}.\n * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n *
\n * If the field is not a {@link ChronoField}, then the result of this method\n * is obtained by invoking {@code TemporalField.adjustInto(Temporal, long)}\n * passing {@link this} as the argument. In this case, the field determines\n * whether and how to adjust the instant.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {TemporalField} field - the field to set in the result, not null\n * @param {number} newValue - the new value of the field in the result\n * @return {LocalDateTime} a {@link LocalDateTime} based on {@link this} with the specified field set, not null\n * @throws {DateTimeException} if the field cannot be set\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n with2(field, newValue) {\n requireNonNull(field, 'field');\n if (field instanceof ChronoField) {\n if (field.isTimeBased()) {\n return this._withDateTime(this._date, this._time.with(field, newValue));\n } else {\n return this._withDateTime(this._date.with(field, newValue), this._time);\n }\n }\n return field.adjustInto(this, newValue);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this {@link LocalDateTime} with the year altered.\n * The time does not affect the calculation and will be the same in the result.\n * If the day-of-month is invalid for the year, it will be changed to the last valid day of the month.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} year - the year to set in the result, from MIN_YEAR to MAX_YEAR\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the requested year, not null\n * @throws {DateTimeException} if the year value is invalid\n */\n withYear(year) {\n return this._withDateTime(this._date.withYear(year), this._time);\n }\n\n /**\n * Returns a copy of this {@link LocalDateTime} with the month-of-year altered.\n * The time does not affect the calculation and will be the same in the result.\n * If the day-of-month is invalid for the year, it will be changed to the last valid day of the month.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {!(number|Month)} month - the month-of-year to set in the result, from 1 (January) to 12 (December)\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the requested month, not null\n * @throws {DateTimeException} if the month-of-year value is invalid\n */\n withMonth(month) {\n return this._withDateTime(this._date.withMonth(month), this._time);\n }\n\n /**\n * Returns a copy of this {@link LocalDateTime} with the day-of-month altered.\n * If the resulting {@link LocalDateTime} is invalid, an exception is thrown.\n * The time does not affect the calculation and will be the same in the result.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} dayOfMonth - the day-of-month to set in the result, from 1 to 28-31\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the requested day, not null\n * @throws {DateTimeException} if the day-of-month value is invalid\n * @throws {DateTimeException} if the day-of-month is invalid for the month-year\n */\n withDayOfMonth(dayOfMonth) {\n return this._withDateTime(this._date.withDayOfMonth(dayOfMonth), this._time);\n }\n\n /**\n * Returns a copy of this {@link LocalDateTime} with the day-of-year altered.\n * If the resulting {@link LocalDateTime} is invalid, an exception is thrown.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} dayOfYear - the day-of-year to set in the result, from 1 to 365-366\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date with the requested day, not null\n * @throws {DateTimeException} if the day-of-year value is invalid\n * @throws {DateTimeException} if the day-of-year is invalid for the year\n */\n withDayOfYear(dayOfYear) {\n return this._withDateTime(this._date.withDayOfYear(dayOfYear), this._time);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this {@link LocalDateTime} with the hour-of-day value altered.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} hour - the hour-of-day to set in the result, from 0 to 23\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the requested hour, not null\n * @throws {DateTimeException} if the hour value is invalid\n */\n withHour(hour) {\n var newTime = this._time.withHour(hour);\n return this._withDateTime(this._date, newTime);\n }\n\n /**\n * Returns a copy of this {@link LocalDateTime} with the minute-of-hour value altered.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} minute - the minute-of-hour to set in the result, from 0 to 59\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the requested minute, not null\n * @throws {DateTimeException} if the minute value is invalid\n */\n withMinute(minute) {\n var newTime = this._time.withMinute(minute);\n return this._withDateTime(this._date, newTime);\n }\n\n /**\n * Returns a copy of this {@link LocalDateTime} with the second-of-minute value altered.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} second - the second-of-minute to set in the result, from 0 to 59\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the requested second, not null\n * @throws {DateTimeException} if the second value is invalid\n */\n withSecond(second) {\n var newTime = this._time.withSecond(second);\n return this._withDateTime(this._date, newTime);\n }\n\n /**\n * Returns a copy of this {@link LocalDateTime} with the nano-of-second value altered.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} nanoOfSecond - the nano-of-second to set in the result, from 0 to 999,999,999\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the requested nanosecond, not null\n * @throws {DateTimeException} if the nano value is invalid\n */\n withNano(nanoOfSecond) {\n var newTime = this._time.withNano(nanoOfSecond);\n return this._withDateTime(this._date, newTime);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this {@link LocalDateTime} with the time truncated.\n *
\n * Truncation returns a copy of the original date-time with fields\n * smaller than the specified unit set to zero.\n * For example, truncating with the {@link ChronoUnit#MINUTES minutes} unit\n * will set the second-of-minute and nano-of-second field to zero.\n *
\n * The unit must have a {@linkplain TemporalUnit#getDuration() duration}\n * that divides into the length of a standard day without remainder.\n * This includes all supplied time units on {@link ChronoUnit} and\n * {@link ChronoUnit#DAYS DAYS}. Other units throw an exception.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {TemporalUnit} unit - the unit to truncate to, not null\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the time truncated, not null\n * @throws {DateTimeException} if unable to truncate\n */\n truncatedTo(unit) {\n return this._withDateTime(this._date, this._time.truncatedTo(unit));\n }\n\n //-----------------------------------------------------------------------\n /**\n * function overloading for {@link LocalDateTime.plus}\n *\n * if called with 1 argument {@link LocalDateTime.plusTemporalAmount} is applied,\n * otherwise {@link LocalDateTime.plus2}\n *\n * @param {!(TemporalAmount|number)} amount\n * @param {TemporalUnit} unit\n * @returns {LocalDateTime}\n */\n plus(amount, unit){\n if(arguments.length === 1){\n return this.plusTemporalAmount(amount);\n } else {\n return this.plus2(amount, unit);\n }\n }\n\n /**\n * Returns a copy of this date-time with the specified period added.\n *
\n * This method returns a new date-time based on this time with the specified period added.\n * The amount is typically {@link Period} but may be any other type implementing\n * the {@link TemporalAmount} interface.\n * The calculation is delegated to the specified adjuster, which typically calls\n * back to {@link #plus(long, TemporalUnit)}.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {TemporalAmount} amount - the amount to add, not null\n * @return {LocalDateTime} based on this date-time with the addition made, not null\n * @throws {DateTimeException} if the addition cannot be made\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n plusTemporalAmount(amount) {\n requireNonNull(amount, 'amount');\n return amount.addTo(this);\n }\n\n /**\n * Returns a copy of this date-time with the specified period added.\n *
\n * This method returns a new date-time based on this date-time with the specified period added.\n * This can be used to add any period that is defined by a unit, for example to add years, months or days.\n * The unit is responsible for the details of the calculation, including the resolution\n * of any edge cases in the calculation.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} amountToAdd - the amount of the unit to add to the result, may be negative\n * @param {!TemporalUnit} unit - the unit of the period to add, not null\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the specified period added, not null\n * @throws {DateTimeException} if the unit cannot be added to this type\n */\n plus2(amountToAdd, unit) {\n requireNonNull(unit, 'unit');\n if (unit instanceof ChronoUnit) {\n switch (unit) {\n case ChronoUnit.NANOS: return this.plusNanos(amountToAdd);\n case ChronoUnit.MICROS: return this.plusDays(MathUtil.intDiv(amountToAdd, LocalTime.MICROS_PER_DAY)).plusNanos(MathUtil.intMod(amountToAdd, LocalTime.MICROS_PER_DAY) * 1000);\n case ChronoUnit.MILLIS: return this.plusDays(amountToAdd / LocalTime.MILLIS_PER_DAY).plusNanos(MathUtil.intMod(amountToAdd, LocalTime.MILLIS_PER_DAY) * 1000000);\n case ChronoUnit.SECONDS: return this.plusSeconds(amountToAdd);\n case ChronoUnit.MINUTES: return this.plusMinutes(amountToAdd);\n case ChronoUnit.HOURS: return this.plusHours(amountToAdd);\n case ChronoUnit.HALF_DAYS: return this.plusDays(MathUtil.intDiv(amountToAdd, 256)).plusHours(MathUtil.intMod(amountToAdd, 256) * 12); // no overflow (256 is multiple of 2)\n }\n return this._withDateTime(this._date.plus(amountToAdd, unit), this._time);\n }\n return unit.addTo(this, amountToAdd);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this {@link LocalDateTime} with the specified period in years added.\n *
\n * This method adds the specified amount to the years field in three steps:\n *
\n * For example, 2008-02-29 (leap year) plus one year would result in the\n * invalid date 2009-02-29 (standard year). Instead of returning an invalid\n * result, the last valid day of the month, 2009-02-28, is selected instead.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} years - the years to add, may be negative\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the years added, not null\n * @throws {DateTimeException} if the result exceeds the supported date range\n */\n plusYears(years) {\n var newDate = this._date.plusYears(years);\n return this._withDateTime(newDate, this._time);\n }\n\n /**\n * Returns a copy of this {@link LocalDateTime} with the specified period in months added.\n *
\n * This method adds the specified amount to the months field in three steps:\n *
\n * For example, 2007-03-31 plus one month would result in the invalid date\n * 2007-04-31. Instead of returning an invalid result, the last valid day\n * of the month, 2007-04-30, is selected instead.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} months - the months to add, may be negative\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the months added, not null\n * @throws {DateTimeException} if the result exceeds the supported date range\n */\n plusMonths(months) {\n var newDate = this._date.plusMonths(months);\n return this._withDateTime(newDate, this._time);\n }\n\n /**\n * Returns a copy of this {@link LocalDateTime} with the specified period in weeks added.\n *
\n * This method adds the specified amount in weeks to the days field incrementing\n * the month and year fields as necessary to ensure the result remains valid.\n * The result is only invalid if the maximum/minimum year is exceeded.\n *
\n * For example, 2008-12-31 plus one week would result in 2009-01-07.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} weeks - the weeks to add, may be negative\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the weeks added, not null\n * @throws {DateTimeException} if the result exceeds the supported date range\n */\n plusWeeks(weeks) {\n var newDate = this._date.plusWeeks(weeks);\n return this._withDateTime(newDate, this._time);\n }\n\n /**\n * Returns a copy of this {@link LocalDateTime} with the specified period in days added.\n *
\n * This method adds the specified amount to the days field incrementing the\n * month and year fields as necessary to ensure the result remains valid.\n * The result is only invalid if the maximum/minimum year is exceeded.\n *
\n * For example, 2008-12-31 plus one day would result in 2009-01-01.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} days - the days to add, may be negative\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the days added, not null\n * @throws {DateTimeException} if the result exceeds the supported date range\n */\n plusDays(days) {\n var newDate = this._date.plusDays(days);\n return this._withDateTime(newDate, this._time);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this {@link LocalDateTime} with the specified period in hours added.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} hours - the hours to add, may be negative\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the hours added, not null\n * @throws {DateTimeException} if the result exceeds the supported date range\n */\n plusHours(hours) {\n return this._plusWithOverflow(this._date, hours, 0, 0, 0, 1);\n }\n\n /**\n * Returns a copy of this {@link LocalDateTime} with the specified period in minutes added.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} minutes - the minutes to add, may be negative\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the minutes added, not null\n * @throws {DateTimeException} if the result exceeds the supported date range\n */\n plusMinutes(minutes) {\n return this._plusWithOverflow(this._date, 0, minutes, 0, 0, 1);\n }\n\n /**\n * Returns a copy of this {@link LocalDateTime} with the specified period in seconds added.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} seconds - the seconds to add, may be negative\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the seconds added, not null\n * @throws {DateTimeException} if the result exceeds the supported date range\n */\n plusSeconds(seconds) {\n return this._plusWithOverflow(this._date, 0, 0, seconds, 0, 1);\n }\n\n /**\n * Returns a copy of this {@link LocalDateTime} with the specified period in nanoseconds added.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} nanos - the nanos to add, may be negative\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the nanoseconds added, not null\n * @throws {DateTimeException} if the result exceeds the supported date range\n */\n plusNanos(nanos) {\n return this._plusWithOverflow(this._date, 0, 0, 0, nanos, 1);\n }\n\n //-----------------------------------------------------------------------\n /**\n * function overloading for {@link LocalDateTime.minus}\n *\n * if called with 1 argument {@link LocalDateTime.minusTemporalAmount} is applied,\n * otherwise {@link LocalDateTime.minus2}\n *\n * @param {!(TemporalAmount|number)} amount\n * @param {TemporalUnit} unit\n * @returns {LocalDateTime}\n */\n minus(amount, unit){\n if(arguments.length === 1){\n return this.minusTemporalAmount(amount);\n } else {\n return this.minus2(amount, unit);\n }\n }\n\n /**\n * Returns a copy of this date-time with the specified period subtracted.\n *
\n * This method returns a new date-time based on this time with the specified period subtracted.\n * The amount is typically {@link Period} but may be any other type implementing\n * the {@link TemporalAmount} interface.\n * The calculation is delegated to the specified adjuster, which typically calls\n * back to {@link #minus(long, TemporalUnit)}.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {TemporalAmount} amount - the amount to subtract, not null\n * @return {LocalDateTime} based on this date-time with the subtraction made, not null\n * @throws {DateTimeException} if the subtraction cannot be made\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n minusTemporalAmount(amount) {\n requireNonNull(amount, 'amount');\n return amount.subtractFrom(this);\n }\n\n /**\n * Returns a copy of this date-time with the specified period subtracted.\n *
\n * This method returns a new date-time based on this date-time with the specified period subtracted.\n * This can be used to subtract any period that is defined by a unit, for example to subtract years, months or days.\n * The unit is responsible for the details of the calculation, including the resolution\n * of any edge cases in the calculation.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} amountToSubtract - the amount of the unit to subtract from the result, may be negative\n * @param {TemporalUnit} unit - the unit of the period to subtract, not null\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the specified period subtracted, not null\n * @throws {DateTimeException} if the unit cannot be added to this type\n */\n minus2(amountToSubtract, unit) {\n requireNonNull(unit, 'unit');\n return this.plus2(-1 * amountToSubtract, unit);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this {@link LocalDateTime} with the specified period in years subtracted.\n *
\n * This method subtracts the specified amount from the years field in three steps:\n *
\n * For example, 2008-02-29 (leap year) minus one year would result in the\n * invalid date 2009-02-29 (standard year). Instead of returning an invalid\n * result, the last valid day of the month, 2009-02-28, is selected instead.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} years - the years to subtract, may be negative\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the years subtracted, not null\n * @throws {DateTimeException} if the result exceeds the supported date range\n */\n minusYears(years) {\n return this.plusYears(-1 * years);\n }\n\n /**\n * Returns a copy of this {@link LocalDateTime} with the specified period in months subtracted.\n *
\n * This method subtracts the specified amount from the months field in three steps:\n *
\n * For example, 2007-03-31 minus one month would result in the invalid date\n * 2007-04-31. Instead of returning an invalid result, the last valid day\n * of the month, 2007-04-30, is selected instead.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} months - the months to subtract, may be negative\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the months subtracted, not null\n * @throws {DateTimeException} if the result exceeds the supported date range\n */\n minusMonths(months) {\n return this.plusMonths(-1 * months);\n }\n\n /**\n * Returns a copy of this {@link LocalDateTime} with the specified period in weeks subtracted.\n *
\n * This method subtracts the specified amount in weeks from the days field decrementing\n * the month and year fields as necessary to ensure the result remains valid.\n * The result is only invalid if the maximum/minimum year is exceeded.\n *
\n * For example, 2009-01-07 minus one week would result in 2008-12-31.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} weeks - the weeks to subtract, may be negative\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the weeks subtracted, not null\n * @throws {DateTimeException} if the result exceeds the supported date range\n */\n minusWeeks(weeks) {\n return this.plusWeeks(-1 * weeks);\n }\n\n /**\n * Returns a copy of this {@link LocalDateTime} with the specified period in days subtracted.\n *
\n * This method subtracts the specified amount from the days field incrementing the\n * month and year fields as necessary to ensure the result remains valid.\n * The result is only invalid if the maximum/minimum year is exceeded.\n *
\n * For example, 2009-01-01 minus one day would result in 2008-12-31.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} days - the days to subtract, may be negative\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the days subtracted, not null\n * @throws {DateTimeException} if the result exceeds the supported date range\n */\n minusDays(days) {\n return this.plusDays(-1 * days);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this {@link LocalDateTime} with the specified period in hours subtracted.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} hours - the hours to subtract, may be negative\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the hours subtracted, not null\n * @throws {DateTimeException} if the result exceeds the supported date range\n */\n minusHours(hours) {\n return this._plusWithOverflow(this._date, hours, 0, 0, 0, -1);\n }\n\n /**\n * Returns a copy of this {@link LocalDateTime} with the specified period in minutes subtracted.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} minutes - the minutes to subtract, may be negative\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the minutes subtracted, not null\n * @throws {DateTimeException} if the result exceeds the supported date range\n */\n minusMinutes(minutes) {\n return this._plusWithOverflow(this._date, 0, minutes, 0, 0, -1);\n }\n\n /**\n * Returns a copy of this {@link LocalDateTime} with the specified period in seconds subtracted.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} seconds - the seconds to subtract, may be negative\n * @return {LocalDateTime} a {@link LocalDateTime} based on this date-time with the seconds subtracted, not null\n * @throws {DateTimeException} if the result exceeds the supported date range\n */\n minusSeconds(seconds) {\n return this._plusWithOverflow(this._date, 0, 0, seconds, 0, -1);\n }\n\n /**\n * Returns a copy of this {@link LocalDateTime} with the specified period in nanoseconds subtracted.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Number} nanos - the nanos to subtract, may be negative\n * @return {LocalDateTime} based on this date-time with the nanoseconds subtracted, not null\n * @throws {DateTimeException} if the result exceeds the supported date range\n */\n minusNanos(nanos) {\n return this._plusWithOverflow(this._date, 0, 0, 0, nanos, -1);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this {@link LocalDateTime} with the specified period added.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {LocalDate} newDate the new date to base the calculation on, not null\n * @param {Number} hours - the hours to add, may be negative\n * @param {Number} minutes - the minutes to add, may be negative\n * @param {Number} seconds - the seconds to add, may be negative\n * @param {Number} nanos - the nanos to add, may be negative\n * @param {Number} sign - the sign to determine add or subtract\n * @return {LocalDateTime} the combined result, not null\n */\n _plusWithOverflow(newDate, hours, minutes, seconds, nanos, sign) {\n // 9223372036854775808 long, 2147483648 int\n if ((hours | minutes | seconds | nanos) === 0) {\n return this._withDateTime(newDate, this._time);\n }\n var totDays = MathUtil.intDiv(nanos, LocalTime.NANOS_PER_DAY) + // max/24*60*60*1B\n MathUtil.intDiv(seconds, LocalTime.SECONDS_PER_DAY) + // max/24*60*60\n MathUtil.intDiv(minutes, LocalTime.MINUTES_PER_DAY) + // max/24*60\n MathUtil.intDiv(hours, LocalTime.HOURS_PER_DAY); // max/24\n totDays *= sign; // total max*0.4237...\n var totNanos = MathUtil.intMod(nanos, LocalTime.NANOS_PER_DAY) + // max 86400000000000\n (MathUtil.intMod(seconds, LocalTime.SECONDS_PER_DAY)) * LocalTime.NANOS_PER_SECOND + // max 86400000000000\n (MathUtil.intMod(minutes, LocalTime.MINUTES_PER_DAY)) * LocalTime.NANOS_PER_MINUTE + // max 86400000000000\n (MathUtil.intMod(hours, LocalTime.HOURS_PER_DAY)) * LocalTime.NANOS_PER_HOUR; // max 86400000000000\n var curNoD = this._time.toNanoOfDay(); // max 86400000000000\n totNanos = totNanos * sign + curNoD; // total 432000000000000\n totDays += MathUtil.floorDiv(totNanos, LocalTime.NANOS_PER_DAY);\n var newNoD = MathUtil.floorMod(totNanos, LocalTime.NANOS_PER_DAY);\n var newTime = (newNoD === curNoD ? this._time : LocalTime.ofNanoOfDay(newNoD));\n return this._withDateTime(newDate.plusDays(totDays), newTime);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Queries this date-time using the specified query.\n *
\n * This queries this date-time using the specified query strategy object.\n * The {@link TemporalQuery} object defines the logic to be used to\n * obtain the result. Read the documentation of the query to understand\n * what the result of this method will be.\n *
\n * The result of this method is obtained by invoking the\n * {@link TemporalQuery#queryFrom(TemporalAccessor)} method on the\n * specified query passing {@link this} as the argument.\n *\n * @param {TemporalQuery} query the query to invoke, not null\n * @return {*} the query result, null may be returned (defined by the query)\n * @throws {DateTimeException} if unable to query (defined by the query)\n * @throws {ArithmeticException} if numeric overflow occurs (defined by the query)\n */\n query(query) {\n requireNonNull(query, 'query');\n if (query === TemporalQueries.localDate()) {\n return this.toLocalDate();\n }\n return super.query(query);\n }\n\n /**\n * Adjusts the specified temporal object to have the same date and time as this object.\n *
\n * This returns a temporal object of the same observable type as the input\n * with the date and time changed to be the same as this.\n *
\n * The adjustment is equivalent to using {@link Temporal#with(TemporalField, long)}\n * twice, passing {@link ChronoField#EPOCH_DAY} and\n * {@link ChronoField#NANO_OF_DAY} as the fields.\n *
\n * In most cases, it is clearer to reverse the calling pattern by using\n * {@link Temporal#with(TemporalAdjuster)}:\n *
\n * // these two lines are equivalent, but the second approach is recommended\n * temporal = thisLocalDateTime.adjustInto(temporal);\n * temporal = temporal.with(thisLocalDateTime);\n *\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {TemporalAdjuster} temporal - the target object to be adjusted, not null\n * @return {LocalDateTime} the adjusted object, not null\n * @throws {DateTimeException} if unable to make the adjustment\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n adjustInto(temporal) {\n return super.adjustInto(temporal);\n }\n\n /**\n * Calculates the period between this date-time and another date-time in\n * terms of the specified unit.\n *
\n * This calculates the period between two date-times in terms of a single unit.\n * The start and end points are {@link this} and the specified date-time.\n * The result will be negative if the end is before the start.\n * The {@link Temporal} passed to this method must be a {@link LocalDateTime}.\n * For example, the period in days between two date-times can be calculated\n * using {@code startDateTime.until(endDateTime, DAYS)}.\n *
\n * The calculation returns a whole number, representing the number of\n * complete units between the two date-times.\n * For example, the period in months between 2012-06-15T00:00 and 2012-08-14T23:59\n * will only be one month as it is one minute short of two months.\n *
\n * This method operates in association with {@link TemporalUnit#between}.\n * The result of this method is a {@link long} representing the amount of\n * the specified unit. By contrast, the result of {@link between} is an\n * object that can be used directly in addition/subtraction:\n *
\n * long period = start.until(end, MONTHS); // this method\n * dateTime.plus(MONTHS.between(start, end)); // use in plus/minus\n *\n *
\n * The calculation is implemented in this method for {@link ChronoUnit}.\n * The units {@link NANOS}, {@link MICROS}, {@link MILLIS}, {@link SECONDS},\n * {@link MINUTES}, {@link HOURS} and {@link HALF_DAYS}, {@link DAYS},\n * {@link WEEKS}, {@link MONTHS}, {@link YEARS}, {@link DECADES},\n * {@link CENTURIES}, {@link MILLENNIA} and {@link ERAS} are supported.\n * Other {@link ChronoUnit} values will throw an exception.\n *
\n * If the unit is not a {@link ChronoUnit}, then the result of this method\n * is obtained by invoking {@code TemporalUnit.between(Temporal, Temporal)}\n * passing {@link this} as the first argument and the input temporal as\n * the second argument.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Temporal} endExclusive - the end date-time, which is converted to a {@link LocalDateTime}, not null\n * @param {TemporalUnit} unit - the unit to measure the period in, not null\n * @return {number} the amount of the period between this date-time and the end date-time\n * @throws {DateTimeException} if the period cannot be calculated\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n until(endExclusive, unit) {\n requireNonNull(endExclusive, 'endExclusive');\n requireNonNull(unit, 'unit');\n var end = LocalDateTime.from(endExclusive);\n if (unit instanceof ChronoUnit) {\n if (unit.isTimeBased()) {\n var daysUntil = this._date.daysUntil(end._date);\n var timeUntil = end._time.toNanoOfDay() - this._time.toNanoOfDay();\n if (daysUntil > 0 && timeUntil < 0) {\n daysUntil--;\n timeUntil += LocalTime.NANOS_PER_DAY;\n } else if (daysUntil < 0 && timeUntil > 0) {\n daysUntil++;\n timeUntil -= LocalTime.NANOS_PER_DAY;\n }\n var amount = daysUntil;\n switch (unit) {\n case ChronoUnit.NANOS:\n amount = MathUtil.safeMultiply(amount, LocalTime.NANOS_PER_DAY);\n return MathUtil.safeAdd(amount, timeUntil);\n case ChronoUnit.MICROS:\n amount = MathUtil.safeMultiply(amount, LocalTime.MICROS_PER_DAY);\n return MathUtil.safeAdd(amount, MathUtil.intDiv(timeUntil, 1000));\n case ChronoUnit.MILLIS:\n amount = MathUtil.safeMultiply(amount, LocalTime.MILLIS_PER_DAY);\n return MathUtil.safeAdd(amount, MathUtil.intDiv(timeUntil, 1000000));\n case ChronoUnit.SECONDS:\n amount = MathUtil.safeMultiply(amount, LocalTime.SECONDS_PER_DAY);\n return MathUtil.safeAdd(amount, MathUtil.intDiv(timeUntil, LocalTime.NANOS_PER_SECOND));\n case ChronoUnit.MINUTES:\n amount = MathUtil.safeMultiply(amount, LocalTime.MINUTES_PER_DAY);\n return MathUtil.safeAdd(amount, MathUtil.intDiv(timeUntil, LocalTime.NANOS_PER_MINUTE));\n case ChronoUnit.HOURS:\n amount = MathUtil.safeMultiply(amount, LocalTime.HOURS_PER_DAY);\n return MathUtil.safeAdd(amount, MathUtil.intDiv(timeUntil, LocalTime.NANOS_PER_HOUR));\n case ChronoUnit.HALF_DAYS:\n amount = MathUtil.safeMultiply(amount, 2);\n return MathUtil.safeAdd(amount, MathUtil.intDiv(timeUntil, (LocalTime.NANOS_PER_HOUR * 12)));\n }\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n }\n var endDate = end._date;\n var endTime = end._time;\n if (endDate.isAfter(this._date) && endTime.isBefore(this._time)) {\n endDate = endDate.minusDays(1);\n } else if (endDate.isBefore(this._date) && endTime.isAfter(this._time)) {\n endDate = endDate.plusDays(1);\n }\n return this._date.until(endDate, unit);\n }\n return unit.between(this, end);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Combines this date-time with an offset to create an {@link OffsetDateTime}.\n *
\n * This returns an {@link OffsetDateTime} formed from this date-time at the specified offset.\n * All possible combinations of date-time and offset are valid.\n *\n * @param {ZoneOffset} offset the offset to combine with, not null\n * @return {OffsetDateTime} the offset date-time formed from this date-time and the specified offset, not null\n */\n/*\n atOffset(offset) {\n return OffsetDateTime.of(this, offset);\n }\n*/\n\n /**\n * Combines this date-time with a time-zone to create a {@link ZonedDateTime}.\n *
\n * This returns a {@link ZonedDateTime} formed from this date-time at the\n * specified time-zone. The result will match this date-time as closely as possible.\n * Time-zone rules, such as daylight savings, mean that not every local date-time\n * is valid for the specified zone, thus the local date-time may be adjusted.\n *
\n * The local date-time is resolved to a single instant on the time-line.\n * This is achieved by finding a valid offset from UTC/Greenwich for the local\n * date-time as defined by the {@link ZoneRules rules} of the zone ID.\n *
\n * In most cases, there is only one valid offset for a local date-time.\n * In the case of an overlap, where clocks are set back, there are two valid offsets.\n * This method uses the earlier offset typically corresponding to 'summer'.\n *
\n * In the case of a gap, where clocks jump forward, there is no valid offset.\n * Instead, the local date-time is adjusted to be later by the length of the gap.\n * For a typical one hour daylight savings change, the local date-time will be\n * moved one hour later into the offset typically corresponding to 'summer'.\n *
\n * To obtain the later offset during an overlap, call\n * {@link ZonedDateTime#withLaterOffsetAtOverlap()} on the result of this method.\n * To throw an exception when there is a gap or overlap, use\n * {@link ZonedDateTime#ofStrict(LocalDateTime, ZoneOffset, ZoneId)}.\n *\n * @param {ZoneId} zone the time-zone to use, not null\n * @return {ZonedDateTime} the zoned date-time formed from this date-time, not null\n */\n/*\n atZone(zone) {\n return ZonedDateTime.of(this, zone);\n }\n*/\n\n //-----------------------------------------------------------------------\n /**\n * Gets the {@link LocalDate} part of this date-time.\n *
\n * This returns a {@link LocalDate} with the same year, month and day\n * as this date-time.\n *\n * @return {LocalDate} the date part of this date-time, not null\n */\n toLocalDate() {\n return this._date;\n }\n\n /**\n * Gets the {@link LocalTime} part of this date-time.\n *
\n * This returns a {@link LocalTime} with the same hour, minute, second and\n * nanosecond as this date-time.\n *\n * @return {LocalTime} the time part of this date-time, not null\n */\n toLocalTime() {\n return this._time;\n }\n\n //-----------------------------------------------------------------------\n /**\n * Compares this date-time to another date-time.\n *
\n * The comparison is primarily based on the date-time, from earliest to latest.\n * It is 'consistent with equals', as defined by {@link Comparable}.\n *
\n * If all the date-times being compared are instances of {@link LocalDateTime},\n * then the comparison will be entirely based on the date-time.\n * If some dates being compared are in different chronologies, then the\n * chronology is also considered, see {@link ChronoLocalDateTime#compareTo}.\n *\n * @param {!LocalDateTime} other - the other date-time to compare to, not null\n * @return {number} the comparator value, negative if less, positive if greater\n */\n compareTo(other) {\n requireNonNull(other, 'other');\n requireInstance(other, LocalDateTime, 'other');\n return this._compareTo0(other);\n/*\n if (other instanceof LocalDateTime) {\n return this._compareTo0(other);\n }\n return super.compareTo(other);\n*/\n }\n\n /**\n *\n * @param {!LocalDateTime} other\n * @returns {number}\n * @private\n */\n _compareTo0(other) {\n var cmp = this._date.compareTo(other.toLocalDate());\n if (cmp === 0) {\n cmp = this._time.compareTo(other.toLocalTime());\n }\n return cmp;\n }\n\n /**\n * Checks if this date-time is after the specified date-time.\n *
\n * This checks to see if this date-time represents a point on the\n * local time-line after the other date-time.\n *
\n * LocalDate a = LocalDateTime.of(2012, 6, 30, 12, 00);\n * LocalDate b = LocalDateTime.of(2012, 7, 1, 12, 00);\n * a.isAfter(b) == false\n * a.isAfter(a) == false\n * b.isAfter(a) == true\n *\n *
\n * This method only considers the position of the two date-times on the local time-line.\n * It does not take into account the chronology, or calendar system.\n * This is different from the comparison in {@link #compareTo(ChronoLocalDateTime)},\n * but is the same approach as {@link #DATE_TIME_COMPARATOR}.\n *\n * @param {LocalDateTime} other - the other date-time to compare to, not null\n * @return {boolean} true if this date-time is after the specified date-time\n */\n isAfter(other) {\n requireNonNull(other, 'other');\n requireInstance(other, LocalDateTime, 'other');\n return this._compareTo0(other) > 0;\n/*\n if (other instanceof LocalDateTime) {\n return this._compareTo0(other) > 0;\n }\n return super.isAfter(other);\n*/\n }\n\n /**\n * Checks if this date-time is before the specified date-time.\n *
\n * This checks to see if this date-time represents a point on the\n * local time-line before the other date-time.\n *
\n * LocalDate a = LocalDateTime.of(2012, 6, 30, 12, 00);\n * LocalDate b = LocalDateTime.of(2012, 7, 1, 12, 00);\n * a.isBefore(b) == true\n * a.isBefore(a) == false\n * b.isBefore(a) == false\n *\n *
\n * This method only considers the position of the two date-times on the local time-line.\n * It does not take into account the chronology, or calendar system.\n * This is different from the comparison in {@link #compareTo(ChronoLocalDateTime)},\n * but is the same approach as {@link #DATE_TIME_COMPARATOR}.\n *\n * @param {LocalDateTime} other - the other date-time to compare to, not null\n * @return {boolean} true if this date-time is before the specified date-time\n */\n isBefore(other) {\n requireNonNull(other, 'other');\n requireInstance(other, LocalDateTime, 'other');\n return this._compareTo0(other) < 0;\n/*\n if (other instanceof LocalDateTime) {\n return this._compareTo0(other) < 0;\n }\n return super.isBefore(other);\n*/\n }\n\n /**\n * Checks if this date-time is equal to the specified date-time.\n *
\n * This checks to see if this date-time represents the same point on the\n * local time-line as the other date-time.\n *
\n * LocalDate a = LocalDateTime.of(2012, 6, 30, 12, 00);\n * LocalDate b = LocalDateTime.of(2012, 7, 1, 12, 00);\n * a.isEqual(b) == false\n * a.isEqual(a) == true\n * b.isEqual(a) == false\n *\n *
\n * This method only considers the position of the two date-times on the local time-line.\n * It does not take into account the chronology, or calendar system.\n * This is different from the comparison in {@link #compareTo(ChronoLocalDateTime)},\n * but is the same approach as {@link #DATE_TIME_COMPARATOR}.\n *\n * @param {*} other - the other date-time to compare to, not null\n * @return {boolean} true if this date-time is equal to the specified date-time\n */\n isEqual(other) {\n if (other instanceof LocalDateTime) {\n return this._compareTo0(other) === 0;\n }\n return super.isEqual(other);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Checks if this date-time is equal to another date-time.\n *
\n * Compares this {@link LocalDateTime} with another ensuring that the date-time is the same.\n * Only objects of type {@link LocalDateTime} are compared, other types return false.\n *\n * @param {*} other - the object to check, null returns false\n * @return {boolean} true if this is equal to the other date-time\n */\n equals(other) {\n if (this === other) {\n return true;\n }\n if (other instanceof LocalDateTime) {\n return this._date.equals(other._date) && this._time.equals(other._time);\n }\n return false;\n }\n\n /**\n * A hash code for this date-time.\n *\n * @return {number} a suitable hash code\n */\n hashCode() {\n return this._date.hashCode() ^ this._time.hashCode();\n }\n\n //-----------------------------------------------------------------------\n /**\n * Outputs this date-time as a {@link String}, such as {@code 2007-12-03T10:15:30}.\n *
\n * The output will be one of the following ISO-8601 formats:\n *
\n * The format used will be the shortest that outputs the full value of\n * the time where the omitted parts are implied to be zero.\n *\n * @return {string} a string representation of this date-time, not null\n */\n toString() {\n return this._date.toString() + 'T' + this._time.toString();\n }\n\n /**\n * Outputs this date-time as a {@link String} using the formatter.\n *
\n * This date-time will be passed to the formatter\n * {@link DateTimeFormatter#format(TemporalAccessor) print method}.\n *\n * @param {!DateTimeFormatter} formatter the formatter to use, not null\n * @return {String} the formatted date-time string, not null\n * @throws {DateTimeException} if an error occurs during printing\n */\n format(formatter) {\n requireNonNull(formatter, 'formatter');\n return formatter.format(this);\n }\n\n}\n\nexport function _init(){\n /**\n * The minimum supported {@link LocalDateTime}, '-999999999-01-01T00:00:00'.\n * This is the local date-time of midnight at the start of the minimum date.\n * This combines {@link LocalDate#MIN} and {@link LocalTime#MIN}.\n * This could be used by an application as a 'far past' date-time.\n */\n LocalDateTime.MIN = LocalDateTime.of(LocalDate.MIN, LocalTime.MIN);\n\n /**\n * The maximum supported {@link LocalDateTime}, '+999999999-12-31T23:59:59.999999999'.\n * This is the local date-time just before midnight at the end of the maximum date.\n * This combines {@link LocalDate#MAX} and {@link LocalTime#MAX}.\n * This could be used by an application as a 'far future' date-time.\n */\n LocalDateTime.MAX = LocalDateTime.of(LocalDate.MAX, LocalTime.MAX);\n\n LocalDateTime.FROM = createTemporalQuery('LocalDateTime.FROM', (temporal) => {\n return LocalDateTime.from(temporal);\n });\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/LocalDateTime.js\n **/","/**\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nimport {assert, requireNonNull, requireInstance} from './assert';\n\nimport {MathUtil} from './MathUtil';\nimport {DateTimeException, UnsupportedTemporalTypeException, NullPointerException, IllegalArgumentException} from './errors';\n\nimport {IsoChronology} from './chrono/IsoChronology';\nimport {ChronoField} from './temporal/ChronoField';\nimport {ChronoUnit} from './temporal/ChronoUnit';\nimport {ChronoLocalDate} from './chrono/ChronoLocalDate';\nimport {TemporalQueries} from './temporal/TemporalQueries';\nimport {createTemporalQuery} from './temporal/TemporalQuery';\nimport {ValueRange} from './temporal/ValueRange';\nimport {DateTimeFormatter} from './format/DateTimeFormatter';\n\nimport {Clock} from './Clock';\nimport {DayOfWeek} from './DayOfWeek';\nimport {Month} from './Month';\nimport {Period} from './Period';\nimport {Year} from './Year';\nimport {LocalTime} from './LocalTime';\nimport {LocalDateTime} from './LocalDateTime';\n\n/**\n * The number of days in a 400 year cycle.\n */\nconst DAYS_PER_CYCLE = 146097;\n\n/**\n* The number of days from year zero to year 1970.\n* There are five 400 year cycles from year zero to 2000.\n* There are 7 leap years from 1970 to 2000.\n*/\nconst DAYS_0000_TO_1970 = (DAYS_PER_CYCLE * 5) - (30 * 365 + 7);\n\n/**\n * A date without a time-zone in the ISO-8601 calendar system,\n * such as 2007-12-03.\n *\n * LocalDate is an immutable date-time object that represents a date,\n * often viewed as year-month-day. Other date fields, such as day-of-year,\n * day-of-week and week-of-year, can also be accessed.\n * For example, the value \"2nd October 2007\" can be stored in a LocalDate.\n *\n * This class does not store or represent a time or time-zone.\n * Instead, it is a description of the date, as used for birthdays.\n * It cannot represent an instant on the time-line without additional information\n * such as an offset or time-zone.\n *\n * The ISO-8601 calendar system is the modern civil calendar system used today\n * in most of the world. It is equivalent to the proleptic Gregorian calendar\n * system, in which today's rules for leap years are applied for all time.\n * For most applications written today, the ISO-8601 rules are entirely suitable.\n * However, any application that makes use of historical dates, and requires them\n * to be accurate will find the ISO-8601 approach unsuitable.\n *\n *
\n * This returns a {@link LocalDate} with the specified year, month and day-of-month.\n * The day must be valid for the year and month, otherwise an exception will be thrown.\n *\n * @param {!number} year - the year to represent, from {@link Year.MIN_VALUE} to {@link Year.MAX_VALUE}\n * @param {!(Month|Number)} month - the month-of-year to represent, from 1 (January) to 12 (December)\n * @param {!number} dayOfMonth - the day-of-month to represent, from 1 to 31\n * @return {LocalDate} the local date, not null\n * @throws {DateTimeException} if the value of any field is out of range,\n * or if the day-of-month is invalid for the month-year\n */\n static of(year, month, dayOfMonth) {\n return new LocalDate(year, month, dayOfMonth);\n }\n\n /**\n * Obtains an instance of {@link LocalDate} from a year and day-of-year.\n *
\n * This returns a {@link LocalDate} with the specified year and day-of-year.\n * The day-of-year must be valid for the year, otherwise an exception will be thrown.\n *\n * @param {!number} year - the year to represent, from {@link Year.MIN_VALUE} to {@link Year.MAX_VALUE}\n * @param {!number} dayOfYear - the day-of-year to represent, from 1 to 366\n * @return {LocalDate} the local date, not null\n * @throws {DateTimeException} if the value of any field is out of range,\n * or if the day-of-year is invalid for the year\n */\n static ofYearDay(year, dayOfYear) {\n ChronoField.YEAR.checkValidValue(year);\n //TODO: ChronoField.DAY_OF_YEAR.checkValidValue(dayOfYear);\n var leap = IsoChronology.isLeapYear(year);\n if (dayOfYear === 366 && leap === false) {\n assert(false, 'Invalid date \\'DayOfYear 366\\' as \\'' + year + '\\' is not a leap year', DateTimeException);\n }\n var moy = Month.of(Math.floor((dayOfYear - 1) / 31 + 1));\n var monthEnd = moy.firstDayOfYear(leap) + moy.length(leap) - 1;\n if (dayOfYear > monthEnd) {\n moy = moy.plus(1);\n }\n var dom = dayOfYear - moy.firstDayOfYear(leap) + 1;\n return new LocalDate(year, moy.value(), dom);\n }\n\n /**\n * Obtains an instance of LocalDate from the epoch day count.\n *\n * This returns a LocalDate with the specified epoch-day.\n * The {@link ChronoField.EPOCH_DAY} is a simple incrementing count\n * of days where day 0 is 1970-01-01. Negative numbers represent earlier days.\n *\n * @param {number} [epochDay=0] - the Epoch Day to convert, based on the epoch 1970-01-01\n * @return {LocalDate} the local date, not null\n * @throws {AssertionError} if the epoch days exceeds the supported date range\n */\n static ofEpochDay(epochDay=0) {\n var adjust, adjustCycles, dom, doyEst, marchDoy0, marchMonth0, month, year, yearEst, zeroDay;\n zeroDay = epochDay + DAYS_0000_TO_1970;\n zeroDay -= 60;\n adjust = 0;\n if (zeroDay < 0) {\n adjustCycles = MathUtil.intDiv(zeroDay + 1, DAYS_PER_CYCLE) - 1;\n adjust = adjustCycles * 400;\n zeroDay += -adjustCycles * DAYS_PER_CYCLE;\n }\n yearEst = MathUtil.intDiv(400 * zeroDay + 591, DAYS_PER_CYCLE);\n doyEst = zeroDay - (365 * yearEst + MathUtil.intDiv(yearEst, 4) - MathUtil.intDiv(yearEst, 100) + MathUtil.intDiv(yearEst, 400));\n if (doyEst < 0) {\n yearEst--;\n doyEst = zeroDay - (365 * yearEst + MathUtil.intDiv(yearEst, 4) - MathUtil.intDiv(yearEst, 100) + MathUtil.intDiv(yearEst, 400));\n }\n yearEst += adjust;\n marchDoy0 = doyEst;\n marchMonth0 = MathUtil.intDiv(marchDoy0 * 5 + 2, 153);\n month = (marchMonth0 + 2) % 12 + 1;\n dom = marchDoy0 - MathUtil.intDiv(marchMonth0 * 306 + 5, 10) + 1;\n yearEst += MathUtil.intDiv(marchMonth0, 10);\n year = yearEst;\n return new LocalDate(year, month, dom);\n }\n\n /**\n * Obtains an instance of {@link LocalDate} from a temporal object.\n *
\n * A {@link TemporalAccessor} represents some form of date and time information.\n * This factory converts the arbitrary temporal object to an instance of {@link LocalDate}.\n *
\n * The conversion uses the {@link TemporalQueries.localDate()} query, which relies\n * on extracting the {@link ChronoField.EPOCH_DAY} field.\n *
\n * This method matches the signature of the functional interface {@link TemporalQuery}\n * allowing it to be used as a query via method reference, {@link LocalDate::from}.\n *\n * @param {!TemporalAccessor} temporal - the temporal object to convert, not null\n * @return {LocalDate} the local date, not null\n * @throws {DateTimeException} if unable to convert to a {@link LocalDate}\n */\n static from(temporal) {\n requireNonNull(temporal, 'temporal');\n var date = temporal.query(TemporalQueries.localDate());\n if (date == null) {\n throw new DateTimeException(\n `Unable to obtain LocalDate from TemporalAccessor: ${temporal}, type ${temporal.constructor != null ? temporal.constructor.name : ''}`);\n }\n return date;\n }\n\n /**\n * Obtains an instance of {@link LocalDate} from a text string using a specific formatter.\n *\n * The text is parsed using the formatter, returning a date.\n *\n * @param {!string} text - the text to parse, not null\n * @param {DateTimeFormatter} [formatter=DateTimeFormatter.ISO_LOCAL_DATE] - the formatter to use, default is \n * {@link DateTimeFormatter.ISO_LOCAL_DATE}\n * @return {LocalDate} the parsed local date, not null\n * @throws {DateTimeParseException} if the text cannot be parsed\n */\n static parse(text, formatter = DateTimeFormatter.ISO_LOCAL_DATE){\n assert(formatter != null, 'formatter', NullPointerException);\n return formatter.parse(text, LocalDate.FROM);\n }\n\n /**\n * Resolves the date, resolving days past the end of month.\n *\n * @param {!number} year - the year to represent, validated from {@link Year.MIN_VALUE} to {@link Year.MAX_VALUE}\n * @param {!number} month - the month-of-year to represent, validated from 1 to 12\n * @param {!number} day - the day-of-month to represent, validated from 1 to 31\n * @return {LocalDate} resolved date, not null\n */\n static _resolvePreviousValid(year, month, day) {\n switch (month) {\n case 2:\n day = Math.min(day, IsoChronology.isLeapYear(year) ? 29 : 28);\n break;\n case 4:\n case 6:\n case 9:\n case 11:\n day = Math.min(day, 30);\n break;\n }\n return LocalDate.of(year, month, day);\n }\n\n /**\n * Do not call the constructor directly, use the of*() factories instead like {@link LocalDate.of()}\n *\n * @param {!number} year\n * @param {!(Month|number)} month\n * @param {!number} dayOfMonth\n * @private\n */\n constructor(year, month, dayOfMonth){\n super();\n if (month instanceof Month) {\n month = month.value();\n }\n LocalDate._validate(year, month, dayOfMonth);\n this._year = MathUtil.safeZero(year);\n this._month = MathUtil.safeZero(month);\n this._day = MathUtil.safeZero(dayOfMonth);\n }\n\n\n /**\n * \n * @param {!number} year\n * @param {!number} month\n * @param {!number} dayOfMonth\n * @throws {DateTimeException} if date values are invalid\n * @private\n */\n static _validate(year, month, dayOfMonth) {\n var dom;\n ChronoField.YEAR.checkValidValue(year);\n ChronoField.MONTH_OF_YEAR.checkValidValue(month);\n ChronoField.DAY_OF_MONTH.checkValidValue(dayOfMonth);\n if (dayOfMonth > 28) {\n dom = 31;\n switch (month) {\n case 2:\n dom = IsoChronology.isLeapYear(year) ? 29 : 28;\n break;\n case 4:\n case 6:\n case 9:\n case 11:\n dom = 30;\n }\n if (dayOfMonth > dom) {\n if (dayOfMonth === 29) {\n assert(false, 'Invalid date \\'February 29\\' as \\'' + year + '\\' is not a leap year', DateTimeException);\n } else {\n assert(false, 'Invalid date \\'' + year + '\\' \\'' + month + '\\' \\'' + dayOfMonth + '\\'', DateTimeException);\n }\n }\n }\n }\n\n /**\n * Checks if the specified field is supported.\n *
\n * This checks if this date can be queried for the specified field.\n * If false, then calling the {@link LocalDate.range} range and\n * {@link LocalDate.get} get methods will throw an exception.\n *
\n * If the field is a {@link ChronoField} then the query is implemented here.\n * The {@link LocalDate.isSupported} supported fields will return valid\n * values based on this date-time.\n * The supported fields are:\n *
\n * If the field is not a {@link ChronoField}, then the result of this method\n * is obtained by invoking {@link TemporalField.isSupportedBy}\n * passing this as the argument.\n * Whether the field is supported is determined by the field.\n *\n * @param {TemporalField} field the field to check, null returns false\n * @return {boolean} true if the field is supported on this date, false if not\n */\n isSupported(field) {\n return super.isSupported(field);\n }\n\n /**\n * Gets the range of valid values for the specified field.\n *
\n * The range object expresses the minimum and maximum valid values for a field.\n * This date is used to enhance the accuracy of the returned range.\n * If it is not possible to return the range, because the field is not supported\n * or for some other reason, an exception is thrown.\n *
\n * If the field is a {@link ChronoField} then the query is implemented here.\n * The {@link LocalDate.isSupported} supported fields will return\n * appropriate range instances.\n * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n *
\n * If the field is not a {@link ChronoField}, then the result of this method\n * is obtained by invoking {@link TemporalField.rangeRefinedBy}\n * passing this as the argument.\n * Whether the range can be obtained is determined by the field.\n *\n * @param {TemporalField} field the field to query the range for, not null\n * @return {ValueRange} the range of valid values for the field, not null\n * @throws {DateTimeException} if the range for the field cannot be obtained\n */\n range(field) {\n if (field instanceof ChronoField) {\n if (field.isDateBased()) {\n switch (field) {\n case ChronoField.DAY_OF_MONTH: return ValueRange.of(1, this.lengthOfMonth());\n case ChronoField.DAY_OF_YEAR: return ValueRange.of(1, this.lengthOfYear());\n case ChronoField.ALIGNED_WEEK_OF_MONTH: return ValueRange.of(1, this.month() === Month.FEBRUARY && this.isLeapYear() === false ? 4 : 5);\n case ChronoField.YEAR_OF_ERA:\n return (this._year <= 0 ? ValueRange.of(1, Year.MAX_VALUE + 1) : ValueRange.of(1, Year.MAX_VALUE));\n }\n return field.range();\n }\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n return field.rangeRefinedBy(this);\n }\n\n /**\n * Gets the value of the specified field from this date as an {@code int}.\n *
\n * This queries this date for the value for the specified field.\n * The returned value will always be within the valid range of values for the field.\n * If it is not possible to return the value, because the field is not supported\n * or for some other reason, an exception is thrown.\n *
\n * If the field is a {@link ChronoField} then the query is implemented here.\n * The {@link LocalDate.isSupported} supported fields will return valid\n * values based on this date, except {@link ChronoField.EPOCH_DAY} and {@link ChronoField.EPOCH_MONTH}\n * which are too large to fit in an {@code int} and throw a {@link DateTimeException}.\n * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n *
\n * If the field is not a {@link ChronoField}, then the result of this method\n * is obtained by invoking {@link TemporalField.getFrom}\n * passing this as the argument. Whether the value can be obtained,\n * and what the value represents, is determined by the field.\n *\n * @param {!TemporalField} field the field to get, not null\n * @return the value for the field\n * @throws {DateTimeException} if a value for the field cannot be obtained\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n get(field) {\n return this.getLong(field);\n }\n\n /**\n * see {LocalDate.get}, get and getLong are identical in javascript, because we are only limited by \n * {@link MathUtil.MIN_SAFE_INTEGER}/ {@link MathUtil.MAX_SAFE_INTEGER} \n * \n * @param {!TemporalField} field\n * @returns {*}\n */\n getLong(field) {\n assert(field != null, '', NullPointerException);\n if (field instanceof ChronoField) {\n return this._get0(field);\n }\n return field.getFrom(this);\n }\n\n /**\n * TODO tests are missing for the ALIGNED_* ChronoFields\n * \n * @param {!TemporalField} field\n * @returns {*}\n * @private\n */\n _get0(field) {\n switch (field) {\n case ChronoField.DAY_OF_WEEK: return this.dayOfWeek().value();\n case ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH: return MathUtil.intMod((this._day - 1), 7) + 1;\n case ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR: return MathUtil.intMod((this.dayOfYear() - 1), 7) + 1;\n case ChronoField.DAY_OF_MONTH: return this._day;\n case ChronoField.DAY_OF_YEAR: return this.dayOfYear();\n case ChronoField.EPOCH_DAY: return this.toEpochDay();\n case ChronoField.ALIGNED_WEEK_OF_MONTH: return MathUtil.intDiv((this._day - 1), 7) + 1;\n case ChronoField.ALIGNED_WEEK_OF_YEAR: return MathUtil.intDiv((this.dayOfYear() - 1), 7) + 1;\n case ChronoField.MONTH_OF_YEAR: return this._month;\n case ChronoField.PROLEPTIC_MONTH: return this._prolepticMonth();\n case ChronoField.YEAR_OF_ERA: return (this._year >= 1 ? this._year : 1 - this._year);\n case ChronoField.YEAR: return this._year;\n case ChronoField.ERA: return (this._year >= 1 ? 1 : 0);\n }\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n\n /**\n * \n * @return {number}\n * @private\n */\n _prolepticMonth() {\n return (this._year * 12) + (this._month - 1);\n }\n\n /**\n * Gets the chronology of this date, which is the ISO calendar system.\n *
\n * The {@link Chronology} represents the calendar system in use.\n * The ISO-8601 calendar system is the modern civil calendar system used today\n * in most of the world. It is equivalent to the proleptic Gregorian calendar\n * system, in which todays's rules for leap years are applied for all time.\n *\n * @return {Chronology} the ISO chronology, not null\n */\n chronology() {\n return IsoChronology.INSTANCE;\n }\n\n /**\n *\n * @return {number} gets the year\n */\n year() {\n return this._year;\n }\n\n /**\n *\n * @return {number} gets the month value\n */\n monthValue() {\n return this._month;\n }\n\n /**\n *\n * @returns {Month} month\n */\n month() {\n return Month.of(this._month);\n }\n\n /**\n *\n * @return {number} gets the day of month\n */\n dayOfMonth() {\n return this._day;\n }\n\n /**\n * Gets the day-of-year field.\n *
\n * This method returns the primitive int value for the day-of-year.\n *\n * @return {number} the day-of-year, from 1 to 365, or 366 in a leap year\n */\n dayOfYear() {\n return this.month().firstDayOfYear(this.isLeapYear()) + this._day - 1;\n }\n\n /**\n * Gets the day-of-week field, which is an enum {@link DayOfWeek}.\n *
\n * This method returns the enum {@link DayOfWeek} for the day-of-week.\n * This avoids confusion as to what {@link int} values mean.\n * If you need access to the primitive {@link int} value then the enum\n * provides the {@link DayOfWeek.value} int value.\n *
\n * Additional information can be obtained from the {@link DayOfWeek}.\n * This includes textual names of the values.\n *\n * @return {DayOfWeek} the day-of-week, not null\n */\n dayOfWeek() {\n var dow0 = MathUtil.floorMod(this.toEpochDay() + 3, 7);\n return DayOfWeek.of(dow0 + 1);\n }\n\n /**\n * Checks if the year is a leap year, according to the ISO proleptic\n * calendar system rules.\n *
\n * This method applies the current rules for leap years across the whole time-line.\n * In general, a year is a leap year if it is divisible by four without\n * remainder. However, years divisible by 100, are not leap years, with\n * the exception of years divisible by 400 which are.\n *
\n * For example, 1904 is a leap year it is divisible by 4.\n * 1900 was not a leap year as it is divisible by 100, however 2000 was a\n * leap year as it is divisible by 400.\n *
\n * The calculation is proleptic - applying the same rules into the far future and far past.\n * This is historically inaccurate, but is correct for the ISO-8601 standard.\n *\n * @return {boolean} true if the year is leap, false otherwise\n */\n isLeapYear() {\n return IsoChronology.isLeapYear(this._year);\n }\n\n /**\n * Returns the length of the month represented by this date.\n *
\n * This returns the length of the month in days.\n * For example, a date in January would return 31.\n *\n * @return {number} the length of the month in days\n */\n lengthOfMonth() {\n switch (this._month) {\n case 2:\n return (this.isLeapYear() ? 29 : 28);\n case 4:\n case 6:\n case 9:\n case 11:\n return 30;\n default:\n return 31;\n }\n }\n\n /**\n * Returns the length of the year represented by this date.\n *
\n * This returns the length of the year in days, either 365 or 366.\n *\n * @return {number} 366 if the year is leap, 365 otherwise\n */\n lengthOfYear() {\n return (this.isLeapYear() ? 366 : 365);\n }\n\n /**\n * function overloading for the {@link LocalDate.with} method.\n *\n * calling \"with\" with one (or less) argument, assumes that the argument is an TemporalAdjuster \n * and {@link LocalDate.withTemporalAdjuster} is called.\n * \n * Otherwise a TemporalField and {@link Number} newValue argument is expected and \n * {@link LocalDate.withFieldAndValue} is called.\n *\n * @param {!(TemporalAdjuster|TemporalField)} fieldOrAdjuster\n * @param {number} newValue - required if first argument is a TemporalField\n * @return {LocalDate} the new LocalDate with the newValue set.\n */\n with(fieldOrAdjuster, newValue){\n if(arguments.length < 2){\n return this.withTemporalAdjuster(fieldOrAdjuster);\n } else {\n return this.withFieldAndValue(fieldOrAdjuster, newValue);\n }\n }\n\n /**\n * Returns an adjusted copy of this date.\n *
\n * This returns a new {@link LocalDate}, based on this one, with the date adjusted.\n * The adjustment takes place using the specified adjuster strategy object.\n * Read the documentation of the adjuster to understand what adjustment will be made.\n *
\n * A simple adjuster might simply set the one of the fields, such as the year field.\n * A more complex adjuster might set the date to the last day of the month.\n * A selection of common adjustments is provided in {@link TemporalAdjusters}.\n * These include finding the \"last day of the month\" and \"next Wednesday\".\n * Key date-time classes also implement the {@link TemporalAdjuster} interface,\n * such as {@link Month} and {@link MonthDay}.\n * The adjuster is responsible for handling special cases, such as the varying\n * lengths of month and leap years.\n *
\n * For example this code returns a date on the last day of July:\n *
\n * import static org.threeten.bp.Month.*;\n * import static org.threeten.bp.temporal.Adjusters.*;\n *\n * result = localDate.with(JULY).with(lastDayOfMonth());\n *\n *
\n * The result of this method is obtained by invoking the\n * {@link TemporalAdjuster.adjustInto} method on the\n * specified adjuster passing {@link this} as the argument.\n *\n * @param {!TemporalAdjuster} adjuster - the adjuster to use, not null\n * @return {LocalDate} a {@link LocalDate} based on {@link this} with the adjustment made, not null\n * @throws {DateTimeException} if the adjustment cannot be made\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n withTemporalAdjuster(adjuster) {\n requireNonNull(adjuster, 'adjuster');\n // optimizations\n if (adjuster instanceof LocalDate) {\n return adjuster;\n }\n assert(typeof adjuster.adjustInto === 'function', 'adjuster', IllegalArgumentException);\n return adjuster.adjustInto(this);\n }\n\n /**\n * Returns a copy of this date with the specified field set to a new value.\n *
\n * This returns a new {@link LocalDate}, based on this one, with the value\n * for the specified field changed.\n * This can be used to change any supported field, such as the year, month or day-of-month.\n * If it is not possible to set the value, because the field is not supported or for\n * some other reason, an exception is thrown.\n *
\n * In some cases, changing the specified field can cause the resulting date to become invalid,\n * such as changing the month from 31st January to February would make the day-of-month invalid.\n * In cases like this, the field is responsible for resolving the date. Typically it will choose\n * the previous valid date, which would be the last valid day of February in this example.\n *
\n * If the field is a {@link ChronoField} then the adjustment is implemented here.\n * The supported fields behave as follows:\n *
\n * In all cases, if the new value is outside the valid range of values for the field\n * then a {@link DateTimeException} will be thrown.\n *
\n * All other {@link ChronoField} instances will throw a {@link DateTimeException}.\n *
\n * If the field is not a {@link ChronoField}, then the result of this method\n * is obtained by invoking {@link TemporalField.adjustInto(Temporal, long)}\n * passing {@link this} as the argument. In this case, the field determines\n * whether and how to adjust the instant.\n *\n * @param {TemporalField} field - the field to set in the result, not null\n * @param {number} newValue - the new value of the field in the result\n * @return {LocalDate} a {@link LocalDate} based on {@link this} with the specified field set, not null\n * @throws {DateTimeException} if the field cannot be set\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n withFieldAndValue(field, newValue) {\n assert(field != null, 'field', NullPointerException);\n if (field instanceof ChronoField) {\n var f = field;\n f.checkValidValue(newValue);\n switch (f) {\n case ChronoField.DAY_OF_WEEK: return this.plusDays(newValue - this.getDayOfWeek().value());\n case ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH: return this.plusDays(newValue - this.getLong(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH));\n case ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR: return this.plusDays(newValue - this.getLong(ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR));\n case ChronoField.DAY_OF_MONTH: return this.withDayOfMonth(newValue);\n case ChronoField.DAY_OF_YEAR: return this.withDayOfYear(newValue);\n case ChronoField.EPOCH_DAY: return LocalDate.ofEpochDay(newValue);\n case ChronoField.ALIGNED_WEEK_OF_MONTH: return this.plusWeeks(newValue - this.getLong(ChronoField.ALIGNED_WEEK_OF_MONTH));\n case ChronoField.ALIGNED_WEEK_OF_YEAR: return this.plusWeeks(newValue - this.getLong(ChronoField.ALIGNED_WEEK_OF_YEAR));\n case ChronoField.MONTH_OF_YEAR: return this.withMonth(newValue);\n case ChronoField.PROLEPTIC_MONTH: return this.plusMonths(newValue - this.getLong(ChronoField.PROLEPTIC_MONTH));\n case ChronoField.YEAR_OF_ERA: return this.withYear((this._year >= 1 ? newValue : 1 - newValue));\n case ChronoField.YEAR: return this.withYear(newValue);\n case ChronoField.ERA: return (this.getLong(ChronoField.ERA) === newValue ? this : this.withYear(1 - this._year));\n }\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n return field.adjustInto(this, newValue);\n }\n\n /**\n * Returns a copy of this date with the year altered.\n * If the day-of-month is invalid for the year, it will be changed to the last valid day of the month.\n *\n * @param {!number} year the year to set in the result, from {@link Year.MIN_VALUE} to {@link Year.MAX_VALUE}\n * @return {LocalDate} a {@link LocalDate} based on this date with the requested year, not null\n * @throws {DateTimeException} if the year value is invalid\n */\n withYear(year) {\n if (this._year === year) {\n return this;\n }\n ChronoField.YEAR.checkValidValue(year);\n return LocalDate._resolvePreviousValid(year, this._month, this._day);\n }\n\n /**\n * Returns a copy of this date with the month-of-year altered.\n * If the day-of-month is invalid for the year, it will be changed to the last valid day of the month.\n *\n * @param {!(Month|number)} month - the month-of-year to set in the result, from 1 (January) to 12 (December)\n * @return {LocalDate} a {@link LocalDate} based on this date with the requested month, not null\n * @throws {DateTimeException} if the month-of-year value is invalid\n */\n withMonth(month) {\n var m = (month instanceof Month) ? month.value() : month;\n if (this._month === m) {\n return this;\n }\n ChronoField.MONTH_OF_YEAR.checkValidValue(m);\n return LocalDate._resolvePreviousValid(this._year, m, this._day);\n }\n\n /**\n * Returns a copy of this {@link LocalDate} with the day-of-month altered.\n *
\n * If the resulting date is invalid, an exception is thrown.\n *\n * @param {!number} dayOfMonth - the day-of-month to set in the result, from 1 to 28-31\n * @return {LocalDate} based on this date with the requested day, not null\n * @throws {DateTimeException} if the day-of-month value is invalid,\n * or if the day-of-month is invalid for the month-year\n */\n withDayOfMonth(dayOfMonth) {\n if (this._day === dayOfMonth) {\n return this;\n }\n return LocalDate.of(this._year, this._month, dayOfMonth);\n }\n\n /**\n * Returns a copy of this date with the day-of-year altered.\n * If the resulting date is invalid, an exception is thrown.\n *\n * @param dayOfYear the day-of-year to set in the result, from 1 to 365-366\n * @return {LocalDate} a {@link LocalDate} based on this date with the requested day, not null\n * @throws {DateTimeException} if the day-of-year value is invalid\n * @throws {DateTimeException} if the day-of-year is invalid for the year\n */\n withDayOfYear(dayOfYear) {\n if (this.dayOfYear() === dayOfYear) {\n return this;\n }\n return LocalDate.ofYearDay(this._year, dayOfYear);\n }\n\n /**\n * function overloading for plus\n *\n * called with 1 (or less) arguments, p1 is expected to be a TemporalAmount and {@link LocalDate.plus1} \n * is called.\n * \n * Otherwise {@link LocalDate.plus2} is called.\n * \n * @param {!(TemporalAmount|number)} p1\n * @param {TemporalUnit} p2 - required if called with 2 arguments\n * @return {LocalDate}\n */\n plus(p1, p2){\n if(arguments.length < 2){\n return this.plus1(p1);\n } else {\n return this.plus2(p1, p2);\n }\n }\n\n /**\n * Returns a copy of this date with the specified period added.\n *
\n * This method returns a new date based on this date with the specified period added.\n * The amount is typically {@link Period} but may be any other type implementing\n * the {@link TemporalAmount} interface.\n * The calculation is delegated to the specified adjuster, which typically calls\n * back to {@link LocalDate.plus2}.\n *\n * @param {!TemporalAmount} amount - the amount to add, not null\n * @return {LocalDate} a {@link LocalDate} based on this date with the addition made, not null\n * @throws {DateTimeException} if the addition cannot be made\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n plus1(amount) {\n requireNonNull(amount, 'amount');\n return amount.addTo(this);\n }\n\n /**\n * Returns a copy of this date with the specified period added.\n *
\n * This method returns a new date based on this date with the specified period added.\n * This can be used to add any period that is defined by a unit, for example to add years, months or days.\n * The unit is responsible for the details of the calculation, including the resolution\n * of any edge cases in the calculation.\n *\n * @param {!number} amountToAdd - the amount of the unit to add to the result, may be negative\n * @param {!TemporalUnit} unit - the unit of the period to add, not null\n * @return {LocalDate} a {@link LocalDate} based on this date with the specified period added, not null\n * @throws {DateTimeException} if the unit cannot be added to this type\n */\n plus2(amountToAdd, unit) {\n requireNonNull(amountToAdd, 'amountToAdd');\n requireNonNull(unit, 'unit');\n if (unit instanceof ChronoUnit) {\n switch (unit) {\n case ChronoUnit.DAYS: return this.plusDays(amountToAdd);\n case ChronoUnit.WEEKS: return this.plusWeeks(amountToAdd);\n case ChronoUnit.MONTHS: return this.plusMonths(amountToAdd);\n case ChronoUnit.YEARS: return this.plusYears(amountToAdd);\n case ChronoUnit.DECADES: return this.plusYears(MathUtil.safeMultiply(amountToAdd, 10));\n case ChronoUnit.CENTURIES: return this.plusYears(MathUtil.safeMultiply(amountToAdd, 100));\n case ChronoUnit.MILLENNIA: return this.plusYears(MathUtil.safeMultiply(amountToAdd, 1000));\n case ChronoUnit.ERAS: return this.with(ChronoField.ERA, MathUtil.safeAdd(this.getLong(ChronoField.ERA), amountToAdd));\n }\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n }\n return unit.addTo(this, amountToAdd);\n }\n\n /**\n * Returns a copy of this {@link LocalDate} with the specified period in years added.\n *
\n * This method adds the specified amount to the years field in three steps:\n *
\n * For example, 2008-02-29 (leap year) plus one year would result in the\n * invalid date 2009-02-29 (standard year). Instead of returning an invalid\n * result, the last valid day of the month, 2009-02-28, is selected instead.\n *\n * @param {!number} yearsToAdd - the years to add, may be negative\n * @return {LocalDate} a {@link LocalDate} based on this date with the years added, not null\n * @throws {DateTimeException} if the result exceeds the supported date range\n */\n plusYears(yearsToAdd) {\n if (yearsToAdd === 0) {\n return this;\n }\n var newYear = ChronoField.YEAR.checkValidIntValue(this._year + yearsToAdd); // safe overflow\n return LocalDate._resolvePreviousValid(newYear, this._month, this._day);\n }\n\n /**\n * Returns a copy of this {@link LocalDate} with the specified period in months added.\n *
\n * This method adds the specified amount to the months field in three steps:\n *
\n * For example, 2007-03-31 plus one month would result in the invalid date\n * 2007-04-31. Instead of returning an invalid result, the last valid day\n * of the month, 2007-04-30, is selected instead.\n *\n * @param {number} monthsToAdd - the months to add, may be negative\n * @return {LocalDate} a {@link LocalDate} based on this date with the months added, not null\n * @throws {DateTimeException} if the result exceeds the supported date range\n */\n plusMonths(monthsToAdd) {\n if (monthsToAdd === 0) {\n return this;\n }\n var monthCount = this._year * 12 + (this._month - 1);\n var calcMonths = monthCount + monthsToAdd; // safe overflow\n var newYear = ChronoField.YEAR.checkValidIntValue(MathUtil.floorDiv(calcMonths, 12));\n var newMonth = MathUtil.floorMod(calcMonths, 12) + 1;\n return LocalDate._resolvePreviousValid(newYear, newMonth, this._day);\n }\n\n /**\n * Returns a copy of this {@link LocalDate} with the specified period in weeks added.\n *
\n * This method adds the specified amount in weeks to the days field incrementing\n * the month and year fields as necessary to ensure the result remains valid.\n * The result is only invalid if the maximum/minimum year is exceeded.\n *
\n * For example, 2008-12-31 plus one week would result in 2009-01-07.\n *\n * @param {!number} weeksToAdd - the weeks to add, may be negative\n * @return {LocalDate} a {@link LocalDate} based on this date with the weeks added, not null\n * @throws {DateTimeException} if the result exceeds the supported date range\n */\n plusWeeks(weeksToAdd) {\n return this.plusDays(MathUtil.safeMultiply(weeksToAdd, 7));\n }\n\n\n /**\n * Returns a copy of this LocalDate with the specified number of days added.\n * \n * This method adds the specified amount to the days field incrementing the\n * month and year fields as necessary to ensure the result remains valid.\n * The result is only invalid if the maximum/minimum year is exceeded.\n * \n * For example, 2008-12-31 plus one day would result in 2009-01-01.\n *\n * @param {number} daysToAdd - the days to add, may be negative\n * @return {LocalDate} a LocalDate based on this date with the days added, not null\n * @throws AssertionError if the result exceeds the supported date range\n */\n plusDays(daysToAdd) {\n if (daysToAdd === 0) {\n return this;\n }\n var mjDay = MathUtil.safeAdd(this.toEpochDay(), daysToAdd);\n return LocalDate.ofEpochDay(mjDay);\n }\n\n /**\n * function overloading for minus\n *\n * called with 1 (or less) arguments, p1 is expected to be a TemporalAmount and {@link LocalDate.minus1} \n * is called.\n * \n * Otherwise {@link LocalDate.minus2} is called.\n * \n * @param {!(TemporalAmount|number)} p1\n * @param {TemporalUnit} p2 - required if called with 2 arguments\n * @return {LocalDate}\n */\n minus(p1, p2){\n if(arguments.length < 2){\n return this.minus1(p1);\n } else {\n return this.minus2(p1, p2);\n }\n }\n\n /**\n * Returns a copy of this date with the specified period subtracted.\n *
\n * This method returns a new date based on this date with the specified period subtracted.\n * The amount is typically {@link Period} but may be any other type implementing\n * the {@link TemporalAmount} interface.\n * The calculation is delegated to the specified adjuster, which typically calls\n * back to {@link #minus(long, TemporalUnit)}.\n *\n * @param {!TemporalAmount} amount - the amount to subtract, not null\n * @return {LocalDate} a {@link LocalDate} based on this date with the subtraction made, not null\n * @throws {DateTimeException} if the subtraction cannot be made\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n minus1(amount) {\n requireNonNull(amount, 'amount');\n return amount.subtractFrom(this);\n }\n\n /**\n * Returns a copy of this date with the specified period subtracted.\n *
\n * This method returns a new date based on this date with the specified period subtracted.\n * This can be used to subtract any period that is defined by a unit, for example to subtract years, months or days.\n * The unit is responsible for the details of the calculation, including the resolution\n * of any edge cases in the calculation.\n *\n * @param {!number} amountToSubtract - the amount of the unit to subtract from the result, may be negative\n * @param {!TemporalUnit} unit the unit of the period to subtract, not null\n * @return {LocalDate} a {@link LocalDate} based on this date with the specified period subtracted, not null\n * @throws {DateTimeException} if the unit cannot be added to this type\n */\n minus2(amountToSubtract, unit) {\n requireNonNull(amountToSubtract, 'amountToSubtract');\n requireNonNull(unit, 'unit');\n return this.plus2(-1 * amountToSubtract, unit);\n }\n\n /**\n * Returns a copy of this {@link LocalDate} with the specified period in years subtracted.\n *
\n * This method subtracts the specified amount from the years field in three steps:\n *
\n * For example, 2008-02-29 (leap year) minus one year would result in the\n * invalid date 2007-02-29 (standard year). Instead of returning an invalid\n * result, the last valid day of the month, 2007-02-28, is selected instead.\n *\n * @param {!number} yearsToSubtract - the years to subtract, may be negative\n * @return {LocalDate} a {@link LocalDate} based on this date with the years subtracted, not null\n * @throws {DateTimeException} if the result exceeds the supported date range\n */\n minusYears(yearsToSubtract) {\n return this.plusYears(yearsToSubtract * -1);\n }\n\n /**\n * Returns a copy of this {@link LocalDate} with the specified period in months subtracted.\n *
\n * This method subtracts the specified amount from the months field in three steps:\n *
\n * For example, 2007-03-31 minus one month would result in the invalid date\n * 2007-02-31. Instead of returning an invalid result, the last valid day\n * of the month, 2007-02-28, is selected instead.\n *\n * @param {!number} monthsToSubtract - the months to subtract, may be negative\n * @return {LocalDate} a {@link LocalDate} based on this date with the months subtracted, not null\n * @throws {DateTimeException} if the result exceeds the supported date range\n */\n minusMonths(monthsToSubtract) {\n return this.plusMonths(monthsToSubtract * -1);\n }\n\n /**\n * Returns a copy of this {@link LocalDate} with the specified period in weeks subtracted.\n *
\n * This method subtracts the specified amount in weeks from the days field decrementing\n * the month and year fields as necessary to ensure the result remains valid.\n * The result is only invalid if the maximum/minimum year is exceeded.\n *
\n * For example, 2009-01-07 minus one week would result in 2008-12-31.\n *\n * @param {!number} weeksToSubtract - the weeks to subtract, may be negative\n * @return {LocalDate} a {@link LocalDate} based on this date with the weeks subtracted, not null\n * @throws {DateTimeException} if the result exceeds the supported date range\n */\n minusWeeks(weeksToSubtract) {\n return this.plusWeeks(weeksToSubtract * -1);\n }\n\n /*\n * Returns a copy of this LocalDate with the specified number of days subtracted.\n * \n * This method subtracts the specified amount from the days field decrementing the\n * month and year fields as necessary to ensure the result remains valid.\n * The result is only invalid if the maximum/minimum year is exceeded.\n * \n * For example, 2009-01-01 minus one day would result in 2008-12-31.\n *\n * @param {number} daysToSubtract - the days to subtract, may be negative\n * @return {LocalDate} a LocalDate based on this date with the days subtracted, not null\n * @throws AssertionError if the result exceeds the supported date range\n */\n minusDays(daysToSubtract) {\n return this.plusDays(daysToSubtract * -1);\n }\n\n /**\n * Queries this date using the specified query.\n *\n * This queries this date using the specified query strategy object.\n * The {@link TemporalQuery} object defines the logic to be used to\n * obtain the result. Read the documentation of the query to understand\n * what the result of this method will be.\n *\n * The result of this method is obtained by invoking the\n * {@link TemporalQuery#queryFrom(TemporalAccessor)} method on the\n * specified query passing {@link this} as the argument.\n *\n * @param {TemporalQuery} query - the query to invoke, not null\n * @return the query result, null may be returned (defined by the query)\n * @throws {DateTimeException} if unable to query (defined by the query)\n * @throws {ArithmeticException} if numeric overflow occurs (defined by the query)\n */\n query(query) {\n requireNonNull(query, 'query');\n if (query === TemporalQueries.localDate()) {\n return this;\n }\n return super.query(query);\n }\n\n /**\n * Adjusts the specified temporal object to have the same date as this object.\n *
\n * This returns a temporal object of the same observable type as the input\n * with the date changed to be the same as this.\n *
\n * The adjustment is equivalent to using {@link Temporal#with(TemporalField, long)}\n * passing {@link ChronoField.EPOCH_DAY} as the field.\n *
\n * In most cases, it is clearer to reverse the calling pattern by using\n * {@link Temporal#with(TemporalAdjuster)}:\n *
\n * // these two lines are equivalent, but the second approach is recommended\n * temporal = thisLocalDate.adjustInto(temporal);\n * temporal = temporal.with(thisLocalDate);\n *\n *\n * @param {!TemporalAdjuster} temporal - the target object to be adjusted, not null\n * @return the adjusted object, not null\n * @throws {DateTimeException} if unable to make the adjustment\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n adjustInto(temporal) {\n return super.adjustInto(temporal);\n }\n\n /**\n * function overloading for {@link LocalDate.until}\n * \n * called with 1 (or less) arguments {{@link LocalDate.until1}} is called\n * otherwise {@link LocalDate.until2}\n * \n * @param {!TemporalAccessor} p1\n * @param {TemporalUnit} p2 - not null if called with 2 arguments\n * @return {number|Period}\n */\n until(p1, p2){\n if(arguments.length < 2){\n return this.until1(p1);\n } else {\n return this.until2(p1, p2);\n }\n }\n\n /**\n * Calculates the period between this date and another date in\n * terms of the specified unit.\n *
\n * This calculates the period between two dates in terms of a single unit.\n * The start and end points are {@link this} and the specified date.\n * The result will be negative if the end is before the start.\n * The {@link Temporal} passed to this method must be a {@link LocalDate}.\n * For example, the period in days between two dates can be calculated\n * using {@link startDate.until(endDate, DAYS)}.\n *
\n * The calculation returns a whole number, representing the number of\n * complete units between the two dates.\n * For example, the period in months between 2012-06-15 and 2012-08-14\n * will only be one month as it is one day short of two months.\n *
\n * This method operates in association with {@link TemporalUnit#between}.\n * The result of this method is a {@link long} representing the amount of\n * the specified unit. By contrast, the result of {@link between} is an\n * object that can be used directly in addition/subtraction:\n *
\n * long period = start.until(end, MONTHS); // this method\n * dateTime.plus(MONTHS.between(start, end)); // use in plus/minus\n *\n *
\n * The calculation is implemented in this method for {@link ChronoUnit}.\n * The units {@link DAYS}, {@link WEEKS}, {@link MONTHS}, {@link YEARS},\n * {@link DECADES}, {@link CENTURIES}, {@link MILLENNIA} and {@link ERAS}\n * are supported. Other {@link ChronoUnit} values will throw an exception.\n *
\n * If the unit is not a {@link ChronoUnit}, then the result of this method\n * is obtained by invoking {@link TemporalUnit.between(Temporal, Temporal)}\n * passing {@link this} as the first argument and the input temporal as\n * the second argument.\n *\n * @param {!TemporalAccessor} endExclusive - the end date, which is converted to a {@link LocalDate}, not null\n * @param {!TemporalUnit} unit - the unit to measure the period in, not null\n * @return {number} the amount of the period between this date and the end date\n * @throws {DateTimeException} if the period cannot be calculated\n * @throws {ArithmeticException} if numeric overflow occurs\n */\n until2(endExclusive, unit) {\n var end = LocalDate.from(endExclusive);\n if (unit instanceof ChronoUnit) {\n switch (unit) {\n case ChronoUnit.DAYS: return this.daysUntil(end);\n case ChronoUnit.WEEKS: return MathUtil.intDiv(this.daysUntil(end), 7);\n case ChronoUnit.MONTHS: return this._monthsUntil(end);\n case ChronoUnit.YEARS: return MathUtil.intDiv(this._monthsUntil(end), 12);\n case ChronoUnit.DECADES: return MathUtil.intDiv(this._monthsUntil(end), 120);\n case ChronoUnit.CENTURIES: return MathUtil.intDiv(this._monthsUntil(end), 1200);\n case ChronoUnit.MILLENNIA: return MathUtil.intDiv(this._monthsUntil(end), 12000);\n case ChronoUnit.ERAS: return end.getLong(ChronoField.ERA) - this.getLong(ChronoField.ERA);\n }\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n }\n return unit.between(this, end);\n }\n\n /**\n * \n * @param {!LocalDate} end\n * @returns {number}\n * @protected\n */\n daysUntil(end) {\n return end.toEpochDay() - this.toEpochDay(); // no overflow\n }\n\n /**\n * \n * @param {!LocalDate} end\n * @returns {number}\n * @private\n */\n _monthsUntil(end) {\n var packed1 = this._prolepticMonth() * 32 + this.dayOfMonth(); // no overflow\n var packed2 = end._prolepticMonth() * 32 + end.dayOfMonth(); // no overflow\n return MathUtil.intDiv((packed2 - packed1), 32);\n }\n\n /**\n * Calculates the period between this date and another date as a {@link Period}.\n *
\n * This calculates the period between two dates in terms of years, months and days.\n * The start and end points are {@link this} and the specified date.\n * The result will be negative if the end is before the start.\n *
\n * The calculation is performed using the ISO calendar system.\n * If necessary, the input date will be converted to ISO.\n *
\n * The start date is included, but the end date is not.\n * The period is calculated by removing complete months, then calculating\n * the remaining number of days, adjusting to ensure that both have the same sign.\n * The number of months is then normalized into years and months based on a 12 month year.\n * A month is considered to be complete if the end day-of-month is greater\n * than or equal to the start day-of-month.\n * For example, from {@link 2010-01-15} to {@link 2011-03-18} is \"1 year, 2 months and 3 days\".\n *
\n * The result of this method can be a negative period if the end is before the start.\n * The negative sign will be the same in each of year, month and day.\n *
\n * There are two equivalent ways of using this method.\n * The first is to invoke this method.\n * The second is to use {@link Period#between(LocalDate, LocalDate)}:\n *
\n * // these two lines are equivalent\n * period = start.until(end);\n * period = Period.between(start, end);\n *\n * The choice should be made based on which makes the code more readable.\n *\n * @param {!TemporalAccessor} endDate - the end date, exclusive, which may be in any chronology, not null\n * @return {Period} the period between this date and the end date, not null\n */\n until1(endDate) {\n var end = LocalDate.from(endDate);\n var totalMonths = end._prolepticMonth() - this._prolepticMonth(); // safe\n var days = end._day - this._day;\n if (totalMonths > 0 && days < 0) {\n totalMonths--;\n var calcDate = this.plusMonths(totalMonths);\n days = (end.toEpochDay() - calcDate.toEpochDay()); // safe\n } else if (totalMonths < 0 && days > 0) {\n totalMonths++;\n days -= end.lengthOfMonth();\n }\n var years = MathUtil.intDiv(totalMonths, 12); // safe\n var months = MathUtil.intMod(totalMonths, 12); // safe\n return Period.of(MathUtil.safeToInt(years), months, days);\n }\n\n\n //-----------------------------------------------------------------------\n /**\n * function overloading for {@link LocalDate.atTime} \n * \n * if called with 1 argument {@link LocalDate.atTime1} is called\n * otherwise {@link LocalDate.atTime4}\n * \n * @return {LocalDateTime} the local date-time formed from this date and the specified params\n */\n atTime(){\n if(arguments.length===1){\n return this.atTime1.apply(this, arguments);\n } else {\n return this.atTime4.apply(this, arguments);\n }\n }\n \n /**\n * Combines this date with a time to create a {@link LocalDateTime}.\n *
\n * This returns a {@link LocalDateTime} formed from this date at the specified time.\n * All possible combinations of date and time are valid.\n *\n * @param {LocalTime} time - the time to combine with, not null\n * @return {LocalDateTime} the local date-time formed from this date and the specified time, not null\n */\n atTime1(time) {\n return LocalDateTime.of(this, time);\n }\n\n /**\n * Combines this date with a time to create a {@link LocalDateTime}.\n *
\n * This returns a {@link LocalDateTime} formed from this date at the\n * specified hour, minute, second and nanosecond.\n * The individual time fields must be within their valid range.\n * All possible combinations of date and time are valid.\n *\n * @param {!number} hour - the hour-of-day to use, from 0 to 23\n * @param {!number} minute - the minute-of-hour to use, from 0 to 59\n * @param {number} [second=0] - the second-of-minute to represent, from 0 to 59\n * @param {number} [nanoOfSecond=0] - the nano-of-second to represent, from 0 to 999,999,999\n * @return {LocalDateTime} the local date-time formed from this date and the specified time, not null\n * @throws {DateTimeException} if the value of any field is out of range\n */\n atTime4(hour, minute, second=0, nanoOfSecond=0) {\n return this.atTime1(LocalTime.of(hour, minute, second, nanoOfSecond));\n }\n\n /**\n * Combines this date with an offset time to create an {@link OffsetDateTime}.\n *
\n * This returns an {@link OffsetDateTime} formed from this date at the specified time.\n * All possible combinations of date and time are valid.\n *\n * @param {OffsetTime} time - the time to combine with, not null\n * @return {OffsetDateTime} the offset date-time formed from this date and the specified time, not null\n */\n/*\n _atTimeOffsetTime(time) { // atTime(offsetTime)\n return OffsetDateTime.of(LocalDateTime.of(this, time.toLocalTime()), time.getOffset());\n }\n*/\n\n /**\n * Combines this date with the time of midnight to create a {@link LocalDateTime}\n * at the start of this date.\n *
\n * This returns a {@link LocalDateTime} formed from this date at the time of\n * midnight, 00:00, at the start of this date.\n *\n * @return {LocalDateTime} the local date-time of midnight at the start of this date, not null\n */\n atStartOfDay() {\n return LocalDateTime.of(this, LocalTime.MIDNIGHT);\n }\n\n /**\n * Combines this date with a time-zone to create a {@link ZonedDateTime}\n * at the start of the day\n *
\n * This returns a {@link ZonedDateTime} formed from this date at the\n * specified zone, with the time set to be the earliest valid time according\n * to the rules in the time-zone.\n *
\n * Time-zone rules, such as daylight savings, mean that not every local date-time\n * is valid for the specified zone, thus the local date-time may not be midnight.\n *
\n * In most cases, there is only one valid offset for a local date-time.\n * In the case of an overlap, there are two valid offsets, and the earlier one is used,\n * corresponding to the first occurrence of midnight on the date.\n * In the case of a gap, the zoned date-time will represent the instant just after the gap.\n *
\n * If the zone ID is a {@link ZoneOffset}, then the result always has a time of midnight.\n *
\n * To convert to a specific time in a given time-zone call {@link #atTime(LocalTime)}\n * followed by {@link LocalDateTime#atZone(ZoneId)}.\n *\n * @param {ZoneId} zone - the zone ID to use, not null\n * @return {ZonedDateTime} the zoned date-time formed from this date and the earliest valid time for the zone, not null\n */\n/*\n _atStartOfDayZonedDateTime(zone) { //atStartOfDay(zoneId)\n requireNonNull(zone, 'zone');\n // need to handle case where there is a gap from 11:30 to 00:30\n // standard ZDT factory would result in 01:00 rather than 00:30\n var ldt = this.atTime(LocalTime.MIDNIGHT);\n if (zone instanceof ZoneOffset === false) {\n var rules = zone.getRules();\n var trans = rules.getTransition(ldt);\n if (trans != null && trans.isGap()) {\n ldt = trans.getDateTimeAfter();\n }\n }\n return ZonedDateTime.of(ldt, zone);\n }\n*/\n\n /**\n * Converts this date to the Epoch Day.\n *\n * The Epoch Day count is a simple incrementing count of days where day 0 is 1970-01-01 (ISO).\n * This definition is the same for all chronologies, enabling conversion.\n *\n * @return {number} the Epoch Day equivalent to this date\n */\n toEpochDay() {\n var y = this.year();\n var m = this.monthValue();\n var total = 0;\n total += 365 * y;\n if (y >= 0) {\n total += MathUtil.intDiv(y + 3, 4) - MathUtil.intDiv(y + 99, 100) + MathUtil.intDiv(y + 399, 400);\n } else {\n total -= MathUtil.intDiv(y, -4) - MathUtil.intDiv(y, -100) + MathUtil.intDiv(y, -400);\n }\n total += MathUtil.intDiv(367 * m - 362, 12);\n total += this.dayOfMonth() - 1;\n if (m > 2) {\n total--;\n if (!IsoChronology.isLeapYear(y)) {\n total--;\n }\n }\n return total - DAYS_0000_TO_1970;\n }\n\n /**\n * Compares this date to another date.\n *
\n * The comparison is primarily based on the date, from earliest to latest.\n * It is \"consistent with equals\", as defined by {@link Comparable}.\n *
\n * If all the dates being compared are instances of {@link LocalDate},\n * then the comparison will be entirely based on the date.\n * If some dates being compared are in different chronologies, then the\n * chronology is also considered, see {@link ChronoLocalDate.compareTo}.\n *\n * @param {!LocalDate} other - the other date to compare to, not null\n * @return {number} the comparator value, negative if less, positive if greater\n */\n compareTo(other) {\n requireNonNull(other, 'other');\n requireInstance(other, LocalDate, 'other');\n if (other instanceof LocalDate) {\n return this._compareTo0(other);\n }\n // super.compareTo(other);\n }\n\n /**\n *\n * @param {!LocalDate} otherDate\n * @returns {number}\n * @private\n */\n _compareTo0(otherDate) {\n var cmp = (this._year - otherDate._year);\n if (cmp === 0) {\n cmp = (this._month - otherDate._month);\n if (cmp === 0) {\n cmp = (this._day - otherDate._day);\n }\n }\n return cmp;\n }\n\n /**\n * Checks if this date is after the specified date.\n *
\n * This checks to see if this date represents a point on the\n * local time-line after the other date.\n *
\n * LocalDate a = LocalDate.of(2012, 6, 30);\n * LocalDate b = LocalDate.of(2012, 7, 1);\n * a.isAfter(b) == false\n * a.isAfter(a) == false\n * b.isAfter(a) == true\n *\n *
\n * This method only considers the position of the two dates on the local time-line.\n * It does not take into account the chronology, or calendar system.\n * This is different from the comparison in {@link #compareTo(ChronoLocalDate)},\n * but is the same approach as {@link #DATE_COMPARATOR}.\n *\n * @param {!LocalDate} other - the other date to compare to, not null\n * @return {boolean} true if this date is after the specified date\n */\n isAfter(other) {\n return this.compareTo(other) > 0;\n // return super.isAfter(other) if not instanceof LocalDate\n }\n\n /**\n * Checks if this date is before the specified date.\n *
\n * This checks to see if this date represents a point on the\n * local time-line before the other date.\n *
\n * LocalDate a = LocalDate.of(2012, 6, 30);\n * LocalDate b = LocalDate.of(2012, 7, 1);\n * a.isBefore(b) == true\n * a.isBefore(a) == false\n * b.isBefore(a) == false\n *\n *
\n * This method only considers the position of the two dates on the local time-line.\n * It does not take into account the chronology, or calendar system.\n * This is different from the comparison in {@link #compareTo(ChronoLocalDate)},\n * but is the same approach as {@link #DATE_COMPARATOR}.\n *\n * @param {!LocalDate} other - the other date to compare to, not null\n * @return {boolean} true if this date is before the specified date\n */\n isBefore(other) {\n return this.compareTo(other) < 0;\n // return super.isBefore(other) if not instanceof LocalDate\n }\n\n /**\n * Checks if this date is equal to the specified date.\n *
\n * This checks to see if this date represents the same point on the\n * local time-line as the other date.\n *
\n * LocalDate a = LocalDate.of(2012, 6, 30);\n * LocalDate b = LocalDate.of(2012, 7, 1);\n * a.isEqual(b) == false\n * a.isEqual(a) == true\n * b.isEqual(a) == false\n *\n *
\n * This method only considers the position of the two dates on the local time-line.\n * It does not take into account the chronology, or calendar system.\n * This is different from the comparison in {@link #compareTo(ChronoLocalDate)}\n * but is the same approach as {@link #DATE_COMPARATOR}.\n *\n * @param {!LocalDate} other - the other date to compare to, not null\n * @return {boolean} true if this date is equal to the specified date\n */\n isEqual(other) {\n return this.compareTo(other) === 0;\n // return super.isEqual(other) if not instanceof LocalDate\n }\n\n /**\n * Checks if this date is equal to another date.\n *\n * Compares this LocalDate with another ensuring that the date is the same.\n *\n * Only objects of type LocalDate are compared, other types return false.\n *\n * @param {*} otherDate - the object to check, null returns false\n * @return {boolean} true if this is equal to the other date\n */\n equals(otherDate) {\n if (this === otherDate) {\n return true;\n }\n if (otherDate instanceof LocalDate) {\n return this._compareTo0(otherDate) === 0;\n }\n return false;\n }\n\n /**\n * A hash code for this date.\n *\n * @return {number} a suitable hash code\n */\n hashCode() {\n var yearValue = this._year;\n var monthValue = this._month;\n var dayValue = this._day;\n return (yearValue & 0xFFFFF800) ^ ((yearValue << 11) + (monthValue << 6) + (dayValue));\n }\n\n /**\n * Outputs this date as a String, such as 2007-12-03.\n * The output will be in the ISO-8601 format uuuu-MM-dd.\n *\n * @return {string} a string representation of this date, not null\n */\n toString() {\n var dayString, monthString, yearString;\n\n var yearValue = this.year();\n var monthValue = this.monthValue();\n var dayValue = this.dayOfMonth();\n\n var absYear = Math.abs(yearValue);\n\n if (absYear < 1000) {\n if (yearValue < 0) {\n yearString = '-' + ('' + (yearValue - 10000)).slice(-4);\n } else {\n yearString = ('' + (yearValue + 10000)).slice(-4);\n }\n } else {\n if (yearValue > 9999) {\n yearString = '+' + yearValue;\n } else {\n yearString = '' + yearValue;\n }\n }\n\n if (monthValue < 10) {\n monthString = '-0' + monthValue;\n } else {\n monthString = '-' + monthValue;\n }\n\n if (dayValue < 10) {\n dayString = '-0' + dayValue;\n } else {\n dayString = '-' + dayValue;\n }\n\n return yearString + monthString + dayString;\n }\n}\n\nexport function _init() {\n /**\n * The minimum supported {@link LocalDate}\n * This could be used by an application as a \"far past\" date.\n */\n LocalDate.MIN = LocalDate.of(Year.MIN_VALUE, 1, 1);\n /**\n * The maximum supported {@link LocalDate}\n * This could be used by an application as a \"far future\" date.\n */\n LocalDate.MAX = LocalDate.of(Year.MAX_VALUE, 12, 31);\n\n LocalDate.FROM = createTemporalQuery('LocalDate.FROM', (temporal) => {\n return LocalDate.from(temporal);\n });\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/LocalDate.js\n **/","/**\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport {Enum} from '../Enum';\n\nimport {LocalDate} from '../LocalDate';\nimport {Month} from '../Month';\nimport {Year} from '../Year';\n\nimport {ChronoField} from '../temporal/ChronoField';\nimport {ResolverStyle} from '../format/ResolverStyle';\n\nexport class IsoChronology extends Enum{\n /**\n * Checks if the year is a leap year, according to the ISO proleptic\n * calendar system rules.\n *\n * This method applies the current rules for leap years across the whole time-line.\n * In general, a year is a leap year if it is divisible by four without\n * remainder. However, years divisible by 100, are not leap years, with\n * the exception of years divisible by 400 which are.\n *\n * For example, 1904 is a leap year it is divisible by 4.\n * 1900 was not a leap year as it is divisible by 100, however 2000 was a\n * leap year as it is divisible by 400.\n *\n * The calculation is proleptic - applying the same rules into the far future and far past.\n * This is historically inaccurate, but is correct for the ISO-8601 standard.\n *\n * @param {number} prolepticYear - the ISO proleptic year to check\n * @return {boolean} true if the year is leap, false otherwise\n */\n static isLeapYear(prolepticYear) {\n return ((prolepticYear & 3) === 0) && ((prolepticYear % 100) !== 0 || (prolepticYear % 400) === 0);\n }\n\n resolveDate(fieldValues, resolverStyle) {\n if (fieldValues.containsKey(ChronoField.EPOCH_DAY)) {\n return LocalDate.ofEpochDay(fieldValues.remove(ChronoField.EPOCH_DAY));\n }\n\n // normalize fields\n/*\n var prolepticMonth = fieldValues.remove(PROLEPTIC_MONTH);\n if (prolepticMonth != null) {\n if (resolverStyle != ResolverStyle.LENIENT) {\n PROLEPTIC_MONTH.checkValidValue(prolepticMonth);\n }\n updateResolveMap(fieldValues, ChronoField.MONTH_OF_YEAR, Jdk8Methods.floorMod(prolepticMonth, 12) + 1);\n updateResolveMap(fieldValues, ChronoField.YEAR, Jdk8Methods.floorDiv(prolepticMonth, 12));\n }\n*/\n\n // eras\n/*\n Long yoeLong = fieldValues.remove(YEAR_OF_ERA);\n if (yoeLong != null) {\n if (resolverStyle != ResolverStyle.LENIENT) {\n YEAR_OF_ERA.checkValidValue(yoeLong);\n }\n Long era = fieldValues.remove(ERA);\n if (era == null) {\n Long year = fieldValues.get(ChronoField.YEAR);\n if (resolverStyle == ResolverStyle.STRICT) {\n // do not invent era if strict, but do cross-check with year\n if (year != null) {\n updateResolveMap(fieldValues, ChronoField.YEAR, (year > 0 ? yoeLong: Jdk8Methods.safeSubtract(1, yoeLong)));\n } else {\n // reinstate the field removed earlier, no cross-check issues\n fieldValues.put(YEAR_OF_ERA, yoeLong);\n }\n } else {\n // invent era\n updateResolveMap(fieldValues, ChronoField.YEAR, (year == null || year > 0 ? yoeLong: Jdk8Methods.safeSubtract(1, yoeLong)));\n }\n } else if (era.longValue() == 1L) {\n updateResolveMap(fieldValues, ChronoField.YEAR, yoeLong);\n } else if (era.longValue() == 0L) {\n updateResolveMap(fieldValues, ChronoField.YEAR, Jdk8Methods.safeSubtract(1, yoeLong));\n } else {\n throw new DateTimeException(\"Invalid value for era: \" + era);\n }\n } else if (fieldValues.containsKey(ERA)) {\n ERA.checkValidValue(fieldValues.get(ERA)); // always validated\n }\n*/\n\n // build date\n if (fieldValues.containsKey(ChronoField.YEAR)) {\n if (fieldValues.containsKey(ChronoField.MONTH_OF_YEAR)) {\n if (fieldValues.containsKey(ChronoField.DAY_OF_MONTH)) {\n var y = ChronoField.YEAR.checkValidIntValue(fieldValues.remove(ChronoField.YEAR));\n var moy = fieldValues.remove(ChronoField.MONTH_OF_YEAR);\n var dom = fieldValues.remove(ChronoField.DAY_OF_MONTH);\n if (resolverStyle === ResolverStyle.LENIENT) {\n var months = moy - 1;\n var days = dom - 1;\n return LocalDate.of(y, 1, 1).plusMonths(months).plusDays(days);\n } else if (resolverStyle === ResolverStyle.SMART){\n ChronoField.DAY_OF_MONTH.checkValidValue(dom);\n if (moy === 4 || moy === 6 || moy === 9 || moy === 11) {\n dom = Math.min(dom, 30);\n } else if (moy === 2) {\n dom = Math.min(dom, Month.FEBRUARY.length(Year.isLeap(y)));\n }\n return LocalDate.of(y, moy, dom);\n } else {\n return LocalDate.of(y, moy, dom);\n }\n }\n/*\n if (fieldValues.containsKey(ALIGNED_WEEK_OF_MONTH)) {\n if (fieldValues.containsKey(ALIGNED_DAY_OF_WEEK_IN_MONTH)) {\n int y = ChronoField.YEAR.checkValidIntValue(fieldValues.remove(ChronoField.YEAR));\n if (resolverStyle == ResolverStyle.LENIENT) {\n long months = Jdk8Methods.safeSubtract(fieldValues.remove(ChronoField.MONTH_OF_YEAR), 1);\n long weeks = Jdk8Methods.safeSubtract(fieldValues.remove(ALIGNED_WEEK_OF_MONTH), 1);\n long days = Jdk8Methods.safeSubtract(fieldValues.remove(ALIGNED_DAY_OF_WEEK_IN_MONTH), 1);\n return LocalDate.of(y, 1, 1).plusMonths(months).plusWeeks(weeks).plusDays(days);\n }\n int moy = ChronoField.MONTH_OF_YEAR.checkValidIntValue(fieldValues.remove(ChronoField.MONTH_OF_YEAR));\n int aw = ALIGNED_WEEK_OF_MONTH.checkValidIntValue(fieldValues.remove(ALIGNED_WEEK_OF_MONTH));\n int ad = ALIGNED_DAY_OF_WEEK_IN_MONTH.checkValidIntValue(fieldValues.remove(ALIGNED_DAY_OF_WEEK_IN_MONTH));\n LocalDate date = LocalDate.of(y, moy, 1).plusDays((aw - 1) * 7 + (ad - 1));\n if (resolverStyle == ResolverStyle.STRICT && date.get(ChronoField.MONTH_OF_YEAR) != moy) {\n throw new DateTimeException(\"Strict mode rejected date parsed to a different month\");\n }\n return date;\n }\n if (fieldValues.containsKey(DAY_OF_WEEK)) {\n int y = ChronoField.YEAR.checkValidIntValue(fieldValues.remove(ChronoField.YEAR));\n if (resolverStyle == ResolverStyle.LENIENT) {\n long months = Jdk8Methods.safeSubtract(fieldValues.remove(ChronoField.MONTH_OF_YEAR), 1);\n long weeks = Jdk8Methods.safeSubtract(fieldValues.remove(ALIGNED_WEEK_OF_MONTH), 1);\n long days = Jdk8Methods.safeSubtract(fieldValues.remove(DAY_OF_WEEK), 1);\n return LocalDate.of(y, 1, 1).plusMonths(months).plusWeeks(weeks).plusDays(days);\n }\n int moy = ChronoField.MONTH_OF_YEAR.checkValidIntValue(fieldValues.remove(ChronoField.MONTH_OF_YEAR));\n int aw = ALIGNED_WEEK_OF_MONTH.checkValidIntValue(fieldValues.remove(ALIGNED_WEEK_OF_MONTH));\n int dow = DAY_OF_WEEK.checkValidIntValue(fieldValues.remove(DAY_OF_WEEK));\n LocalDate date = LocalDate.of(y, moy, 1).plusWeeks(aw - 1).with(nextOrSame(DayOfWeek.of(dow)));\n if (resolverStyle == ResolverStyle.STRICT && date.get(ChronoField.MONTH_OF_YEAR) != moy) {\n throw new DateTimeException(\"Strict mode rejected date parsed to a different month\");\n }\n return date;\n }\n }\n*/\n }\n/*\n if (fieldValues.containsKey(DAY_OF_YEAR)) {\n int y = ChronoField.YEAR.checkValidIntValue(fieldValues.remove(ChronoField.YEAR));\n if (resolverStyle == ResolverStyle.LENIENT) {\n long days = Jdk8Methods.safeSubtract(fieldValues.remove(DAY_OF_YEAR), 1);\n return LocalDate.ofYearDay(y, 1).plusDays(days);\n }\n int doy = DAY_OF_YEAR.checkValidIntValue(fieldValues.remove(DAY_OF_YEAR));\n return LocalDate.ofYearDay(y, doy);\n }\n*/\n/*\n if (fieldValues.containsKey(ALIGNED_WEEK_OF_YEAR)) {\n if (fieldValues.containsKey(ALIGNED_DAY_OF_WEEK_IN_YEAR)) {\n int y = ChronoField.YEAR.checkValidIntValue(fieldValues.remove(ChronoField.YEAR));\n if (resolverStyle == ResolverStyle.LENIENT) {\n long weeks = Jdk8Methods.safeSubtract(fieldValues.remove(ALIGNED_WEEK_OF_YEAR), 1);\n long days = Jdk8Methods.safeSubtract(fieldValues.remove(ALIGNED_DAY_OF_WEEK_IN_YEAR), 1);\n return LocalDate.of(y, 1, 1).plusWeeks(weeks).plusDays(days);\n }\n int aw = ALIGNED_WEEK_OF_YEAR.checkValidIntValue(fieldValues.remove(ALIGNED_WEEK_OF_YEAR));\n int ad = ALIGNED_DAY_OF_WEEK_IN_YEAR.checkValidIntValue(fieldValues.remove(ALIGNED_DAY_OF_WEEK_IN_YEAR));\n LocalDate date = LocalDate.of(y, 1, 1).plusDays((aw - 1) * 7 + (ad - 1));\n if (resolverStyle == ResolverStyle.STRICT && date.get(ChronoField.YEAR) != y) {\n throw new DateTimeException(\"Strict mode rejected date parsed to a different year\");\n }\n return date;\n }\n if (fieldValues.containsKey(DAY_OF_WEEK)) {\n int y = ChronoField.YEAR.checkValidIntValue(fieldValues.remove(ChronoField.YEAR));\n if (resolverStyle == ResolverStyle.LENIENT) {\n long weeks = Jdk8Methods.safeSubtract(fieldValues.remove(ALIGNED_WEEK_OF_YEAR), 1);\n long days = Jdk8Methods.safeSubtract(fieldValues.remove(DAY_OF_WEEK), 1);\n return LocalDate.of(y, 1, 1).plusWeeks(weeks).plusDays(days);\n }\n int aw = ALIGNED_WEEK_OF_YEAR.checkValidIntValue(fieldValues.remove(ALIGNED_WEEK_OF_YEAR));\n int dow = DAY_OF_WEEK.checkValidIntValue(fieldValues.remove(DAY_OF_WEEK));\n LocalDate date = LocalDate.of(y, 1, 1).plusWeeks(aw - 1).with(nextOrSame(DayOfWeek.of(dow)));\n if (resolverStyle == ResolverStyle.STRICT && date.get(ChronoField.YEAR) != y) {\n throw new DateTimeException(\"Strict mode rejected date parsed to a different month\");\n }\n return date;\n }\n }\n*/\n }\n return null;\n }\n\n}\n\nexport function _init() {\n IsoChronology.INSTANCE = new IsoChronology('IsoChronology');\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/chrono/IsoChronology.js\n **/","/**\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n/***\n * Base class for a pseudo enum\n */\nexport class Enum {\n constructor(name){\n this._name = name;\n }\n\n equals(other){\n return this === other;\n }\n\n toString() {\n return this._name;\n }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/Enum.js\n **/","/**\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport {assert} from './assert';\nimport {MathUtil} from './MathUtil';\n\nimport {ChronoField} from './temporal/ChronoField';\nimport {ChronoUnit} from './temporal/ChronoUnit';\nimport {DateTimeException, UnsupportedTemporalTypeException} from './errors';\nimport {IsoChronology} from './chrono/IsoChronology';\nimport {Temporal} from './temporal/Temporal';\nimport {TemporalQueries} from './temporal/TemporalQueries';\n\n/**\n * A month-of-year, such as 'July'.\n *
\n * {@link Month} is representing the 12 months of the year -\n * January, February, March, April, May, June, July, August, September, October,\n * November and December.\n *
\n * In addition to the textual name, each month-of-year has an {@code int} value.\n * The {@code int} value follows normal usage and the ISO-8601 standard,\n * from 1 (January) to 12 (December). It is recommended that applications use the static values defined by this class\n * rather than the {@code int} value to ensure code clarity.\n *
\n * This class represents a common concept that is found in many calendar systems.\n * As such, this class may be used by any calendar system that has the month-of-year\n * concept defined exactly equivalent to the ISO-8601 calendar system.\n *\n *
\n * This checks if this month-of-year can be queried for the specified field.\n * If false, then calling the {@link #range(TemporalField) range} and\n * {@link #get(TemporalField) get} methods will throw an exception.\n *
\n * If the field is {@link ChronoField#MONTH_OF_YEAR MONTH_OF_YEAR} then\n * this method returns true.\n * All other {@code ChronoField} instances will return false.\n *
\n * If the field is not a {@code ChronoField}, then the result of this method\n * is obtained by invoking {@code TemporalField.isSupportedBy(TemporalAccessor)}\n * passing {@code this} as the argument.\n * Whether the field is supported is determined by the field.\n *\n * @param {TemporalField} field - the field to check, null returns false\n * @return {boolean} true if the field is supported on this month-of-year, false if not\n */\n isSupported(field) {\n if (null === field) {\n return false;\n }\n if (field instanceof ChronoField) {\n return field === ChronoField.MONTH_OF_YEAR;\n }\n return field != null && field.isSupportedBy(this);\n }\n\n /**\n * Gets the value of the specified field from this month-of-year as an {@code int}.\n *
\n * This queries this month for the value of the specified field.\n * The returned value will always be within the valid range of values for the field.\n * If it is not possible to return the value, because the field is not supported\n * or for some other reason, an exception is thrown.\n *
\n * If the field is {@link ChronoField#MONTH_OF_YEAR MONTH_OF_YEAR} then the\n * value of the month-of-year, from 1 to 12, will be returned.\n * All other {@code ChronoField} instances will throw an {@code UnsupportedTemporalTypeException}.\n *
\n * If the field is not a {@code ChronoField}, then the result of this method\n * is obtained by invoking {@code TemporalField.getFrom(TemporalAccessor)}\n * passing {@code this} as the argument. Whether the value can be obtained,\n * and what the value represents, is determined by the field.\n *\n * @param {TemporalField} field - the field to get, not null\n * @return {Number} the value for the field, within the valid range of values\n * @throws DateTimeException if a value for the field cannot be obtained or\n * the value is outside the range of valid values for the field\n * @throws UnsupportedTemporalTypeException if the field is not supported or\n * the range of values exceeds an {@code int}\n * @throws ArithmeticException if numeric overflow occurs\n */\n get(field) {\n if (field === ChronoField.MONTH_OF_YEAR) {\n return this.value();\n }\n return this.range(field).checkValidIntValue(this.getLong(field), field);\n }\n\n /**\n * Gets the value of the specified field from this month-of-year as a {@code long}.\n *
\n * This queries this month for the value of the specified field.\n * If it is not possible to return the value, because the field is not supported\n * or for some other reason, an exception is thrown.\n *
\n * If the field is {@link ChronoField#MONTH_OF_YEAR MONTH_OF_YEAR} then the\n * value of the month-of-year, from 1 to 12, will be returned.\n * All other {@code ChronoField} instances will throw an {@code UnsupportedTemporalTypeException}.\n *
\n * If the field is not a {@code ChronoField}, then the result of this method\n * is obtained by invoking {@code TemporalField.getFrom(TemporalAccessor)}\n * passing {@code this} as the argument. Whether the value can be obtained,\n * and what the value represents, is determined by the field.\n *\n * @param {TemporalField} field - the field to get, not null\n * @return {Number} the value for the field\n * @throws DateTimeException if a value for the field cannot be obtained\n * @throws UnsupportedTemporalTypeException if the field is not supported\n * @throws ArithmeticException if numeric overflow occurs\n */\n getLong(field) {\n if (field === ChronoField.MONTH_OF_YEAR) {\n return this.value();\n } else if (field instanceof ChronoField) {\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n return field.getFrom(this);\n }\n \n /**\n * Returns the month-of-year that is the specified number of months after this one.\n *
\n * The calculation rolls around the end of the year from December to January.\n * The specified period may be negative.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} months - the months to add, positive or negative\n * @return {Month} the resulting month, not null\n */\n plus(months) {\n var amount = MathUtil.intMod(months, 12) + 12; // + 12 to make sure negative arguments are positive, the total is \"corrected\" by the next % 12\n var newMonthVal = MathUtil.intMod((this.value() + amount), 12);\n /* December is 12, not 0, but 12 % 12 = 0 */\n newMonthVal = newMonthVal === 0 ? 12 : newMonthVal;\n return Month.of(newMonthVal);\n }\n\n /**\n * Returns the month-of-year that is the specified number of months before this one.\n *
\n * The calculation rolls around the start of the year from January to December.\n * The specified period may be negative.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} months - the months to subtract, positive or negative\n * @return {Month} the resulting month, not null\n */\n minus(months) {\n return this.plus(-1 * MathUtil.intMod(months, 12));\n }\n\n /**\n * Gets the length of this month in days.\n *
\n * This takes a flag to determine whether to return the length for a leap year or not.\n *
\n * February has 28 days in a standard year and 29 days in a leap year.\n * April, June, September and November have 30 days.\n * All other months have 31 days.\n *\n * @param {boolean} leapYear - true if the length is required for a leap year\n * @return {number} the length of this month in days, from 28 to 31\n */\n length(leapYear) {\n switch (this) {\n case Month.FEBRUARY:\n return (leapYear ? 29 : 28);\n case Month.APRIL:\n case Month.JUNE:\n case Month.SEPTEMBER:\n case Month.NOVEMBER:\n return 30;\n default:\n return 31;\n }\n }\n\n /**\n * Gets the minimum length of this month in days.\n *
\n * February has a minimum length of 28 days.\n * April, June, September and November have 30 days.\n * All other months have 31 days.\n *\n * @return {number} the minimum length of this month in days, from 28 to 31\n */\n minLength() {\n switch (this) {\n case Month.FEBRUARY:\n return 28;\n case Month.APRIL:\n case Month.JUNE:\n case Month.SEPTEMBER:\n case Month.NOVEMBER:\n return 30;\n default:\n return 31;\n }\n }\n\n /**\n * Gets the maximum length of this month in days.\n *
\n * February has a maximum length of 29 days.\n * April, June, September and November have 30 days.\n * All other months have 31 days.\n *\n * @return {number} the maximum length of this month in days, from 29 to 31\n */\n maxLength() {\n switch (this) {\n case Month.FEBRUARY:\n return 29;\n case Month.APRIL:\n case Month.JUNE:\n case Month.SEPTEMBER:\n case Month.NOVEMBER:\n return 30;\n default:\n return 31;\n }\n }\n\n /**\n * Gets the day-of-year corresponding to the first day of this month.\n *
\n * This returns the day-of-year that this month begins on, using the leap\n * year flag to determine the length of February.\n *\n * @param {boolean} leapYear - true if the length is required for a leap year\n * @return {number} the day of year corresponding to the first day of this month, from 1 to 336\n */\n firstDayOfYear(leapYear) {\n var leap = leapYear ? 1 : 0;\n switch (this) {\n case Month.JANUARY:\n return 1;\n case Month.FEBRUARY:\n return 32;\n case Month.MARCH:\n return 60 + leap;\n case Month.APRIL:\n return 91 + leap;\n case Month.MAY:\n return 121 + leap;\n case Month.JUNE:\n return 152 + leap;\n case Month.JULY:\n return 182 + leap;\n case Month.AUGUST:\n return 213 + leap;\n case Month.SEPTEMBER:\n return 244 + leap;\n case Month.OCTOBER:\n return 274 + leap;\n case Month.NOVEMBER:\n return 305 + leap;\n case Month.DECEMBER:\n default:\n return 335 + leap;\n }\n }\n\n /**\n * Gets the month corresponding to the first month of this quarter.\n *
\n * The year can be divided into four quarters.\n * This method returns the first month of the quarter for the base month.\n * January, February and March return January.\n * April, May and June return April.\n * July, August and September return July.\n * October, November and December return October.\n *\n * @return {Month} the first month of the quarter corresponding to this month, not null\n */\n firstMonthOfQuarter() {\n switch (this) {\n case Month.JANUARY:\n case Month.FEBRUARY:\n case Month.MARCH:\n return Month.JANUARY;\n case Month.APRIL:\n case Month.MAY:\n case Month.JUNE:\n return Month.APRIL;\n case Month.JULY:\n case Month.AUGUST:\n case Month.SEPTEMBER:\n return Month.JULY;\n case Month.OCTOBER:\n case Month.NOVEMBER:\n case Month.DECEMBER:\n default:\n return Month.OCTOBER;\n }\n }\n \n /**\n * Queries this month-of-year using the specified query.\n *
\n * This queries this month-of-year using the specified query strategy object.\n * The {@code TemporalQuery} object defines the logic to be used to\n * obtain the result. Read the documentation of the query to understand\n * what the result of this method will be.\n *
\n * The result of this method is obtained by invoking the\n * {@link TemporalQuery#queryFrom(TemporalAccessor)} method on the\n * specified query passing {@code this} as the argument.\n *\n * @param {TemporalQuery} query - the query to invoke, not null\n * @return {*} the query result, null may be returned (defined by the query)\n * @throws DateTimeException if unable to query (defined by the query)\n * @throws ArithmeticException if numeric overflow occurs (defined by the query)\n */\n query(query) {\n assert(query != null, 'query() parameter must not be null', DateTimeException);\n if (query === TemporalQueries.chronology()) {\n return IsoChronology.INSTANCE;\n } else if (query === TemporalQueries.precision()) {\n return ChronoUnit.MONTHS;\n }\n return super.query(query);\n }\n\n\n\n /**\n * toString implementation... in JDK this is inherited from the Enum class\n * \n * @return {String}\n */\n toString() {\n switch (this) {\n case Month.JANUARY:\n return 'JANUARY';\n case Month.FEBRUARY:\n return 'FEBRUARY';\n case Month.MARCH:\n return 'MARCH';\n case Month.APRIL:\n return 'APRIL';\n case Month.MAY:\n return 'MAY';\n case Month.JUNE:\n return 'JUNE';\n case Month.JULY:\n return 'JULY';\n case Month.AUGUST:\n return 'AUGUST';\n case Month.SEPTEMBER:\n return 'SEPTEMBER';\n case Month.OCTOBER:\n return 'OCTOBER';\n case Month.NOVEMBER:\n return 'NOVEMBER';\n case Month.DECEMBER:\n return 'DECEMBER';\n default:\n return 'unknown Month, value: ' + this.value();\n }\n }\n\n /**\n * replacement for enum values\n * @return {Month[]}\n */\n static values(){\n return MONTHS.slice();\n }\n\n /**\n *\n * @param {number} month\n * @return {Month} not null\n **/\n static of(month) {\n if (month < 1 || month > 12) {\n assert(false, 'Invalid value for MonthOfYear: ' + month, DateTimeException);\n }\n return MONTHS[month-1];\n }\n}\n\nvar MONTHS;\n\nexport function _init() {\n Month.JANUARY = new Month(1);\n Month.FEBRUARY = new Month(2);\n Month.MARCH = new Month(3);\n Month.APRIL = new Month(4);\n Month.MAY = new Month(5);\n Month.JUNE = new Month(6);\n Month.JULY = new Month(7);\n Month.AUGUST = new Month(8);\n Month.SEPTEMBER = new Month(9);\n Month.OCTOBER = new Month(10);\n Month.NOVEMBER = new Month(11);\n Month.DECEMBER = new Month(12);\n\n MONTHS = [\n Month.JANUARY, Month.FEBRUARY, Month.MARCH, Month.APRIL, Month.MAY, Month.JUNE,\n Month.JULY, Month.AUGUST, Month.SEPTEMBER, Month.OCTOBER, Month.NOVEMBER, Month.DECEMBER\n ];\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Month.js\n **/","/**\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nimport {MAX_SAFE_INTEGER, MIN_SAFE_INTEGER} from '../MathUtil';\nimport {ChronoUnit} from './ChronoUnit';\nimport { TemporalField } from './TemporalField';\nimport { ValueRange } from './ValueRange';\nimport {Year} from '../Year';\n\n/**\n * A standard set of fields.\n *
\n * This set of fields provide field-based access to manipulate a date, time or date-time.\n * The standard set of fields can be extended by implementing {@link TemporalField}.\n *
\n * These fields are intended to be applicable in multiple calendar systems.\n * For example, most non-ISO calendar systems define dates as a year, month and day,\n * just with slightly different rules.\n * The documentation of each field explains how it operates.\n * \n *
\n * This uses the temporal object to find the range of valid values for the field.\n * This is similar to {@link #range()}, however this method refines the result\n * using the temporal. For example, if the field is {@code DAY_OF_MONTH} the\n * {@code range} method is not accurate as there are four possible month lengths,\n * 28, 29, 30 and 31 days. Using this method with a date allows the range to be\n * accurate, returning just one of those four options.\n *
\n * There are two equivalent ways of using this method.\n * The first is to invoke this method directly.\n * The second is to use {@link TemporalAccessor#range(TemporalField)}:\n *
\n * // these two lines are equivalent, but the second approach is recommended\n * temporal = thisField.rangeRefinedBy(temporal);\n * temporal = temporal.range(thisField);\n *\n * It is recommended to use the second approach, {@code range(TemporalField)},\n * as it is a lot clearer to read in code.\n *
\n * Implementations should perform any queries or calculations using the fields\n * available in {@link ChronoField}.\n * If the field is not supported a {@code DateTimeException} must be thrown.\n *\n * @param {!TemporalAccessor} temporal - the temporal object used to refine the result, not null\n * @return {ValueRange} the range of valid values for this field, not null\n * @throws DateTimeException if the range for the field cannot be obtained\n */\n rangeRefinedBy(temporal) {\n return temporal.range(this);\n }\n\n /**\n * Checks that the specified value is valid and fits in an {@code int}.\n *
\n * This validates that the value is within the outer range of valid values\n * returned by {@link #range()}.\n * It also checks that all valid values are within the bounds of an {@code int}.\n *
\n * This method checks against the range of the field in the ISO-8601 calendar system.\n * This range may be incorrect for other calendar systems.\n * Use {@link Chronology#range(ChronoField)} to access the correct range\n * for a different calendar system.\n *\n * @param {number} value - the value to check\n * @return {number} the value that was passed in\n */\n checkValidIntValue(value) {\n return this.range().checkValidIntValue(value, this);\n }\n\n /**\n *\n * @param {TemporalAccessor} temporal\n * @returns {number}\n */\n getFrom(temporal) {\n return temporal.getLong(this);\n }\n\n /**\n *\n * @returns {string}\n */\n toString(){\n return this.name();\n }\n\n /**\n *\n * @param {*} other\n * @returns {boolean}\n */\n equals(other){\n return this === other;\n }\n}\n\nexport function _init() {\n\n ChronoField.NANO_OF_SECOND = new ChronoField('NanoOfSecond', ChronoUnit.NANOS, ChronoUnit.SECONDS, ValueRange.of(0, 999999999));\n\n ChronoField.NANO_OF_DAY = new ChronoField('NanoOfDay', ChronoUnit.NANOS, ChronoUnit.DAYS, ValueRange.of(0, 86400 * 1000000000 - 1));\n\n ChronoField.MICRO_OF_SECOND = new ChronoField('MicroOfSecond', ChronoUnit.MICROS, ChronoUnit.SECONDS, ValueRange.of(0, 999999));\n\n ChronoField.MICRO_OF_DAY = new ChronoField('MicroOfDay', ChronoUnit.MICROS, ChronoUnit.DAYS, ValueRange.of(0, 86400 * 1000000 - 1));\n\n ChronoField.MILLI_OF_SECOND = new ChronoField('MilliOfSecond', ChronoUnit.MILLIS, ChronoUnit.SECONDS, ValueRange.of(0, 999));\n\n ChronoField.MILLI_OF_DAY = new ChronoField('MilliOfDay', ChronoUnit.MILLIS, ChronoUnit.DAYS, ValueRange.of(0, 86400 * 1000 - 1));\n\n ChronoField.SECOND_OF_MINUTE = new ChronoField('SecondOfMinute', ChronoUnit.SECONDS, ChronoUnit.MINUTES, ValueRange.of(0, 59));\n\n ChronoField.SECOND_OF_DAY = new ChronoField('SecondOfDay', ChronoUnit.SECONDS, ChronoUnit.DAYS, ValueRange.of(0, 86400 - 1));\n\n ChronoField.MINUTE_OF_HOUR = new ChronoField('MinuteOfHour', ChronoUnit.MINUTES, ChronoUnit.HOURS, ValueRange.of(0, 59));\n\n ChronoField.MINUTE_OF_DAY = new ChronoField('MinuteOfDay', ChronoUnit.MINUTES, ChronoUnit.DAYS, ValueRange.of(0, (24 * 60) - 1));\n\n ChronoField.HOUR_OF_AMPM = new ChronoField('HourOfAmPm', ChronoUnit.HOURS, ChronoUnit.HALF_DAYS, ValueRange.of(0, 11));\n\n ChronoField.CLOCK_HOUR_OF_AMPM = new ChronoField('ClockHourOfAmPm', ChronoUnit.HOURS, ChronoUnit.HALF_DAYS, ValueRange.of(1, 12));\n\n ChronoField.HOUR_OF_DAY = new ChronoField('HourOfDay', ChronoUnit.HOURS, ChronoUnit.DAYS, ValueRange.of(0, 23));\n\n ChronoField.CLOCK_HOUR_OF_DAY = new ChronoField('ClockHourOfDay', ChronoUnit.HOURS, ChronoUnit.DAYS, ValueRange.of(1, 24));\n\n ChronoField.AMPM_OF_DAY = new ChronoField('AmPmOfDay', ChronoUnit.HALF_DAYS, ChronoUnit.DAYS, ValueRange.of(0, 1));\n\n ChronoField.DAY_OF_WEEK = new ChronoField('DayOfWeek', ChronoUnit.DAYS, ChronoUnit.WEEKS, ValueRange.of(1, 7));\n\n ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH = new ChronoField('AlignedDayOfWeekInMonth', ChronoUnit.DAYS, ChronoUnit.WEEKS, ValueRange.of(1, 7));\n\n ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR = new ChronoField('AlignedDayOfWeekInYear', ChronoUnit.DAYS, ChronoUnit.WEEKS, ValueRange.of(1, 7));\n\n ChronoField.DAY_OF_MONTH = new ChronoField('DayOfMonth', ChronoUnit.DAYS, ChronoUnit.MONTHS, ValueRange.of(1, 28, 31), 'day');\n\n ChronoField.DAY_OF_YEAR = new ChronoField('DayOfYear', ChronoUnit.DAYS, ChronoUnit.YEARS, ValueRange.of(1, 365, 366));\n\n ChronoField.EPOCH_DAY = new ChronoField('EpochDay', ChronoUnit.DAYS, ChronoUnit.FOREVER, ValueRange.of(Math.floor(Year.MIN_VALUE * 365.25), Math.floor(Year.MAX_VALUE * 365.25)));\n\n ChronoField.ALIGNED_WEEK_OF_MONTH = new ChronoField('AlignedWeekOfMonth', ChronoUnit.WEEKS, ChronoUnit.MONTHS, ValueRange.of(1, 4, 5));\n\n ChronoField.ALIGNED_WEEK_OF_YEAR = new ChronoField('AlignedWeekOfYear', ChronoUnit.WEEKS, ChronoUnit.YEARS, ValueRange.of(1, 53));\n\n ChronoField.MONTH_OF_YEAR = new ChronoField('MonthOfYear', ChronoUnit.MONTHS, ChronoUnit.YEARS, ValueRange.of(1, 12), 'month');\n\n ChronoField.PROLEPTIC_MONTH = new ChronoField('ProlepticMonth', ChronoUnit.MONTHS, ChronoUnit.FOREVER, ValueRange.of(Year.MIN_VALUE * 12, Year.MAX_VALUE * 12 + 11));\n\n ChronoField.YEAR_OF_ERA = new ChronoField('YearOfEra', ChronoUnit.YEARS, ChronoUnit.FOREVER, ValueRange.of(1, Year.MAX_VALUE, Year.MAX_VALUE + 1));\n\n ChronoField.YEAR = new ChronoField('Year', ChronoUnit.YEARS, ChronoUnit.FOREVER, ValueRange.of(Year.MIN_VALUE, Year.MAX_VALUE), 'year');\n\n ChronoField.ERA = new ChronoField('Era', ChronoUnit.ERAS, ChronoUnit.FOREVER, ValueRange.of(0, 1));\n\n ChronoField.INSTANT_SECONDS = new ChronoField('InstantSeconds', ChronoUnit.SECONDS, ChronoUnit.FOREVER, ValueRange.of(MIN_SAFE_INTEGER, MAX_SAFE_INTEGER));\n\n ChronoField.OFFSET_SECONDS = new ChronoField('OffsetSeconds', ChronoUnit.SECONDS, ChronoUnit.FOREVER, ValueRange.of(-18 * 3600, 18 * 3600));\n\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/temporal/ChronoField.js\n **/","/**\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport {MathUtil} from '../MathUtil';\n\nimport {Duration} from '../Duration';\nimport {Year} from '../Year';\nimport {TemporalUnit} from './TemporalUnit';\n\n/**\n * A standard set of date periods units.\n *
\n * This set of units provide unit-based access to manipulate a date, time or date-time.\n * The standard set of units can be extended by implementing {@link TemporalUnit}.\n *
\n * These units are intended to be applicable in multiple calendar systems.\n * For example, most non-ISO calendar systems define units of years, months and days,\n * just with slightly different rules.\n * The documentation of each unit explains how it operates.\n *\n *
\n * When used with other calendar systems it must correspond to the day defined by\n * the rising and setting of the Sun on Earth. It is not required that days begin\n * at midnight - when converting between calendar systems, the date should be\n * equivalent at midday.\n *\n * ChronoUnit.WEEKS\n *\n * Unit that represents the concept of a week.\n * For the ISO calendar system, it is equal to 7 days.\n *
\n * When used with other calendar systems it must correspond to an integral number of days.\n *\n * ChronoUnit.MONTHS\n *\n * Unit that represents the concept of a month.\n * For the ISO calendar system, the length of the month varies by month-of-year.\n * The estimated duration of a month is one twelfth of {@code 365.2425 Days}.\n *
\n * When used with other calendar systems it must correspond to an integral number of days.\n *\n * ChronoUnit.YEARS\n *\n * Unit that represents the concept of a year.\n * For the ISO calendar system, it is equal to 12 months.\n * The estimated duration of a year is {@code 365.2425 Days}.\n *
\n * When used with other calendar systems it must correspond to an integral number of days\n * or months roughly equal to a year defined by the passage of the Earth around the Sun.\n *\n * ChronoUnit.DECADES\n *\n * Unit that represents the concept of a decade.\n * For the ISO calendar system, it is equal to 10 years.\n *
\n * When used with other calendar systems it must correspond to an integral number of days\n * and is normally an integral number of years.\n *\n * ChronoUnit.CENTURIES\n *\n * Unit that represents the concept of a century.\n * For the ISO calendar system, it is equal to 100 years.\n *
\n * When used with other calendar systems it must correspond to an integral number of days\n * and is normally an integral number of years.\n *\n * ChronoUnit.MILLENNIA\n *\n * Unit that represents the concept of a millennium.\n * For the ISO calendar system, it is equal to 1000 years.\n *
\n * When used with other calendar systems it must correspond to an integral number of days\n * and is normally an integral number of years.\n *\n * ChronoUnit.ERAS\n *\n * Unit that represents the concept of an era.\n * The ISO calendar system doesn't have eras thus it is impossible to add\n * an era to a date or date-time.\n * The estimated duration of the era is artificially defined as {Year.MAX_VALUE} + 1.\n *
\n * When used with other calendar systems there are no restrictions on the unit.\n *\n * ChronoUnit.FOREVER\n *\n * Artificial unit that represents the concept of forever.\n * This is primarily used with {@link TemporalField} to represent unbounded fields\n * such as the year or era.\n * The estimated duration of the era is artificially defined as the largest duration\n * supported by {@code Duration}.\n *\n */\nexport class ChronoUnit extends TemporalUnit {\n\n /**\n * \n * @param {String} name\n * @param {Duration} estimatedDuration\n */\n constructor (name, estimatedDuration) {\n super();\n this._name = name;\n this._duration = estimatedDuration;\n }\n\n //-----------------------------------------------------------------------\n /**\n * Gets the estimated duration of this unit in the ISO calendar system.\n *
\n * All of the units in this class have an estimated duration.\n * Days vary due to daylight saving time, while months have different lengths.\n *\n * @return {Duration} the estimated duration of this unit, not null\n */\n duration() {\n return this._duration;\n }\n\n /**\n * Checks if the duration of the unit is an estimate.\n *
\n * All time units in this class are considered to be accurate, while all date\n * units in this class are considered to be estimated.\n *
\n * This definition ignores leap seconds, but considers that Days vary due to\n * daylight saving time and months have different lengths.\n *\n * @return {boolean} true if the duration is estimated, false if accurate\n */\n isDurationEstimated() {\n return this.isDateBased() || this === ChronoUnit.FOREVER;\n }\n\n //-----------------------------------------------------------------------\n /**\n * Checks if this unit is a date unit.\n *\n * @return true if a date unit, false if a time unit\n */\n isDateBased() {\n return this.compareTo(ChronoUnit.DAYS) >= 0 && this !== ChronoUnit.FOREVER;\n }\n\n /**\n * Checks if this unit is a time unit.\n *\n * @return true if a time unit, false if a date unit\n */\n isTimeBased() {\n return this.compareTo(ChronoUnit.DAYS) < 0;\n }\n\n //-----------------------------------------------------------------------\n /**\n * Checks if this unit is supported by the specified temporal object.\n *
\n * This checks that the implementing date-time can add/subtract this unit.\n * This can be used to avoid throwing an exception.\n *
\n * This default implementation derives the value using\n * {@link Temporal#plus(long, TemporalUnit)}.\n *\n * @param {Temporal} temporal the temporal object to check, not null\n * @return {boolean} true if the unit is supported\n */\n isSupportedBy(temporal) {\n if (this === ChronoUnit.FOREVER) {\n return false;\n }\n /* TODO: classes not implemented yet */\n/*\n if (temporal instanceof ChronoLocalDate) {\n return isDateBased();\n }\n if (temporal instanceof ChronoLocalDateTime || temporal instanceof ChronoZonedDateTime) {\n return true;\n }\n*/\n try {\n temporal.plus(1, this);\n return true;\n } catch (e) {\n try {\n temporal.plus(-1, this);\n return true;\n } catch (e2) {\n return false;\n }\n }\n }\n\n /**\n * Returns a copy of the specified temporal object with the specified period added.\n *
\n * The period added is a multiple of this unit. For example, this method\n * could be used to add \"3 days\" to a date by calling this method on the\n * instance representing \"days\", passing the date and the period \"3\".\n * The period to be added may be negative, which is equivalent to subtraction.\n *
\n * There are two equivalent ways of using this method.\n * The first is to invoke this method directly.\n * The second is to use {@link Temporal#plus(long, TemporalUnit)}:\n *
\n * // these two lines are equivalent, but the second approach is recommended\n * temporal = thisUnit.addTo(temporal);\n * temporal = temporal.plus(thisUnit);\n *\n * It is recommended to use the second approach, {@code plus(TemporalUnit)},\n * as it is a lot clearer to read in code.\n *
\n * Implementations should perform any queries or calculations using the units\n * available in {@link ChronoUnit} or the fields available in {@link ChronoField}.\n * If the unit is not supported an {@code UnsupportedTemporalTypeException} must be thrown.\n *
\n * Implementations must not alter the specified temporal object.\n * Instead, an adjusted copy of the original must be returned.\n * This provides equivalent, safe behavior for immutable and mutable implementations.\n *\n * @param {Temporal} temporal the temporal object to adjust, not null\n * @param {Number} amount the amount of this unit to add, positive or negative\n * @return {Temporal} the adjusted temporal object, not null\n * @throws DateTimeException if the amount cannot be added\n * @throws UnsupportedTemporalTypeException if the unit is not supported by the temporal\n */\n addTo(temporal, amount) {\n return temporal.plus(amount, this);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Calculates the amount of time between two temporal objects.\n *
\n * This calculates the amount in terms of this unit. The start and end\n * points are supplied as temporal objects and must be of compatible types.\n * The implementation will convert the second type to be an instance of the\n * first type before the calculating the amount.\n * The result will be negative if the end is before the start.\n * For example, the amount in hours between two temporal objects can be\n * calculated using {@code HOURS.between(startTime, endTime)}.\n *
\n * The calculation returns a whole number, representing the number of\n * complete units between the two temporals.\n * For example, the amount in hours between the times 11:30 and 13:29\n * will only be one hour as it is one minute short of two hours.\n *
\n * There are two equivalent ways of using this method.\n * The first is to invoke this method directly.\n * The second is to use {@link Temporal#until(Temporal, TemporalUnit)}:\n *
\n * // these two lines are equivalent\n * between = thisUnit.between(start, end);\n * between = start.until(end, thisUnit);\n *\n * The choice should be made based on which makes the code more readable.\n *
\n * For example, this method allows the number of days between two dates to\n * be calculated:\n *
\n * daysBetween = DAYS.between(start, end);\n * // or alternatively\n * daysBetween = start.until(end, DAYS);\n *\n *
\n * Implementations should perform any queries or calculations using the units\n * available in {@link ChronoUnit} or the fields available in {@link ChronoField}.\n * If the unit is not supported an {@code UnsupportedTemporalTypeException} must be thrown.\n * Implementations must not alter the specified temporal objects.\n *\n * @implSpec\n * Implementations must begin by checking to if the two temporals have the\n * same type using {@code .constructor.name}. If they do not, then the result must be\n * obtained by calling {@code temporal1.until(temporal2, this)}.\n *\n * @param {Temporal} temporal1 the base temporal object, not null\n * @param {Temporal} temporal2 the other temporal object, exclusive, not null\n * @return {Number} the amount of time between temporal1 and temporal2\n * in terms of this unit; positive if temporal2 is later than\n * temporal1, negative if earlier\n * @throws DateTimeException if the amount cannot be calculated, or the end\n * temporal cannot be converted to the same type as the start temporal\n * @throws UnsupportedTemporalTypeException if the unit is not supported by the temporal\n * @throws ArithmeticException if numeric overflow occurs\n */\n between(temporal1, temporal2) {\n return temporal1.until(temporal2, this);\n }\n\n //-----------------------------------------------------------------------\n toString() {\n return this._name;\n }\n\n /**\n * Compares this ChronoUnit to the specified {TemporalUnit}.\n *
\n * The comparison is based on the total length of the durations.\n *\n * @param {TemporalUnit} other the other unit to compare to, not null\n * @return the comparator value, negative if less, positive if greater\n */\n compareTo(other) {\n return this.duration().compareTo(other.duration());\n }\n\n}\n\nexport function _init() {\n /**\n * Unit that represents the concept of a nanosecond, the smallest supported unit of time.\n * For the ISO calendar system, it is equal to the 1,000,000,000th part of the second unit.\n */\n ChronoUnit.NANOS = new ChronoUnit('Nanos', Duration.ofNanos(1));\n /**\n * Unit that represents the concept of a microsecond.\n * For the ISO calendar system, it is equal to the 1,000,000th part of the second unit.\n */\n ChronoUnit.MICROS = new ChronoUnit('Micros', Duration.ofNanos(1000));\n /**\n * Unit that represents the concept of a millisecond.\n * For the ISO calendar system, it is equal to the 1000th part of the second unit.\n */\n ChronoUnit.MILLIS = new ChronoUnit('Millis', Duration.ofNanos(1000000));\n /**\n * Unit that represents the concept of a second.\n * For the ISO calendar system, it is equal to the second in the SI system\n * of units, except around a leap-second.\n */\n ChronoUnit.SECONDS = new ChronoUnit('Seconds', Duration.ofSeconds(1));\n /**\n * Unit that represents the concept of a minute.\n * For the ISO calendar system, it is equal to 60 seconds.\n */\n ChronoUnit.MINUTES = new ChronoUnit('Minutes', Duration.ofSeconds(60));\n /**\n * Unit that represents the concept of an hour.\n * For the ISO calendar system, it is equal to 60 minutes.\n */\n ChronoUnit.HOURS = new ChronoUnit('Hours', Duration.ofSeconds(3600));\n /**\n * Unit that represents the concept of half a day, as used in AM/PM.\n * For the ISO calendar system, it is equal to 12 hours.\n */\n ChronoUnit.HALF_DAYS = new ChronoUnit('HalfDays', Duration.ofSeconds(43200));\n /**\n * Unit that represents the concept of a day.\n * For the ISO calendar system, it is the standard day from midnight to midnight.\n * The estimated duration of a day is {@code 24 Hours}.\n *
\n * When used with other calendar systems it must correspond to the day defined by\n * the rising and setting of the Sun on Earth. It is not required that days begin\n * at midnight - when converting between calendar systems, the date should be\n * equivalent at midday.\n */\n ChronoUnit.DAYS = new ChronoUnit('Days', Duration.ofSeconds(86400));\n /**\n * Unit that represents the concept of a week.\n * For the ISO calendar system, it is equal to 7 days.\n *
\n * When used with other calendar systems it must correspond to an integral number of days.\n */\n ChronoUnit.WEEKS = new ChronoUnit('Weeks', Duration.ofSeconds(7 * 86400));\n /**\n * Unit that represents the concept of a month.\n * For the ISO calendar system, the length of the month varies by month-of-year.\n * The estimated duration of a month is one twelfth of {@code 365.2425 Days}.\n *
\n * When used with other calendar systems it must correspond to an integral number of days.\n */\n ChronoUnit.MONTHS = new ChronoUnit('Months', Duration.ofSeconds(31556952 / 12));\n /**\n * Unit that represents the concept of a year.\n * For the ISO calendar system, it is equal to 12 months.\n * The estimated duration of a year is {@code 365.2425 Days}.\n *
\n * When used with other calendar systems it must correspond to an integral number of days\n * or months roughly equal to a year defined by the passage of the Earth around the Sun.\n */\n ChronoUnit.YEARS = new ChronoUnit('Years', Duration.ofSeconds(31556952));\n /**\n * Unit that represents the concept of a decade.\n * For the ISO calendar system, it is equal to 10 years.\n *
\n * When used with other calendar systems it must correspond to an integral number of days\n * and is normally an integral number of years.\n */\n ChronoUnit.DECADES = new ChronoUnit('Decades', Duration.ofSeconds(31556952 * 10));\n /**\n * Unit that represents the concept of a century.\n * For the ISO calendar system, it is equal to 100 years.\n *
\n * When used with other calendar systems it must correspond to an integral number of days\n * and is normally an integral number of years.\n */\n ChronoUnit.CENTURIES = new ChronoUnit('Centuries', Duration.ofSeconds(31556952 * 100));\n /**\n * Unit that represents the concept of a millennium.\n * For the ISO calendar system, it is equal to 1000 years.\n *
\n * When used with other calendar systems it must correspond to an integral number of days\n * and is normally an integral number of years.\n */\n ChronoUnit.MILLENNIA = new ChronoUnit('Millennia', Duration.ofSeconds(31556952 * 1000));\n /**\n * Unit that represents the concept of an era.\n * The ISO calendar system doesn't have eras thus it is impossible to add\n * an era to a date or date-time.\n * The estimated duration of the era is artificially defined as {Year.MAX_VALUE} + 1.\n *
\n * When used with other calendar systems there are no restrictions on the unit.\n */\n ChronoUnit.ERAS = new ChronoUnit('Eras', Duration.ofSeconds(31556952 * (Year.MAX_VALUE + 1)));\n /**\n * Artificial unit that represents the concept of forever.\n * This is primarily used with {@link TemporalField} to represent unbounded fields\n * such as the year or era.\n * The estimated duration of the era is artificially defined as the largest duration\n * supported by {@code Duration}.\n */\n ChronoUnit.FOREVER = new ChronoUnit('Forever', Duration.ofSeconds(MathUtil.MAX_SAFE_INTEGER, 999999999));\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/temporal/ChronoUnit.js\n **/","/**\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nimport {requireNonNull, requireInstance} from './assert';\nimport {ArithmeticException, DateTimeParseException, UnsupportedTemporalTypeException} from './errors';\nimport {MathUtil, MAX_SAFE_INTEGER, MIN_SAFE_INTEGER} from './MathUtil';\n\nimport {ChronoField} from './temporal/ChronoField';\nimport {ChronoUnit} from './temporal/ChronoUnit';\nimport {TemporalAmount} from './temporal/TemporalAmount';\n\nimport {LocalTime} from './LocalTime';\n\n/**\n * A time-based amount of time, such as '34.5 seconds'.\n *
\n * This class models a quantity or amount of time in terms of seconds and nanoseconds.\n * It can be accessed using other duration-based units, such as minutes and hours.\n * In addition, the {@link ChronoUnit#DAYS DAYS} unit can be used and is treated as\n * exactly equal to 24 hours, thus ignoring daylight savings effects.\n * See {@link Period} for the date-based equivalent to this class.\n *
\n * A physical duration could be of infinite length.\n * For practicality, the duration is stored with constraints similar to {@link Instant}.\n * The duration uses nanosecond resolution with a maximum value of the seconds that can\n * be held in a {@code long}. This is greater than the current estimated age of the universe.\n *
\n * The range of a duration requires the storage of a number larger than a {@code long}.\n * To achieve this, the class stores a {@code long} representing seconds and an {@code int}\n * representing nanosecond-of-second, which will always be between 0 and 999,999,999.\n *
\n * The duration is measured in \"seconds\", but these are not necessarily identical to\n * the scientific \"SI second\" definition based on atomic clocks.\n * This difference only impacts durations measured near a leap-second and should not affect\n * most applications.\n * See {@link Instant} for a discussion as to the meaning of the second and time-scales.\n *\n *
\n * The seconds are calculated based on the standard definition of a day,\n * where each day is 86400 seconds which implies a 24 hour day.\n * The nanosecond in second field is set to zero.\n *\n * @param {Number} days - the number of days, positive or negative\n * @return {!Duration}\n * @throws ArithmeticException if the input days exceeds the capacity of {@link Duration}\n */\n static ofDays(days) {\n return Duration.create(MathUtil.safeMultiply(days, LocalTime.SECONDS_PER_DAY), 0);\n }\n\n /**\n * Obtains an instance of {@link Duration} from a number of standard hours.\n *
\n * The seconds are calculated based on the standard definition of an hour,\n * where each hour is 3600 seconds.\n * The nanosecond in second field is set to zero.\n *\n * @param {Number} hours - the number of hours, positive or negative\n * @return {!Duration}\n * @throws ArithmeticException if the input hours exceeds the capacity of {@link Duration}\n */\n static ofHours(hours) {\n return Duration.create(MathUtil.safeMultiply(hours, LocalTime.SECONDS_PER_HOUR), 0);\n }\n\n /**\n * Obtains an instance of {@link Duration} from a number of standard minutes.\n *
\n * The seconds are calculated based on the standard definition of a minute,\n * where each minute is 60 seconds.\n * The nanosecond in second field is set to zero.\n *\n * @param {Number} minutes - the number of minutes, positive or negative\n * @return {!Duration}\n * @throws ArithmeticException if the input minutes exceeds the capacity of {@link Duration}\n */\n static ofMinutes(minutes) {\n return Duration.create(MathUtil.safeMultiply(minutes, LocalTime.SECONDS_PER_MINUTE), 0);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Obtains an instance of {@link Duration} from a number of seconds\n * and an adjustment in nanoseconds.\n *
\n * This method allows an arbitrary number of nanoseconds to be passed in.\n * The factory will alter the values of the second and nanosecond in order\n * to ensure that the stored nanosecond is in the range 0 to 999,999,999.\n * For example, the following will result in the exactly the same duration:\n *
\n * Duration.ofSeconds(3, 1);\n * Duration.ofSeconds(4, -999_999_999);\n * Duration.ofSeconds(2, 1000_000_001);\n *\n *\n * @param {Number} seconds - the number of seconds, positive or negative\n * @param {Number} nanoAdjustment the nanosecond adjustment to the number of seconds, positive or negative\n * @return {!Duration}\n * @throws ArithmeticException if the adjustment causes the seconds to exceed the capacity of {@link Duration}\n */\n static ofSeconds(seconds, nanoAdjustment = 0) {\n var secs = MathUtil.safeAdd(seconds, MathUtil.floorDiv(nanoAdjustment, LocalTime.NANOS_PER_SECOND));\n var nos = MathUtil.floorMod(nanoAdjustment, LocalTime.NANOS_PER_SECOND);\n return Duration.create(secs, nos);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Obtains an instance of {@link Duration} from a number of milliseconds.\n *
\n * The seconds and nanoseconds are extracted from the specified milliseconds.\n *\n * @param {Number} millis - the number of milliseconds, positive or negative\n * @return {!Duration}\n */\n static ofMillis(millis) {\n var secs = MathUtil.intDiv(millis, 1000);\n var mos = MathUtil.intMod(millis, 1000);\n if (mos < 0) {\n mos += 1000;\n secs--;\n }\n return Duration.create(secs, mos * 1000000);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Obtains an instance of {@link Duration} from a number of nanoseconds.\n *
\n * The seconds and nanoseconds are extracted from the specified nanoseconds.\n *\n * @param {Number} nanos - the number of nanoseconds, positive or negative\n * @return {!Duration}\n */\n static ofNanos(nanos) {\n var secs = MathUtil.intDiv(nanos, LocalTime.NANOS_PER_SECOND);\n var nos = MathUtil.intMod(nanos, LocalTime.NANOS_PER_SECOND);\n if (nos < 0) {\n nos += LocalTime.NANOS_PER_SECOND;\n secs--;\n }\n return this.create(secs, nos);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Obtains an instance of {@link Duration} from a duration in the specified unit.\n *
\n * The parameters represent the two parts of a phrase like '6 Hours'. For example:\n *
\n * Duration.of(3, SECONDS);\n * Duration.of(465, HOURS);\n *\n * Only a subset of units are accepted by this method.\n * The unit must either have an {@link TemporalUnit#isDurationEstimated() exact duration} or\n * be {@link ChronoUnit#DAYS} which is treated as 24 hours. Other units throw an exception.\n *\n * @param {Number} amount - the amount of the duration, measured in terms of the unit, positive or negative\n * @param {TemporalUnit} unit - the unit that the duration is measured in, must have an exact duration, not null\n * @return {!Duration}\n * @throws DateTimeException if the period unit has an estimated duration\n * @throws ArithmeticException if a numeric overflow occurs\n */\n static of(amount, unit) {\n return Duration.ZERO.plus(amount, unit);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Obtains an instance of {@link Duration} from an amount.\n *
\n * This obtains a duration based on the specified amount.\n * A TemporalAmount represents an amount of time, which may be date-based\n * or time-based, which this factory extracts to a duration.\n *
\n * The conversion loops around the set of units from the amount and uses\n * the duration of the unit to calculate the total Duration.\n * Only a subset of units are accepted by this method.\n * The unit must either have an exact duration or be ChronoUnit.DAYS which\n * is treated as 24 hours. If any other units are found then an exception is thrown.\n *\n * @param {Number} amount - the temporal amount to convert, not null\n * @return {Duration} the resulting duration, not null\n * @throws DateTimeException if the amount cannot be converted\n * @throws ArithmeticException if a numeric overflow occurs\n */\n static from(amount) {\n requireNonNull(amount, 'amount');\n var duration = Duration.ZERO;\n amount.units().forEach((unit) => {\n duration = duration.plus(amount.get(unit), unit);\n });\n return duration;\n }\n \n /**\n * Obtains an instance of {@link Duration} representing the duration between two instants.\n *
\n * Obtains a {@link Duration} representing the duration between two instants.\n * This calculates the duration between two temporal objects of the same type.\n * The difference in seconds is calculated using {@link Temporal#until(Temporal, TemporalUnit)}.\n * The difference in nanoseconds is calculated using by querying the\n * {@link ChronoField#NANO_OF_SECOND NANO_OF_SECOND} field.\n *
\n * The result of this method can be a negative period if the end is before the start.\n * To guarantee to obtain a positive duration call abs() on the result.\n *\n * @param {Temporal} startInclusive - the start instant, inclusive, not null\n * @param {Temporal} endExclusive - the end instant, exclusive, not null\n * @return {!Duration}\n * @throws DateTimeException if the seconds between the temporals cannot be obtained\n * @throws ArithmeticException if the calculation exceeds the capacity of {@link Duration}\n */\n static between(startInclusive, endExclusive) {\n requireNonNull(startInclusive, 'startInclusive');\n requireNonNull(endExclusive, 'endExclusive');\n var secs = startInclusive.until(endExclusive, ChronoUnit.SECONDS);\n var nanos = 0;\n if (startInclusive.isSupported(ChronoField.NANO_OF_SECOND) && endExclusive.isSupported(ChronoField.NANO_OF_SECOND)) {\n try {\n let startNos = startInclusive.getLong(ChronoField.NANO_OF_SECOND);\n nanos = endExclusive.getLong(ChronoField.NANO_OF_SECOND) - startNos;\n if (secs > 0 && nanos < 0) {\n nanos += LocalTime.NANOS_PER_SECOND;\n } else if (secs < 0 && nanos > 0) {\n nanos -= LocalTime.NANOS_PER_SECOND;\n } else if (secs === 0 && nanos !== 0) {\n // two possible meanings for result, so recalculate secs\n let adjustedEnd = endExclusive.with(ChronoField.NANO_OF_SECOND, startNos);\n secs = startInclusive.until(adjustedEnd, ChronoUnit.SECONDS);\n }\n } catch (e) {\n // ignore and only use seconds\n }\n }\n return this.ofSeconds(secs, nanos);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Obtains a {@link Duration} from a text string such as {@code PnDTnHnMn.nS}.\n *
\n * This will parse a textual representation of a duration, including the\n * string produced by {@code toString()}. The formats accepted are based\n * on the ISO-8601 duration format {@code PnDTnHnMn.nS} with days\n * considered to be exactly 24 hours.\n *
\n * The string starts with an optional sign, denoted by the ASCII negative\n * or positive symbol. If negative, the whole period is negated.\n * The ASCII letter \"P\" is next in upper or lower case.\n * There are then four sections, each consisting of a number and a suffix.\n * The sections have suffixes in ASCII of \"D\", \"H\", \"M\" and \"S\" for\n * days, hours, minutes and seconds, accepted in upper or lower case.\n * The suffixes must occur in order. The ASCII letter \"T\" must occur before\n * the first occurrence, if any, of an hour, minute or second section.\n * At least one of the four sections must be present, and if \"T\" is present\n * there must be at least one section after the \"T\".\n * The number part of each section must consist of one or more ASCII digits.\n * The number may be prefixed by the ASCII negative or positive symbol.\n * The number of days, hours and minutes must parse to a {@code long}.\n * The number of seconds must parse to a {@code long} with optional fraction.\n * The decimal point may be either a dot or a comma.\n * The fractional part may have from zero to 9 digits.\n *
\n * The leading plus/minus sign, and negative values for other units are\n * not part of the ISO-8601 standard.\n *
\n * Examples:\n *
\n * \"PT20.345S\" -> parses as \"20.345 seconds\"\n * \"PT15M\" -> parses as \"15 minutes\" (where a minute is 60 seconds)\n * \"PT10H\" -> parses as \"10 hours\" (where an hour is 3600 seconds)\n * \"P2D\" -> parses as \"2 days\" (where a day is 24 hours or 86400 seconds)\n * \"P2DT3H4M\" -> parses as \"2 days, 3 hours and 4 minutes\"\n * \"P-6H3M\" -> parses as \"-6 hours and +3 minutes\"\n * \"-P6H3M\" -> parses as \"-6 hours and -3 minutes\"\n * \"-P-6H+3M\" -> parses as \"+6 hours and -3 minutes\"\n *\n *\n * @param {String} text - the text to parse, not null\n * @return {Duration} the parsed duration, not null\n * @throws DateTimeParseException if the text cannot be parsed to a duration\n */\n static parse(text) {\n requireNonNull(text, 'text');\n /**\n * The pattern for parsing.\n */\n const PATTERN = new RegExp('([-+]?)P(?:([-+]?[0-9]+)D)?(T(?:([-+]?[0-9]+)H)?(?:([-+]?[0-9]+)M)?(?:([-+]?[0-9]+)(?:[.,]([0-9]{0,9}))?S)?)?', 'i');\n var matches = PATTERN.exec(text);\n if (matches !== null) {\n // check for letter T but no time sections\n if ('T' === matches[3] === false) {\n var negate = '-' === matches[1];\n var dayMatch = matches[2];\n var hourMatch = matches[4];\n var minuteMatch = matches[5];\n var secondMatch = matches[6];\n var fractionMatch = matches[7];\n if (dayMatch != null || hourMatch != null || minuteMatch != null || secondMatch != null) {\n var daysAsSecs = Duration._parseNumber(text, dayMatch, LocalTime.SECONDS_PER_DAY, 'days');\n var hoursAsSecs = Duration._parseNumber(text, hourMatch, LocalTime.SECONDS_PER_HOUR, 'hours');\n var minsAsSecs = Duration._parseNumber(text, minuteMatch, LocalTime.SECONDS_PER_MINUTE, 'minutes');\n var seconds = Duration._parseNumber(text, secondMatch, 1, 'seconds');\n var negativeSecs = secondMatch != null && secondMatch.charAt(0) === '-';\n var nanos = Duration._parseFraction(text, fractionMatch, negativeSecs ? -1 : 1);\n try {\n return Duration.create(negate, daysAsSecs, hoursAsSecs, minsAsSecs, seconds, nanos);\n } catch (ex) {\n throw new DateTimeParseException('Text cannot be parsed to a Duration: overflow', text, 0, ex);\n }\n }\n }\n }\n throw new DateTimeParseException('Text cannot be parsed to a Duration', text, 0);\n }\n\n static _parseNumber(text, parsed, multiplier, errorText) {\n // regex limits to [-+]?[0-9]+\n if (parsed == null) {\n return 0;\n }\n try {\n if (parsed[0] === '+') {\n parsed = parsed.substring(1);\n }\n var val = parseFloat(parsed);\n return MathUtil.safeMultiply(val, multiplier);\n } catch (ex) {\n throw new DateTimeParseException('Text cannot be parsed to a Duration: ' + errorText, text, 0, ex);\n }\n }\n\n static _parseFraction(text, parsed, negate) {\n // regex limits to [0-9]{0,9}\n if (parsed == null || parsed.length === 0) {\n return 0;\n }\n try {\n parsed = (parsed + '000000000').substring(0, 9);\n return parseFloat(parsed) * negate;\n } catch (ex) {\n throw new DateTimeParseException('Text cannot be parsed to a Duration: fraction', text, 0, ex);\n }\n }\n\n //-----------------------------------------------------------------------\n /**\n * to handle function overriding this function accepts any number of arguments, checks their type and delegates to the appropriate function\n *\n * @return {Duration}\n */\n static create() {\n if (arguments.length === 1) {\n return Duration.createSeconds(arguments[0]);\n } else if (arguments.length === 2) {\n return Duration.createSecondsNanos(arguments[0], arguments[1]);\n } else {\n return Duration.createNegateDaysHoursMinutesSecondsNanos(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\n }\n }\n\n static createNegateDaysHoursMinutesSecondsNanos(negate, daysAsSecs, hoursAsSecs, minsAsSecs, secs, nanos) {\n var seconds = MathUtil.safeAdd(daysAsSecs, MathUtil.safeAdd(hoursAsSecs, MathUtil.safeAdd(minsAsSecs, secs)));\n if (negate) {\n return Duration.ofSeconds(seconds, nanos).negated();\n }\n return Duration.ofSeconds(seconds, nanos);\n }\n\n /**\n * Obtains an instance of {@link Duration} using seconds and nanoseconds.\n *\n * @param {Number} seconds - the length of the duration in seconds, positive or negative\n * @param {Number} nanoAdjustment - the nanosecond adjustment within the second, from 0 to 999,999,999\n */\n static createSecondsNanos(seconds = 0, nanoAdjustment = 0) {\n if ((seconds | nanoAdjustment) === 0) {\n return Duration.ZERO;\n }\n // if seconds is a float, we need to adjust the nanos from it as well\n if (seconds >= 0) {\n nanoAdjustment += seconds % 1 * LocalTime.NANOS_PER_SECOND;\n } else {\n nanoAdjustment -= seconds % 1 * LocalTime.NANOS_PER_SECOND;\n }\n seconds = Math.floor(seconds);\n nanoAdjustment = Math.round(nanoAdjustment);\n\n return new Duration(seconds, nanoAdjustment);\n }\n \n /**\n * Creates an instance of {@link Duration} from a number of seconds.\n *\n * @param {Number} seconds - the number of seconds, up to scale 9, positive or negative\n * @return {!Duration}\n * @throws ArithmeticException if numeric overflow occurs\n */\n static createSeconds(seconds) {\n let nanos = Math.round(seconds * Math.pow(10, 9));\n let div = MathUtil.intDiv(nanos, LocalTime.NANOS_PER_SECOND);\n let rem = MathUtil.intMod(nanos, LocalTime.NANOS_PER_SECOND);\n return Duration.ofSeconds(div, rem);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Gets the value of the requested unit.\n *
\n * This returns a value for each of the two supported units,\n * {@link ChronoUnit#SECONDS SECONDS} and {@link ChronoUnit#NANOS NANOS}.\n * All other units throw an exception.\n *\n * @param {TemporalUnit} unit the {@code TemporalUnit} for which to return the value\n * @return {number} the var value of the unit\n * @throws DateTimeException if the unit is not supported\n * @throws UnsupportedTemporalTypeException if the unit is not supported\n */\n get(unit) {\n if (unit === ChronoUnit.SECONDS) {\n return this._seconds;\n } else if (unit === ChronoUnit.NANOS) {\n return this._nanos;\n } else {\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n }\n }\n\n units() {\n return [ChronoUnit.SECONDS, ChronoUnit.NANOS];\n }\n\n //-----------------------------------------------------------------------\n /**\n * Checks if this duration is zero length.\n *
\n * A {@link Duration} represents a directed distance between two points on\n * the time-line and can therefore be positive, zero or negative.\n * This method checks whether the length is zero.\n *\n * @return {boolean} true if this duration has a total length equal to zero\n */\n isZero() {\n return (this._seconds | this._nanos) === 0;\n }\n\n /**\n * Checks if this duration is negative, excluding zero.\n *
\n * A {@link Duration} represents a directed distance between two points on\n * the time-line and can therefore be positive, zero or negative.\n * This method checks whether the length is less than zero.\n *\n * @return {boolean} true if this duration has a total length less than zero\n */\n isNegative() {\n return this._seconds < 0;\n }\n\n //-----------------------------------------------------------------------\n /**\n * Gets the number of seconds in this duration.\n *
\n * The length of the duration is stored using two fields - seconds and nanoseconds.\n * The nanoseconds part is a value from 0 to 999,999,999 that is an adjustment to\n * the length in seconds.\n * The total duration is defined by calling this method and {@link #getNano()}.\n *
\n * A {@link Duration} represents a directed distance between two points on the time-line.\n * A negative duration is expressed by the negative sign of the seconds part.\n * A duration of -1 nanosecond is stored as -1 seconds plus 999,999,999 nanoseconds.\n *\n * @return {number} the whole seconds part of the length of the duration, positive or negative\n */\n seconds() {\n return this._seconds;\n }\n\n /**\n * Gets the number of nanoseconds within the second in this duration.\n *
\n * The length of the duration is stored using two fields - seconds and nanoseconds.\n * The nanoseconds part is a value from 0 to 999,999,999 that is an adjustment to\n * the length in seconds.\n * The total duration is defined by calling this method and {@link #getSeconds()}.\n *
\n * A {@link Duration} represents a directed distance between two points on the time-line.\n * A negative duration is expressed by the negative sign of the seconds part.\n * A duration of -1 nanosecond is stored as -1 seconds plus 999,999,999 nanoseconds.\n *\n * @return {number} the nanoseconds within the second part of the length of the duration, from 0 to 999,999,999\n */\n nano() {\n return this._nanos;\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this duration with the specified amount of seconds.\n *
\n * This returns a duration with the specified seconds, retaining the\n * nano-of-second part of this duration.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Number} seconds - the seconds to represent, may be negative\n * @return {Duration} based on this period with the requested seconds, not null\n */\n withSeconds(seconds) {\n return Duration.create(seconds, this._nanos);\n }\n\n /**\n * Returns a copy of this duration with the specified nano-of-second.\n *
\n * This returns a duration with the specified nano-of-second, retaining the\n * seconds part of this duration.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Number} nanoOfSecond - the nano-of-second to represent, from 0 to 999,999,999\n * @return {Duration} based on this period with the requested nano-of-second, not null\n * @throws DateTimeException if the nano-of-second is invalid\n */\n withNanos(nanoOfSecond) {\n ChronoField.NANO_OF_SECOND.checkValidIntValue(nanoOfSecond);\n return Duration.create(this._seconds, nanoOfSecond);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this duration with the specified duration added.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Duration} duration - the duration to add, positive or negative, not null\n * @return {Duration} based on this duration with the specified duration added, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n plusDuration(duration) {\n return this.plus(duration.seconds(), duration.nano());\n }\n\n\n /**\n * to handle function overriding this function accepts two arguments, checks their type and delegates to the appropriate function\n * \n * @param {!(Duration|number)} a\n * @param {ChronoUnit|number} b\n * @return {Duration}\n */\n plus(a, b){\n if (a instanceof Duration) {\n requireNonNull(a, 'duration');\n return this.plusDuration(a);\n }\n if (b instanceof ChronoUnit) {\n requireNonNull(a, 'amount');\n requireNonNull(b, 'unit');\n return this.plusAmountUnit(a, b);\n }\n requireNonNull(a, 'seconds');\n requireNonNull(b, 'nanos');\n return this.plusSecondsNanos(a, b);\n }\n \n /**\n * Returns a copy of this duration with the specified duration added.\n *
\n * The duration amount is measured in terms of the specified unit.\n * Only a subset of units are accepted by this method.\n * The unit must either have an {@link TemporalUnit#isDurationEstimated() exact duration} or\n * be {@link ChronoUnit#DAYS} which is treated as 24 hours. Other units throw an exception.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Number} amountToAdd - the amount to add, measured in terms of the unit, positive or negative\n * @param {TemporalUnit} unit - the unit that the amount is measured in, must have an exact duration, not null\n * @return {Duration} based on this duration with the specified duration added, not null\n * @throws UnsupportedTemporalTypeException if the unit is not supported\n * @throws ArithmeticException if numeric overflow occurs\n */\n plusAmountUnit(amountToAdd, unit) {\n requireNonNull(unit, 'unit');\n if (unit === ChronoUnit.DAYS) {\n return this.plusSecondsNanos(MathUtil.safeMultiply(amountToAdd, LocalTime.SECONDS_PER_DAY), 0);\n }\n if (unit.isDurationEstimated()) {\n throw new UnsupportedTemporalTypeException('Unit must not have an estimated duration');\n }\n if (amountToAdd === 0) {\n return this;\n }\n if (unit instanceof ChronoUnit) {\n switch (unit) {\n case ChronoUnit.NANOS: return this.plusNanos(amountToAdd);\n case ChronoUnit.MICROS: return this.plusSecondsNanos(MathUtil.intDiv(amountToAdd, (1000000 * 1000)) * 1000, MathUtil.intMod(amountToAdd, (1000000 * 1000)) * 1000);\n case ChronoUnit.MILLIS: return this.plusMillis(amountToAdd);\n case ChronoUnit.SECONDS: return this.plusSeconds(amountToAdd);\n }\n return this.plusSecondsNanos(MathUtil.safeMultiply(unit.duration().seconds(), amountToAdd), 0);\n }\n var duration = unit.duration().multipliedBy(amountToAdd);\n return this.plusSecondsNanos(duration.seconds(), duration.nano());\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this duration with the specified duration in 24 hour days added.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Number} daysToAdd - the days to add, positive or negative\n * @return {Duration} based on this duration with the specified days added, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n plusDays(daysToAdd) {\n return this.plusSecondsNanos(MathUtil.safeMultiply(daysToAdd, LocalTime.SECONDS_PER_DAY), 0);\n }\n\n /**\n * Returns a copy of this duration with the specified duration in hours added.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Number} hoursToAdd - the hours to add, positive or negative\n * @return {Duration} based on this duration with the specified hours added, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n plusHours(hoursToAdd) {\n return this.plusSecondsNanos(MathUtil.safeMultiply(hoursToAdd, LocalTime.SECONDS_PER_HOUR), 0);\n }\n\n /**\n * Returns a copy of this duration with the specified duration in minutes added.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Number} minutesToAdd - the minutes to add, positive or negative\n * @return {Duration} based on this duration with the specified minutes added, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n plusMinutes(minutesToAdd) {\n return this.plusSecondsNanos(MathUtil.safeMultiply(minutesToAdd, LocalTime.SECONDS_PER_MINUTE), 0);\n }\n\n /**\n * Returns a copy of this duration with the specified duration in seconds added.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Number} secondsToAdd - the seconds to add, positive or negative\n * @return {Duration} based on this duration with the specified seconds added, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n plusSeconds(secondsToAdd) {\n return this.plusSecondsNanos(secondsToAdd, 0);\n }\n\n /**\n * Returns a copy of this duration with the specified duration in milliseconds added.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Number} millisToAdd - the milliseconds to add, positive or negative\n * @return {Duration} based on this duration with the specified milliseconds added, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n plusMillis(millisToAdd) {\n return this.plusSecondsNanos(MathUtil.intDiv(millisToAdd, 1000), MathUtil.intMod(millisToAdd, 1000) * 1000000);\n }\n\n /**\n * Returns a copy of this duration with the specified duration in nanoseconds added.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Number} nanosToAdd - the nanoseconds to add, positive or negative\n * @return {Duration} based on this duration with the specified nanoseconds added, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n plusNanos(nanosToAdd) {\n return this.plusSecondsNanos(0, nanosToAdd);\n }\n\n /**\n * Returns a copy of this duration with the specified duration added.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Number} secondsToAdd - the seconds to add, positive or negative\n * @param {Number} nanosToAdd - the nanos to add, positive or negative\n * @return {Duration} based on this duration with the specified seconds added, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n plusSecondsNanos(secondsToAdd, nanosToAdd) {\n if ((secondsToAdd | nanosToAdd) === 0) {\n return this;\n }\n var epochSec = MathUtil.safeAdd(this._seconds, secondsToAdd);\n epochSec = MathUtil.safeAdd(epochSec, MathUtil.intDiv(nanosToAdd, LocalTime.NANOS_PER_SECOND));\n nanosToAdd = MathUtil.intMod(nanosToAdd, LocalTime.NANOS_PER_SECOND);\n var nanoAdjustment = MathUtil.safeAdd(this._nanos, nanosToAdd); // safe int+LocalTime.NANOS_PER_SECOND\n return Duration.ofSeconds(epochSec, nanoAdjustment);\n }\n\n //-----------------------------------------------------------------------\n /**\n * to handle function overriding this function accepts two arguments, checks their type and delegates to the appropriate function\n *\n * @param {!(Duration|number)} a\n * @param {ChronoUnit|number} b\n * @return {Duration}\n */\n minus(a, b) {\n if (a instanceof Duration) {\n requireNonNull(a, 'duration');\n return this.minusDuration(a);\n }\n if (b instanceof ChronoUnit) {\n requireNonNull(a, 'amount');\n requireNonNull(b, 'unit');\n return this.minusAmountUnit(a, b);\n }\n requireNonNull(a, 'seconds');\n requireNonNull(b, 'nanos');\n return this.minusSecondsNanos(a, b);\n }\n\n /**\n * Returns a copy of this duration with the specified duration subtracted.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Duration} duration - the duration to subtract, positive or negative, not null\n * @return {Duration} based on this duration with the specified duration subtracted, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n minusDuration(duration) {\n var secsToSubtract = duration.seconds();\n var nanosToSubtract = duration.nano();\n if (secsToSubtract === MIN_SAFE_INTEGER) {\n return this.plus(MAX_SAFE_INTEGER, -nanosToSubtract).plus(1, 0);\n }\n return this.plus(-secsToSubtract, -nanosToSubtract);\n }\n\n /**\n * Returns a copy of this duration with the specified duration subtracted.\n *
\n * The duration amount is measured in terms of the specified unit.\n * Only a subset of units are accepted by this method.\n * The unit must either have an {@link TemporalUnit#isDurationEstimated() exact duration} or\n * be {@link ChronoUnit#DAYS} which is treated as 24 hours. Other units throw an exception.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Number} amountToSubtract - the amount to subtract, measured in terms of the unit, positive or negative\n * @param {TemporalUnit} unit - the unit that the amount is measured in, must have an exact duration, not null\n * @return {Duration} based on this duration with the specified duration subtracted, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n minusAmountUnit(amountToSubtract, unit) {\n return (amountToSubtract === MIN_SAFE_INTEGER ? this.plusAmountUnit(MAX_SAFE_INTEGER, unit).plus(1, unit) : this.plusAmountUnit(-amountToSubtract, unit));\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this duration with the specified duration in 24 hour days subtracted.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Number} daysToSubtract - the days to subtract, positive or negative\n * @return {Duration} based on this duration with the specified days subtracted, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n minusDays(daysToSubtract) {\n return (daysToSubtract === MIN_SAFE_INTEGER ? this.plusDays(MAX_SAFE_INTEGER).plusDays(1) : this.plusDays(-daysToSubtract));\n }\n\n /**\n * Returns a copy of this duration with the specified duration in hours subtracted.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Number} hoursToSubtract - the hours to subtract, positive or negative\n * @return {Duration} based on this duration with the specified hours subtracted, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n minusHours(hoursToSubtract) {\n return (hoursToSubtract === MIN_SAFE_INTEGER ? this.plusHours(MAX_SAFE_INTEGER).plusHours(1) : this.plusHours(-hoursToSubtract));\n }\n\n /**\n * Returns a copy of this duration with the specified duration in minutes subtracted.\n *
\n * The number of hours is multiplied by 60 to obtain the number of seconds to subtract.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Number} minutesToSubtract - the minutes to subtract, positive or negative\n * @return {Duration} based on this duration with the specified minutes subtracted, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n minusMinutes(minutesToSubtract) {\n return (minutesToSubtract === MIN_SAFE_INTEGER ? this.plusMinutes(MAX_SAFE_INTEGER).plusMinutes(1) : this.plusMinutes(-minutesToSubtract));\n }\n\n /**\n * Returns a copy of this duration with the specified duration in seconds subtracted.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Number} secondsToSubtract - the seconds to subtract, positive or negative\n * @return {Duration} based on this duration with the specified seconds subtracted, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n minusSeconds(secondsToSubtract) {\n return (secondsToSubtract === MIN_SAFE_INTEGER ? this.plusSeconds(MAX_SAFE_INTEGER).plusSeconds(1) : this.plusSeconds(-secondsToSubtract));\n }\n\n /**\n * Returns a copy of this duration with the specified duration in milliseconds subtracted.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Number} millisToSubtract - the milliseconds to subtract, positive or negative\n * @return {Duration} based on this duration with the specified milliseconds subtracted, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n minusMillis(millisToSubtract) {\n return (millisToSubtract === MIN_SAFE_INTEGER ? this.plusMillis(MAX_SAFE_INTEGER).plusMillis(1) : this.plusMillis(-millisToSubtract));\n }\n\n /**\n * Returns a copy of this duration with the specified duration in nanoseconds subtracted.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Number} nanosToSubtract - the nanoseconds to subtract, positive or negative\n * @return {Duration} based on this duration with the specified nanoseconds subtracted, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n minusNanos(nanosToSubtract) {\n return (nanosToSubtract === MIN_SAFE_INTEGER ? this.plusNanos(MAX_SAFE_INTEGER).plusNanos(1) : this.plusNanos(-nanosToSubtract));\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this duration multiplied by the scalar.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Number} multiplicand - the value to multiply the duration by, positive or negative\n * @return {Duration} based on this duration multiplied by the specified scalar, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n multipliedBy(multiplicand) {\n if (multiplicand === 0) {\n return Duration.ZERO;\n }\n if (multiplicand === 1) {\n return this;\n }\n return Duration.create(MathUtil.safeMultiply(this.toSeconds(), multiplicand));\n }\n\n /**\n * Returns a copy of this duration divided by the specified value.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Number} divisor - the value to divide the duration by, positive or negative, not zero\n * @return {Duration} based on this duration divided by the specified divisor, not null\n * @throws ArithmeticException if the divisor is zero or if numeric overflow occurs\n */\n dividedBy(divisor) {\n if (divisor === 0) {\n throw new ArithmeticException('Cannot divide by zero');\n }\n if (divisor === 1) {\n return this;\n }\n return Duration.create(this.toSeconds() / divisor);\n }\n\n /**\n * Converts this duration to the total length in seconds and\n * fractional nanoseconds expressed as a {@code BigDecimal}.\n *\n * @return {number} the total length of the duration in seconds, with a scale of 9, not null\n */\n toSeconds() {\n var nanoFloat = MathUtil.safeMultiply(this._nanos, Math.pow(10, -9));\n return MathUtil.safeAdd(this._seconds, nanoFloat);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this duration with the length negated.\n *
\n * This method swaps the sign of the total length of this duration.\n * For example, {@code PT1.3S} will be returned as {@code PT-1.3S}.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @return {Duration} based on this duration with the amount negated, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n negated() {\n return this.multipliedBy(-1);\n }\n\n /**\n * Returns a copy of this duration with a positive length.\n *
\n * This method returns a positive duration by effectively removing the sign from any negative total length.\n * For example, {@code PT-1.3S} will be returned as {@code PT1.3S}.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @return {Duration} based on this duration with an absolute length, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n abs() {\n return this.isNegative() ? this.negated() : this;\n }\n\n //-------------------------------------------------------------------------\n /**\n * Adds this duration to the specified temporal object.\n *
\n * This returns a temporal object of the same observable type as the input\n * with this duration added.\n *
\n * In most cases, it is clearer to reverse the calling pattern by using\n * {@link Temporal#plus(TemporalAmount)}.\n *
\n * // these two lines are equivalent, but the second approach is recommended\n * dateTime = thisDuration.addTo(dateTime);\n * dateTime = dateTime.plus(thisDuration);\n *\n *
\n * The calculation will add the seconds, then nanos.\n * Only non-zero amounts will be added.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Temporal} temporal - the temporal object to adjust, not null\n * @return {Temporal} an object of the same type with the adjustment made, not null\n * @throws DateTimeException if unable to add\n * @throws ArithmeticException if numeric overflow occurs\n */\n addTo(temporal) {\n requireNonNull(temporal, 'temporal');\n if (this._seconds !== 0) {\n temporal = temporal.plus(this._seconds, ChronoUnit.SECONDS);\n }\n if (this._nanos !== 0) {\n temporal = temporal.plus(this._nanos, ChronoUnit.NANOS);\n }\n return temporal;\n }\n\n /**\n * Subtracts this duration from the specified temporal object.\n *
\n * This returns a temporal object of the same observable type as the input\n * with this duration subtracted.\n *
\n * In most cases, it is clearer to reverse the calling pattern by using\n * {@link Temporal#minus(TemporalAmount)}.\n *
\n * // these two lines are equivalent, but the second approach is recommended\n * dateTime = thisDuration.subtractFrom(dateTime);\n * dateTime = dateTime.minus(thisDuration);\n *\n *
\n * The calculation will subtract the seconds, then nanos.\n * Only non-zero amounts will be added.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @param {Temporal} temporal - the temporal object to adjust, not null\n * @return {Temporal} an object of the same type with the adjustment made, not null\n * @throws DateTimeException if unable to subtract\n * @throws ArithmeticException if numeric overflow occurs\n */\n subtractFrom(temporal) {\n requireNonNull(temporal, 'temporal');\n if (this._seconds !== 0) {\n temporal = temporal.minus(this._seconds, ChronoUnit.SECONDS);\n }\n if (this._nanos !== 0) {\n temporal = temporal.minus(this._nanos, ChronoUnit.NANOS);\n }\n return temporal;\n }\n\n //-----------------------------------------------------------------------\n /**\n * Gets the number of days in this duration.\n *
\n * This returns the total number of days in the duration by dividing the\n * number of seconds by 86400.\n * This is based on the standard definition of a day as 24 hours.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @return {number} the number of days in the duration, may be negative\n */\n toDays() {\n return this._seconds / LocalTime.SECONDS_PER_DAY;\n }\n\n /**\n * Gets the number of hours in this duration.\n *
\n * This returns the total number of hours in the duration by dividing the\n * number of seconds by 3600.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @return {number} the number of hours in the duration, may be negative\n */\n toHours() {\n return this._seconds / LocalTime.SECONDS_PER_HOUR;\n }\n\n /**\n * Gets the number of minutes in this duration.\n *
\n * This returns the total number of minutes in the duration by dividing the\n * number of seconds by 60.\n *
\n * This instance is immutable and unaffected by this method call.\n *\n * @return {number} the number of minutes in the duration, may be negative\n */\n toMinutes() {\n return this._seconds / LocalTime.SECONDS_PER_MINUTE;\n }\n\n /**\n * Converts this duration to the total length in milliseconds.\n *
\n * If this duration is too large to fit in a {@code long} milliseconds, then an\n * exception is thrown.\n *
\n * If this duration has greater than millisecond precision, then the conversion\n * will drop any excess precision information as though the amount in nanoseconds\n * was subject to integer division by one million.\n *\n * @return {number} the total length of the duration in milliseconds\n * @throws ArithmeticException if numeric overflow occurs\n */\n toMillis() {\n var millis = Math.round(MathUtil.safeMultiply(this._seconds, 1000));\n millis = MathUtil.safeAdd(millis, MathUtil.intDiv(this._nanos, 1000000));\n return millis;\n }\n\n /**\n * Converts this duration to the total length in nanoseconds expressed as a {@code long}.\n *
\n * If this duration is too large to fit in a {@code long} nanoseconds, then an\n * exception is thrown.\n *\n * @return {number} the total length of the duration in nanoseconds\n * @throws ArithmeticException if numeric overflow occurs\n */\n toNanos() {\n var totalNanos = MathUtil.safeMultiply(this._seconds, LocalTime.NANOS_PER_SECOND);\n totalNanos = MathUtil.safeAdd(totalNanos, this._nanos);\n return totalNanos;\n }\n\n //-----------------------------------------------------------------------\n /**\n * Compares this duration to the specified {@link Duration}.\n *
\n * The comparison is based on the total length of the durations.\n *\n * @param {Duration} otherDuration - the other duration to compare to, not null\n * @return {number} the comparator value, negative if less, positive if greater\n */\n compareTo(otherDuration) {\n requireNonNull(otherDuration, 'otherDuration');\n requireInstance(otherDuration, Duration, 'otherDuration');\n var cmp = MathUtil.compareNumbers(this._seconds, otherDuration.seconds());\n if (cmp !== 0) {\n return cmp;\n }\n return this._nanos - otherDuration.nano();\n }\n\n //-----------------------------------------------------------------------\n /**\n * Checks if this duration is equal to the specified {@link Duration}.\n *
\n * The comparison is based on the total length of the durations.\n *\n * @param {*} otherDuration - the other duration, null returns false\n * @return {boolean} true if the other duration is equal to this one\n */\n equals(otherDuration) {\n if (this === otherDuration) {\n return true;\n }\n if (otherDuration instanceof Duration) {\n return this.seconds() === otherDuration.seconds() &&\n this.nano() === otherDuration.nano();\n }\n return false;\n }\n\n //-----------------------------------------------------------------------\n /**\n * A string representation of this duration using ISO-8601 seconds\n * based representation, such as {@code PT8H6M12.345S}.\n *
\n * The format of the returned string will be {@code PTnHnMnS}, where n is\n * the relevant hours, minutes or seconds part of the duration.\n * Any fractional seconds are placed after a decimal povar i the seconds section.\n * If a section has a zero value, it is omitted.\n * The hours, minutes and seconds will all have the same sign.\n *
\n * Examples:\n *
\n * \"20.345 seconds\" -> \"PT20.345S\n * \"15 minutes\" (15 * 60 seconds) -> \"PT15M\"\n * \"10 hours\" (10 * 3600 seconds) -> \"PT10H\"\n * \"2 days\" (2 * 86400 seconds) -> \"PT48H\"\n *\n * Note that multiples of 24 hours are not output as days to avoid confusion\n * with {@code Period}.\n *\n * @return {string} an ISO-8601 representation of this duration, not null\n */\n toString() {\n if (this === Duration.ZERO) {\n return 'PT0S';\n }\n var hours = MathUtil.intDiv(this._seconds, LocalTime.SECONDS_PER_HOUR);\n var minutes = MathUtil.intDiv(MathUtil.intMod(this._seconds, LocalTime.SECONDS_PER_HOUR), LocalTime.SECONDS_PER_MINUTE);\n var secs = MathUtil.intMod(this._seconds, LocalTime.SECONDS_PER_MINUTE);\n var rval = 'PT';\n if (hours !== 0) {\n rval += hours + 'H';\n }\n if (minutes !== 0) {\n rval += minutes + 'M';\n }\n if (secs === 0 && this._nanos === 0 && rval.length > 2) {\n return rval;\n }\n if (secs < 0 && this._nanos > 0) {\n if (secs === -1) {\n rval += '-0';\n } else {\n rval += secs + 1;\n }\n } else {\n rval += secs;\n }\n if (this._nanos > 0) {\n rval += '.';\n let nanoString;\n if (secs < 0) {\n nanoString = '' + (2 * LocalTime.NANOS_PER_SECOND - this._nanos);\n } else {\n nanoString = '' + (LocalTime.NANOS_PER_SECOND + this._nanos);\n }\n // remove the leading '1'\n nanoString = nanoString.slice(1, nanoString.length);\n rval += nanoString;\n while (rval.charAt(rval.length - 1) === '0') {\n rval = rval.slice(0, rval.length - 1);\n }\n }\n rval += 'S';\n return rval;\n }\n\n}\n\nexport function _init() {\n /**\n * Constant for a duration of zero.\n */\n Duration.ZERO = new Duration(0, 0);\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/Duration.js\n **/","/*\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport {abstractMethodFail} from '../assert';\n\n/**\n * Framework-level interface defining an amount of time, such as\n * \"6 hours\", \"8 days\" or \"2 years and 3 months\".\n *
\n * This is the base interface type for amounts of time.\n * An amount is distinct from a date or time-of-day in that it is not tied\n * to any specific point on the time-line.\n *
\n * The amount can be thought of as a {@code Map} of {@link TemporalUnit} to\n * {@code long}, exposed via {@link #getUnits()} and {@link #get(TemporalUnit)}.\n * A simple case might have a single unit-value pair, such as \"6 hours\".\n * A more complex case may have multiple unit-value pairs, such as\n * \"7 years, 3 months and 5 days\".\n *
\n * There are two common implementations.\n * {@link Period} is a date-based implementation, storing years, months and days.\n * {@link Duration} is a time-based implementation, storing seconds and nanoseconds,\n * but providing some access using other duration based units such as minutes,\n * hours and fixed 24-hour days.\n *
\n * This interface is a framework-level interface that should not be widely\n * used in application code. Instead, applications should create and pass\n * around instances of concrete types, such as {@code Period} and {@code Duration}.\n *\n * @interface\n */\nexport class TemporalAmount{\n /**\n * Returns the value of the requested unit.\n * The units returned from {@link #getUnits()} uniquely define the\n * value of the {@code TemporalAmount}. A value must be returned\n * for each unit listed in {@code getUnits}.\n *\n * @implSpec\n * Implementations may declare support for units not listed by {@link #getUnits()}.\n * Typically, the implementation would define additional units\n * as conversions for the convenience of developers.\n *\n * @param {TemporalUnit} unit - the {@code TemporalUnit} for which to return the value\n * @return {number} the long value of the unit\n * @throws DateTimeException if a value for the unit cannot be obtained\n * @throws UnsupportedTemporalTypeException if the {@code unit} is not supported\n */\n get(unit){\n abstractMethodFail('adjustInto');\n }\n\n /**\n * Returns the list of units uniquely defining the value of this TemporalAmount.\n * The list of {@code TemporalUnits} is defined by the implementation class.\n * The list is a snapshot of the units at the time {@code getUnits}\n * is called and is not mutable.\n * The units are ordered from longest duration to the shortest duration\n * of the unit.\n *\n * @implSpec\n * The list of units completely and uniquely represents the\n * state of the object without omissions, overlaps or duplication.\n * The units are in order from longest duration to shortest.\n *\n * @return {TemporalUnit[]} the List of {@code TemporalUnits}; not null\n */\n getUnits(){\n abstractMethodFail('adjustInto');\n }\n\n /**\n * Adds to the specified temporal object.\n *
\n * Adds the amount to the specified temporal object using the logic\n * encapsulated in the implementing class.\n *
\n * There are two equivalent ways of using this method.\n * The first is to invoke this method directly.\n * The second is to use {@link Temporal#plus(TemporalAmount)}:\n *
\n * // These two lines are equivalent, but the second approach is recommended\n * dateTime = amount.addTo(dateTime);\n * dateTime = dateTime.plus(adder);\n *\n * It is recommended to use the second approach, {@code plus(TemporalAmount)},\n * as it is a lot clearer to read in code.\n *\n * @implSpec\n * The implementation must take the input object and add to it.\n * The implementation defines the logic of the addition and is responsible for\n * documenting that logic. It may use any method on {@code Temporal} to\n * query the temporal object and perform the addition.\n * The returned object must have the same observable type as the input object\n *
\n * The input object must not be altered.\n * Instead, an adjusted copy of the original must be returned.\n * This provides equivalent, safe behavior for immutable and mutable temporal objects.\n *
\n * The input temporal object may be in a calendar system other than ISO.\n * Implementations may choose to document compatibility with other calendar systems,\n * or reject non-ISO temporal objects by {@link TemporalQueries#chronology() querying the chronology}.\n *
\n * This method may be called from multiple threads in parallel.\n * It must be thread-safe when invoked.\n *\n * @param {Temporal} temporal - the temporal object to add the amount to, not null\n * @return {Temporal} an object of the same observable type with the addition made, not null\n * @throws DateTimeException if unable to add\n * @throws ArithmeticException if numeric overflow occurs\n */\n addTo(temporal){\n abstractMethodFail('adjustInto');\n }\n\n /**\n * Subtracts this object from the specified temporal object.\n *
\n * Subtracts the amount from the specified temporal object using the logic\n * encapsulated in the implementing class.\n *
\n * There are two equivalent ways of using this method.\n * The first is to invoke this method directly.\n * The second is to use {@link Temporal#minus(TemporalAmount)}:\n *
\n * // these two lines are equivalent, but the second approach is recommended\n * dateTime = amount.subtractFrom(dateTime);\n * dateTime = dateTime.minus(amount);\n *\n * It is recommended to use the second approach, {@code minus(TemporalAmount)},\n * as it is a lot clearer to read in code.\n *\n * @implSpec\n * The implementation must take the input object and subtract from it.\n * The implementation defines the logic of the subtraction and is responsible for\n * documenting that logic. It may use any method on {@code Temporal} to\n * query the temporal object and perform the subtraction.\n * The returned object must have the same observable type as the input object\n *
\n * The input object must not be altered.\n * Instead, an adjusted copy of the original must be returned.\n * This provides equivalent, safe behavior for immutable and mutable temporal objects.\n *
\n * The input temporal object may be in a calendar system other than ISO.\n * Implementations may choose to document compatibility with other calendar systems,\n * or reject non-ISO temporal objects by {@link TemporalQueries#chronology() querying the chronology}.\n *
\n * This method may be called from multiple threads in parallel.\n * It must be thread-safe when invoked.\n *\n * @param {Temporal} temporal - the temporal object to subtract the amount from, not null\n * @return {Temporal} an object of the same observable type with the subtraction made, not null\n * @throws DateTimeException if unable to subtract\n * @throws ArithmeticException if numeric overflow occurs\n */\n subtractFrom(temporal){\n abstractMethodFail('adjustInto');\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/temporal/TemporalAmount.js\n **/","/**\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n/**\n * A year in the ISO-8601 calendar system, such as {@code 2007}.\n *
\n * {@code Year} is an immutable date-time object that represents a year.\n * Any field that can be derived from a year can be obtained.\n *
\n * Note that years in the ISO chronology only align with years in the\n * Gregorian-Julian system for modern years. Parts of Russia did not switch to the\n * modern Gregorian/ISO rules until 1920.\n * As such, historical years must be treated with caution.\n *
\n * This class does not store or represent a month, day, time or time-zone.\n * For example, the value \"2007\" can be stored in a {@code Year}.\n *
\n * Years represented by this class follow the ISO-8601 standard and use\n * the proleptic numbering system. Year 1 is preceded by year 0, then by year -1.\n *
\n * The ISO-8601 calendar system is the modern civil calendar system used today\n * in most of the world. It is equivalent to the proleptic Gregorian calendar\n * system, in which today's rules for leap years are applied for all time.\n * For most applications written today, the ISO-8601 rules are entirely suitable.\n * However, any application that makes use of historical dates, and requires them\n * to be accurate will find the ISO-8601 approach unsuitable.\n *\n *
\n * Measurement of time is built on units, such as years, months, days, hours, minutes and seconds.\n * Implementations of this interface represent those units.\n *
\n * An instance of this interface represents the unit itself, rather than an amount of the unit.\n * See {@link Period} for a class that represents an amount in terms of the common units.\n *
\n * The most commonly used units are defined in {@link ChronoUnit}.\n * Further units are supplied in {@link IsoFields}.\n * Units can also be written by application code by implementing this interface.\n *
\n * The unit works using double dispatch. Client code calls methods on a date-time like\n * {@code LocalDateTime} which check if the unit is a {@code ChronoUnit}.\n * If it is, then the date-time must handle it.\n * Otherwise, the method call is re-dispatched to the matching method in this interface.\n *\n * @interface\n */\nexport class TemporalUnit {}\n\n\n/** WEBPACK FOOTER **\n ** ./src/temporal/TemporalUnit.js\n **/","/**\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\n/**\n * A field of date-time, such as month-of-year or hour-of-minute.\n *
\n * Date and time is expressed using fields which partition the time-line into something\n * meaningful for humans. Implementations of this interface represent those fields.\n *
\n * The most commonly used units are defined in {@link ChronoField}.\n * Further fields are supplied in {@link IsoFields}, {@link WeekFields} and {@link JulianFields}.\n * Fields can also be written by application code by implementing this interface.\n *
\n * The field works using double dispatch. Client code calls methods on a date-time like\n * {@code LocalDateTime} which check if the field is a {@code ChronoField}.\n * If it is, then the date-time must handle it.\n * Otherwise, the method call is re-dispatched to the matching method in this interface.\n *\n * @interface\n */\nexport class TemporalField {}\n\n\n/** WEBPACK FOOTER **\n ** ./src/temporal/TemporalField.js\n **/","/**\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport {assert} from '../assert';\nimport {DateTimeException, IllegalArgumentException} from '../errors';\nimport {MathUtil} from '../MathUtil';\n\n/**\n * The range of valid values for a date-time field.\n * \n * All TemporalField instances have a valid range of values.\n * For example, the ISO day-of-month runs from 1 to somewhere between 28 and 31.\n * This class captures that valid range.\n * \n * It is important to be aware of the limitations of this class.\n * Only the minimum and maximum values are provided.\n * It is possible for there to be invalid values within the outer range.\n * For example, a weird field may have valid values of 1, 2, 4, 6, 7, thus\n * have a range of '1 - 7', despite that fact that values 3 and 5 are invalid.\n * \n * Instances of this class are not tied to a specific field.\n */\nexport class ValueRange {\n\n /**\n *\n * @param {!number} minSmallest\n * @param {!number} minLargest\n * @param {!number} maxSmallest\n * @param {!number} maxLargest\n */\n constructor(minSmallest, minLargest, maxSmallest, maxLargest) {\n assert(!(minSmallest > minLargest), 'Smallest minimum value \\'' + minSmallest +\n '\\' must be less than largest minimum value \\'' + minLargest + '\\'', IllegalArgumentException);\n assert(!(maxSmallest > maxLargest), 'Smallest maximum value \\'' + maxSmallest +\n '\\' must be less than largest maximum value \\'' + maxLargest + '\\'', IllegalArgumentException);\n assert(!(minLargest > maxLargest), 'Minimum value \\'' + minLargest +\n '\\' must be less than maximum value \\'' + maxLargest + '\\'', IllegalArgumentException);\n\n this._minSmallest = minSmallest;\n this._minLargest = minLargest;\n this._maxLargest = maxLargest;\n this._maxSmallest = maxSmallest;\n }\n\n /**\n * Is the value range fixed and fully known.\n *
\n * For example, the ISO day-of-month runs from 1 to between 28 and 31.\n * Since there is uncertainty about the maximum value, the range is not fixed.\n * However, for the month of January, the range is always 1 to 31, thus it is fixed.\n *\n * @return {boolean} true if the set of values is fixed\n */\n isFixed() {\n return this._minSmallest === this._minLargest && this._maxSmallest === this._maxLargest;\n }\n\n /**\n *\n * @returns {number}\n */\n minimum(){\n return this._minSmallest;\n }\n\n /**\n *\n * @returns {number}\n */\n largestMinimum(){\n return this._minLargest;\n }\n\n /**\n *\n * @returns {number}\n */\n maximum(){\n return this._maxLargest;\n }\n\n /**\n *\n * @returns {number}\n */\n smallestMaximum(){\n return this._maxSmallest;\n }\n\n /**\n *\n * @returns {boolean}\n */\n isValidValue(value) {\n return (this.minimum() <= value && value <= this.maximum());\n }\n\n /**\n *\n * @param {number} value\n * @param {TemporalField} field\n */\n checkValidValue(value, field) {\n var msg;\n if (!this.isValidValue(value)) {\n if (field != null) {\n msg = ('Invalid value for ' + field + ' (valid values ' + (this.toString()) + '): ') + value;\n } else {\n msg = ('Invalid value (valid values ' + (this.toString()) + '): ') + value;\n }\n return assert(false, msg, DateTimeException);\n }\n }\n\n /**\n * Checks that the specified value is valid and fits in an {@code int}.\n *
\n * This validates that the value is within the valid range of values and that\n * all valid values are within the bounds of an {@code int}.\n * The field is only used to improve the error message.\n *\n * @param {number} value - the value to check\n * @param {TemporalField} field - the field being checked, may be null\n * @return {number} the value that was passed in\n * @see #isValidIntValue(long)\n */\n checkValidIntValue(value, field) {\n if (this.isValidIntValue(value) === false) {\n throw new DateTimeException('Invalid int value for ' + field + ': ' + value);\n }\n return value;\n }\n\n /**\n * Checks if the value is within the valid range and that all values\n * in the range fit in an {@code int}.\n *
\n * This method combines {@link #isIntValue()} and {@link #isValidValue(long)}.\n *\n * @param {number} value - the value to check\n * @return true if the value is valid and fits in an {@code int}\n */\n isValidIntValue(value) {\n return this.isIntValue() && this.isValidValue(value);\n }\n\n /**\n * Checks if all values in the range fit in an {@code int}.\n *
\n * This checks that all valid values are within the bounds of an {@code int}.\n *
\n * For example, the ISO month-of-year has values from 1 to 12, which fits in an {@code int}.\n * By comparison, ISO nano-of-day runs from 1 to 86,400,000,000,000 which does not fit in an {@code int}.\n *
\n * This implementation uses {@link #getMinimum()} and {@link #getMaximum()}.\n *\n * @return boolean if a valid value always fits in an {@code int}\n */\n isIntValue() { // should be isSafeIntegerValue\n return this.minimum() >= MathUtil.MIN_SAFE_INTEGER && this.maximum() <= MathUtil.MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if this range is equal to another range.\n *
\n * The comparison is based on the four values, minimum, largest minimum,\n * smallest maximum and maximum.\n * Only objects of type {@code ValueRange} are compared, other types return false.\n *\n * @param {*} other - the object to check, null returns false\n * @return {boolean} true if this is equal to the other range\n */\n equals(other) {\n if (other === this) {\n return true;\n }\n if (other instanceof ValueRange) {\n return this._minSmallest === other._minSmallest && this._minLargest === other._minLargest &&\n this._maxSmallest === other._maxSmallest && this._maxLargest === other._maxLargest;\n }\n return false;\n }\n\n /**\n * A hash code for this range.\n *\n * @return {number} a suitable hash code\n */\n hashCode() {\n var hash = this._minSmallest + this._minLargest << 16 + this._minLargest >> 48 + this._maxSmallest << 32 +\n this._maxSmallest >> 32 + this._maxLargest << 48 + this._maxLargest >> 16;\n return (hash ^ (hash >>> 32));\n }\n \n /*\n * Outputs this range as a String.\n * \n * The format will be '{min}/{largestMin} - {smallestMax}/{max}',\n * where the largestMin or smallestMax sections may be omitted, together\n * with associated slash, if they are the same as the min or max.\n *\n * @return {string} a string representation of this range, not null\n */\n toString() {\n var str = this.minimum() + (this.minimum() !== this.largestMinimum() ? '/' + (this.largestMinimum()) : '');\n str += ' - ';\n str += this.smallestMaximum() + (this.smallestMaximum() !== this.maximum() ? '/' + (this.maximum()) : '');\n return str;\n }\n\n /*\n * called with 2 params: Obtains a fixed value range.\n *\n * This factory obtains a range where the minimum and maximum values are fixed.\n * For example, the ISO month-of-year always runs from 1 to 12.\n *\n * @param min the minimum value\n * @param max the maximum value\n * @return the ValueRange for min, max, not null\n\n * called with 3 params: Obtains a variable value range.\n *\n * This factory obtains a range where the minimum value is fixed and the maximum value may vary.\n * For example, the ISO day-of-month always starts at 1, but ends between 28 and 31.\n *\n * @param min the minimum value\n * @param maxSmallest the smallest maximum value\n * @param maxLargest the largest maximum value\n * @return the ValueRange for min, smallest max, largest max, not null\n\n * called with 4 params: Obtains a fully variable value range.\n *\n * This factory obtains a range where both the minimum and maximum value may vary.\n *\n * @param minSmallest the smallest minimum value\n * @param minLargest the largest minimum value\n * @param maxSmallest the smallest maximum value\n * @param maxLargest the largest maximum value\n *\n * @return {ValueRange} the ValueRange for smallest min, largest min, smallest max, largest max, not null\n */\n static of() {\n if (arguments.length === 2) {\n return new ValueRange(arguments[0], arguments[0], arguments[1], arguments[1]);\n } else if (arguments.length === 3) {\n return new ValueRange(arguments[0], arguments[0], arguments[1], arguments[2]);\n } else if (arguments.length === 4) {\n return new ValueRange(arguments[0], arguments[1], arguments[2], arguments[3]);\n } else {\n return assert(false, 'Invalid number of arguments ' + arguments.length, IllegalArgumentException);\n }\n }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/temporal/ValueRange.js\n **/","/*\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport {TemporalAccessor} from './TemporalAccessor';\n\n/**\n * Framework-level interface defining read-write access to a temporal object,\n * such as a date, time, offset or some combination of these.\n *
\n * This is the base interface type for date, time and offset objects that\n * are complete enough to be manipulated using plus and minus.\n * It is implemented by those classes that can provide and manipulate information\n * as {@link TemporalField fields} or {@link TemporalQuery queries}.\n * See {@link TemporalAccessor} for the read-only version of this interface.\n *
\n * Most date and time information can be represented as a number.\n * These are modeled using {@code TemporalField} with the number held using\n * a {@code long} to handle large values. Year, month and day-of-month are\n * simple examples of fields, but they also include instant and offsets.\n * See {@link ChronoField} for the standard set of fields.\n *
\n * Two pieces of date/time information cannot be represented by numbers,\n * the {@link Chronology chronology} and the {@link ZoneId time-zone}.\n * These can be accessed via {@link #query(TemporalQuery) queries} using\n * the static methods defined on {@link TemporalQueries}.\n *
\n * This interface is a framework-level interface that should not be widely\n * used in application code. Instead, applications should create and pass\n * around instances of concrete types, such as {@code LocalDate}.\n * There are many reasons for this, part of which is that implementations\n * of this interface may be in calendar systems other than ISO.\n * See {@link ChronoLocalDate} for a fuller discussion of the issues.\n *\n *
\n * A class should implement this interface if it meets three criteria:\n *
\n *
\n * Four examples make this clear:\n *
\n *\n * @interface\n */\nexport class Temporal extends TemporalAccessor {}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/temporal/Temporal.js\n **/","/**\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nimport {ChronoField} from './ChronoField';\nimport {TemporalQueries} from './TemporalQueries';\nimport {UnsupportedTemporalTypeException} from '../errors';\n\nexport class TemporalAccessor {\n /**\n * Queries this date-time.\n *
\n * This queries this date-time using the specified query strategy object.\n *
\n * Queries are a key tool for extracting information from date-times.\n * They exists to externalize the process of querying, permitting different\n * approaches, as per the strategy design pattern.\n * Examples might be a query that checks if the date is the day before February 29th\n * in a leap year, or calculates the number of days to your next birthday.\n *
\n * The most common query implementations are method references, such as\n * {@code LocalDate::from} and {@code ZoneId::from}.\n * Further implementations are on {@link TemporalQueries}.\n * Queries may also be defined by applications.\n *\n * @implSpec\n * Implementations of this method must behave as follows:\n *
\n if (query == TemporalQueries.zoneId()\n || query == TemporalQueries.chronology()\n || query == TemporalQueries.precision()) {\n return null;\n }\n return query.queryFrom(this);\n *\n *\n * @param {TemporalQuery} query the query to invoke, not null\n * @return the query result, null may be returned (defined by the query)\n * @throws DateTimeException if unable to query\n * @throws ArithmeticException if numeric overflow occurs\n */\n query(query) {\n if (query === TemporalQueries.zoneId()\n || query === TemporalQueries.chronology()\n || query === TemporalQueries.precision()) {\n return null;\n }\n return query.queryFrom(this);\n }\n\n /**\n * Gets the value of the specified field as an {@code int}.\n *
\n * This queries the date-time for the value for the specified field.\n * The returned value will always be within the valid range of values for the field.\n * If the date-time cannot return the value, because the field is unsupported or for\n * some other reason, an exception will be thrown.\n *\n *
\n * If the field is not a {@code ChronoField}, then the result of this method\n * is obtained by invoking {@code TemporalField.getFrom(TemporalAccessor)}\n * passing {@code this} as the argument.\n *
\n * Implementations must not alter either this object.\n *\n * @param {TemporalField} field - the field to get, not null\n * @return {number} the value for the field, within the valid range of values\n * @throws DateTimeException if a value for the field cannot be obtained\n * @throws DateTimeException if the range of valid values for the field exceeds an {@code int}\n * @throws DateTimeException if the value is outside the range of valid values for the field\n * @throws ArithmeticException if numeric overflow occurs\n */\n get(field) {\n return this.range(field).checkValidIntValue(this.getLong(field), field);\n }\n\n /**\n * Gets the range of valid values for the specified field.\n *
\n * All fields can be expressed as a {@code long} integer.\n * This method returns an object that describes the valid range for that value.\n * The value of this temporal object is used to enhance the accuracy of the returned range.\n * If the date-time cannot return the range, because the field is unsupported or for\n * some other reason, an exception will be thrown.\n *
\n * Note that the result only describes the minimum and maximum valid values\n * and it is important not to read too much into them. For example, there\n * could be values within the range that are invalid for the field.\n *\n *
\n * If the field is not a {@code ChronoField}, then the result of this method\n * is obtained by invoking {@code TemporalField.rangeRefinedBy(TemporalAccessorl)}\n * passing {@code this} as the argument.\n *
\n * Implementations must not alter either this object.\n *\n * @param {TemporalField} field the field to query the range for, not null\n * @return {ValueRange} the range of valid values for the field, not null\n * @throws DateTimeException if the range for the field cannot be obtained\n */\n range(field) {\n if (field instanceof ChronoField) {\n if (this.isSupported(field)) {\n return field.range();\n }\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n return field.rangeRefinedBy(this);\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/temporal/TemporalAccessor.js\n **/","/**\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport {ChronoField} from './ChronoField';\nimport {createTemporalQuery} from './TemporalQuery';\n\nimport {LocalDate} from '../LocalDate';\nimport {LocalTime} from '../LocalTime';\nimport {ZoneOffset} from '../ZoneOffset';\n\n/**\n * Common implementations of {@code TemporalQuery}.\n *
\n * This class provides common implementations of {@link TemporalQuery}.\n * These queries are primarily used as optimizations, allowing the internals\n * of other objects to be extracted effectively. Note that application code\n * can also use the {@code from(TemporalAccessor)} method on most temporal\n * objects as a method reference matching the query interface, such as\n * {@code LocalDate::from} and {@code ZoneId::from}.\n *
\n * There are two equivalent ways of using a {@code TemporalQuery}.\n * The first is to invoke the method on the interface directly.\n * The second is to use {@link TemporalAccessor#query(TemporalQuery)}:\n *
\n * // these two lines are equivalent, but the second approach is recommended\n * dateTime = query.queryFrom(dateTime);\n * dateTime = dateTime.query(query);\n *\n * It is recommended to use the second approach, {@code query(TemporalQuery)},\n * as it is a lot clearer to read in code.\n *\n */\nexport class TemporalQueries {\n\n /**\n * A strict query for the {@code ZoneId}.\n *
\n * This queries a {@code TemporalAccessor} for the zone.\n * The zone is only returned if the date-time conceptually contains a {@code ZoneId}.\n * It will not be returned if the date-time only conceptually has an {@code ZoneOffset}.\n * Thus a {@link ZonedDateTime} will return the result of\n * {@code getZone()}, but an {@link OffsetDateTime} will\n * return null.\n *
\n * In most cases, applications should use {@link #ZONE} as this query is too strict.\n *
\n * The result from JDK classes implementing {@code TemporalAccessor} is as follows:
\n * {@code LocalDate} returns null
\n * {@code LocalTime} returns null
\n * {@code LocalDateTime} returns null
\n * {@code ZonedDateTime} returns the associated zone
\n * {@code OffsetTime} returns null
\n * {@code OffsetDateTime} returns null
\n * {@code ChronoLocalDate} returns null
\n * {@code ChronoLocalDateTime} returns null
\n * {@code ChronoZonedDateTime} returns the associated zone
\n * {@code Era} returns null
\n * {@code DayOfWeek} returns null
\n * {@code Month} returns null
\n * {@code Year} returns null
\n * {@code YearMonth} returns null
\n * {@code MonthDay} returns null
\n * {@code ZoneOffset} returns null
\n * {@code Instant} returns null
\n *\n * @return a query that can obtain the zone ID of a temporal, not null\n */\n static zoneId() {\n return TemporalQueries.ZONE_ID;\n }\n\n /**\n * A query for the {@code Chronology}.\n *
\n * This queries a {@code TemporalAccessor} for the chronology.\n * If the target {@code TemporalAccessor} represents a date, or part of a date,\n * then it should return the chronology that the date is expressed in.\n * As a result of this definition, objects only representing time, such as\n * {@code LocalTime}, will return null.\n *
\n * The result from js-joda classes implementing {@code TemporalAccessor} is as follows:
\n * {@code LocalDate} returns {@code IsoChronology.INSTANCE}
\n * {@code LocalTime} returns null (does not represent a date)
\n * {@code LocalDateTime} returns {@code IsoChronology.INSTANCE}
\n * {@code ZonedDateTime} returns {@code IsoChronology.INSTANCE}
\n * {@code OffsetTime} returns null (does not represent a date)
\n * {@code OffsetDateTime} returns {@code IsoChronology.INSTANCE}
\n * {@code ChronoLocalDate} returns the associated chronology
\n * {@code ChronoLocalDateTime} returns the associated chronology
\n * {@code ChronoZonedDateTime} returns the associated chronology
\n * {@code Era} returns the associated chronology
\n * {@code DayOfWeek} returns null (shared across chronologies)
\n * {@code Month} returns {@code IsoChronology.INSTANCE}
\n * {@code Year} returns {@code IsoChronology.INSTANCE}
\n * {@code YearMonth} returns {@code IsoChronology.INSTANCE}
\n * {@code MonthDay} returns null {@code IsoChronology.INSTANCE}
\n * {@code ZoneOffset} returns null (does not represent a date)
\n * {@code Instant} returns null (does not represent a date)
\n *
\n * The method {@link Chronology#from(TemporalAccessor)} can be used as a\n * {@code TemporalQuery}\n * That method is equivalent to this query, except that it throws an\n * exception if a chronology cannot be obtained.\n *\n * @return {TemporalQuery} a query that can obtain the chronology of a temporal, not null\n */\n static chronology() {\n return TemporalQueries.CHRONO;\n }\n\n /**\n * A query for the smallest supported unit.\n *
\n * This queries a {@code TemporalAccessor} for the time precision.\n * If the target {@code TemporalAccessor} represents a consistent or complete date-time,\n * date or time then this must return the smallest precision actually supported.\n * Note that fields such as {@code NANO_OF_DAY} and {@code NANO_OF_SECOND}\n * are defined to always return ignoring the precision, thus this is the only\n * way to find the actual smallest supported unit.\n * For example, were {@code GregorianCalendar} to implement {@code TemporalAccessor}\n * it would return a precision of {@code MILLIS}.\n *
\n * The result from js-joda classes implementing {@code TemporalAccessor} is as follows:
\n * {@code LocalDate} returns {@code DAYS}
\n * {@code LocalTime} returns {@code NANOS}
\n * {@code LocalDateTime} returns {@code NANOS}
\n * {@code ZonedDateTime} returns {@code NANOS}
\n * {@code OffsetTime} returns {@code NANOS}
\n * {@code OffsetDateTime} returns {@code NANOS}
\n * {@code ChronoLocalDate} returns {@code DAYS}
\n * {@code ChronoLocalDateTime} returns {@code NANOS}
\n * {@code ChronoZonedDateTime} returns {@code NANOS}
\n * {@code Era} returns {@code ERAS}
\n * {@code DayOfWeek} returns {@code DAYS}
\n * {@code Month} returns {@code MONTHS}
\n * {@code Year} returns {@code YEARS}
\n * {@code YearMonth} returns {@code MONTHS}
\n * {@code MonthDay} returns null (does not represent a complete date or time)
\n * {@code ZoneOffset} returns null (does not represent a date or time)
\n * {@code Instant} returns {@code NANOS}
\n *\n * @return a query that can obtain the precision of a temporal, not null\n */\n static precision() {\n return TemporalQueries.PRECISION;\n }\n\n /**\n * A lenient query for the {@code ZoneId}, falling back to the {@code ZoneOffset}.\n *
\n * This queries a {@code TemporalAccessor} for the zone.\n * It first tries to obtain the zone, using {@link #zoneId()}.\n * If that is not found it tries to obtain the {@link #offset()}.\n *
\n * In most cases, applications should use this query rather than {@code #zoneId()}.\n *
\n * This query examines the {@link ChronoField#OFFSET_SECONDS offset-seconds}\n * field and uses it to create a {@code ZoneOffset}.\n *
\n * The method {@link ZoneId#from(TemporalAccessor)} can be used as a\n * {@code TemporalQuery} via a method reference, {@code ZoneId::from}.\n * That method is equivalent to this query, except that it throws an\n * exception if a zone cannot be obtained.\n *\n * @return a query that can obtain the zone ID or offset of a temporal, not null\n */\n static zone() {\n return TemporalQueries.ZONE;\n }\n\n /**\n * A query for {@code ZoneOffset} returning null if not found.\n *
\n * This returns a {@code TemporalQuery} that can be used to query a temporal\n * object for the offset. The query will return null if the temporal\n * object cannot supply an offset.\n *
\n * The query implementation examines the {@link ChronoField#OFFSET_SECONDS OFFSET_SECONDS}\n * field and uses it to create a {@code ZoneOffset}.\n *
\n * The method {@link java.time.ZoneOffset#from(TemporalAccessor)} can be used as a\n * {@code TemporalQuery} via a method reference, {@code ZoneOffset::from}.\n * This query and {@code ZoneOffset::from} will return the same result if the\n * temporal object contains an offset. If the temporal object does not contain\n * an offset, then the method reference will throw an exception, whereas this\n * query will return null.\n *\n * @return a query that can obtain the offset of a temporal, not null\n */\n static offset() {\n return TemporalQueries.OFFSET;\n }\n\n /**\n * A query for {@code LocalDate} returning null if not found.\n *
\n * This returns a {@code TemporalQuery} that can be used to query a temporal\n * object for the local date. The query will return null if the temporal\n * object cannot supply a local date.\n *
\n * The query implementation examines the {@link ChronoField#EPOCH_DAY EPOCH_DAY}\n * field and uses it to create a {@code LocalDate}.\n *\n * @return a query that can obtain the date of a temporal, not null\n */\n static localDate() {\n return TemporalQueries.LOCAL_DATE;\n }\n\n /**\n * A query for {@code LocalTime} returning null if not found.\n *
\n * This returns a {@code TemporalQuery} that can be used to query a temporal\n * object for the local time. The query will return null if the temporal\n * object cannot supply a local time.\n *
\n * The query implementation examines the {@link ChronoField#NANO_OF_DAY NANO_OF_DAY}\n * field and uses it to create a {@code LocalTime}.\n *\n * @return a query that can obtain the time of a temporal, not null\n */\n static localTime() {\n return TemporalQueries.LOCAL_TIME;\n }\n}\n\nexport function _init() {\n //-----------------------------------------------------------------------\n /**\n * A strict query for the {@code ZoneId}.\n */\n TemporalQueries.ZONE_ID = createTemporalQuery('ZONE_ID', (temporal) => {\n return temporal.query(TemporalQueries.ZONE_ID);\n });\n\n /**\n * A query for the {@code Chronology}.\n */\n TemporalQueries.CHRONO = createTemporalQuery('CHRONO', (temporal) => {\n return temporal.query(TemporalQueries.CHRONO);\n });\n\n /**\n * A query for the smallest supported unit.\n */\n TemporalQueries.PRECISION = createTemporalQuery('PRECISION', (temporal) => {\n return temporal.query(TemporalQueries.PRECISION);\n });\n\n //-----------------------------------------------------------------------\n /**\n * A query for {@code ZoneOffset} returning null if not found.\n */\n TemporalQueries.OFFSET = createTemporalQuery('OFFSET', (temporal) => {\n if (temporal.isSupported(ChronoField.OFFSET_SECONDS)) {\n return ZoneOffset.ofTotalSeconds(temporal.get(TemporalQueries.OFFSET_SECONDS));\n }\n return null;\n });\n\n /**\n * A lenient query for the {@code ZoneId}, falling back to the {@code ZoneOffset}.\n */\n TemporalQueries.ZONE = createTemporalQuery('ZONE', (temporal) => {\n var zone = temporal.query(TemporalQueries.ZONE_ID);\n return (zone != null ? zone : temporal.query(TemporalQueries.OFFSET));\n });\n\n /**\n * A query for {@code LocalDate} returning null if not found.\n */\n TemporalQueries.LOCAL_DATE = createTemporalQuery('LOCAL_DATE', (temporal) => {\n if (temporal.isSupported(ChronoField.EPOCH_DAY)) {\n return LocalDate.ofEpochDay(temporal.getLong(TemporalQueries.EPOCH_DAY));\n }\n return null;\n });\n\n /**\n * A query for {@code LocalTime} returning null if not found.\n */\n TemporalQueries.LOCAL_TIME = createTemporalQuery('LOCAL_TIME', (temporal) => {\n if (temporal.isSupported(ChronoField.NANO_OF_DAY)) {\n return LocalTime.ofNanoOfDay(temporal.getLong(TemporalQueries.NANO_OF_DAY));\n }\n return null;\n });\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/temporal/TemporalQueries.js\n **/","/*\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport {abstractMethodFail} from '../assert';\nimport {Enum} from '../Enum';\n\n\n/**\n * Strategy for querying a temporal object.\n *
\n * Queries are a key tool for extracting information from temporal objects.\n * They exist to externalize the process of querying, permitting different\n * approaches, as per the strategy design pattern.\n * Examples might be a query that checks if the date is the day before February 29th\n * in a leap year, or calculates the number of days to your next birthday.\n *
\n * The {@link TemporalField} interface provides another mechanism for querying\n * temporal objects. That interface is limited to returning a {@code long}.\n * By contrast, queries can return any type.\n *
\n * There are two equivalent ways of using a {@code TemporalQuery}.\n * The first is to invoke the method on this interface directly.\n * The second is to use {@link TemporalAccessor#query(TemporalQuery)}:\n *
\n * // these two lines are equivalent, but the second approach is recommended\n * temporal = thisQuery.queryFrom(temporal);\n * temporal = temporal.query(thisQuery);\n *\n * It is recommended to use the second approach, {@code query(TemporalQuery)},\n * as it is a lot clearer to read in code.\n *
\n * The most common implementations are method references, such as\n * {@code LocalDate::from} and {@code ZoneId::from}.\n * Further implementations are on {@link TemporalQueries}.\n * Queries may also be defined by applications.\n *\n *
\n * This queries the specified temporal object to return an object using the logic\n * encapsulated in the implementing class.\n * Examples might be a query that checks if the date is the day before February 29th\n * in a leap year, or calculates the number of days to your next birthday.\n *
\n * There are two equivalent ways of using this method.\n * The first is to invoke this method directly.\n * The second is to use {@link TemporalAccessor#query(TemporalQuery)}:\n *
\n * // these two lines are equivalent, but the second approach is recommended\n * temporal = thisQuery.queryFrom(temporal);\n * temporal = temporal.query(thisQuery);\n *\n * It is recommended to use the second approach, {@code query(TemporalQuery)},\n * as it is a lot clearer to read in code.\n *\n *
\n * The input temporal object may be in a calendar system other than ISO.\n * Implementations may choose to document compatibility with other calendar systems,\n * or reject non-ISO temporal objects by {@link TemporalQueries#chronology() querying the chronology}.\n *
\n * This method may be called from multiple threads in parallel.\n * It must be thread-safe when invoked.\n *\n * @param {TemporalAccessor} temporal the temporal object to query, not null\n * @return the queried value, may return null to indicate not found\n * @throws DateTimeException if unable to query\n * @throws ArithmeticException if numeric overflow occurs\n */\n queryFrom(temporal){\n abstractMethodFail('queryFrom');\n }\n\n}\n\n/**\n * Factory to create something similar to the JSR-310 {TemporalQuery} interface, takes a function and returns a new TemporalQuery object that presents that function\n * as the queryFrom() function.\n * @param name for the underlying Enum\n * @param queryFromFunction\n */\nexport function createTemporalQuery(name, queryFromFunction) {\n class ExtendedTemporalQuery extends TemporalQuery {\n\n }\n\n ExtendedTemporalQuery.prototype.queryFrom = queryFromFunction;\n return new ExtendedTemporalQuery(name);\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/temporal/TemporalQuery.js\n **/","/**\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nimport {DateTimeException} from './errors';\nimport {LocalTime} from './LocalTime';\n\n/**\n *\n *
\n * Most applications should declare method signatures, fields and variables\n * as {@link LocalDate}, not this interface.\n *
\n * A {@code ChronoLocalDate} is the abstract representation of a date where the\n * {@code Chronology chronology}, or calendar system, is pluggable.\n * The date is defined in terms of fields expressed by {@link TemporalField},\n * where most common implementations are defined in {@link ChronoField}.\n * The chronology defines how the calendar system operates and the meaning of\n * the standard fields.\n *\n *
\n * The primary use case where this interface should be used is where the generic\n * type parameter {@code \n * When the chronology is defined in the generic type parameter as ? or otherwise\n * unknown at development time, the rest of the discussion below applies.\n * \n * To emphasize the point, declaring a method signature, field or variable as this\n * interface type can initially seem like the sensible way to globalize an application,\n * however it is usually the wrong approach.\n * As such, it should be considered an application-wide architectural decision to choose\n * to use this interface as opposed to {@code LocalDate}.\n *\n * \n * 1) Applications using this interface, as opposed to using just {@code LocalDate},\n * face a significantly higher probability of bugs. This is because the calendar system\n * in use is not known at development time. A key cause of bugs is where the developer\n * applies assumptions from their day-to-day knowledge of the ISO calendar system\n * to code that is intended to deal with any arbitrary calendar system.\n * The section below outlines how those assumptions can cause problems\n * The primary mechanism for reducing this increased risk of bugs is a strong code review process.\n * This should also be considered a extra cost in maintenance for the lifetime of the code.\n * \n * 2) This interface does not enforce immutability of implementations.\n * While the implementation notes indicate that all implementations must be immutable\n * there is nothing in the code or type system to enforce this. Any method declared\n * to accept a {@code ChronoLocalDate} could therefore be passed a poorly or\n * maliciously written mutable implementation.\n * \n * 3) Applications using this interface must consider the impact of eras.\n * {@code LocalDate} shields users from the concept of eras, by ensuring that {@code getYear()}\n * returns the proleptic year. That decision ensures that developers can think of\n * {@code LocalDate} instances as consisting of three fields - year, month-of-year and day-of-month.\n * By contrast, users of this interface must think of dates as consisting of four fields -\n * era, year-of-era, month-of-year and day-of-month. The extra era field is frequently\n * forgotten, yet it is of vital importance to dates in an arbitrary calendar system.\n * For example, in the Japanese calendar system, the era represents the reign of an Emperor.\n * Whenever one reign ends and another starts, the year-of-era is reset to one.\n * \n * 4) The only agreed international standard for passing a date between two systems\n * is the ISO-8601 standard which requires the ISO calendar system. Using this interface\n * throughout the application will inevitably lead to the requirement to pass the date\n * across a network or component boundary, requiring an application specific protocol or format.\n * \n * 5) Long term persistence, such as a database, will almost always only accept dates in the\n * ISO-8601 calendar system (or the related Julian-Gregorian). Passing around dates in other\n * calendar systems increases the complications of interacting with persistence.\n * \n * 6) Most of the time, passing a {@code ChronoLocalDate} throughout an application\n * is unnecessary, as discussed in the last section below.\n *\n * \n * Code that queries the day-of-month and assumes that the value will never be more than\n * 31 is invalid. Some calendar systems have more than 31 days in some months.\n * \n * Code that adds 12 months to a date and assumes that a year has been added is invalid.\n * Some calendar systems have a different number of months, such as 13 in the Coptic or Ethiopic.\n * \n * Code that adds one month to a date and assumes that the month-of-year value will increase\n * by one or wrap to the next year is invalid. Some calendar systems have a variable number\n * of months in a year, such as the Hebrew.\n * \n * Code that adds one month, then adds a second one month and assumes that the day-of-month\n * will remain close to its original value is invalid. Some calendar systems have a large difference\n * between the length of the longest month and the length of the shortest month.\n * For example, the Coptic or Ethiopic have 12 months of 30 days and 1 month of 5 days.\n * \n * Code that adds seven days and assumes that a week has been added is invalid.\n * Some calendar systems have weeks of other than seven days, such as the French Revolutionary.\n * \n * Code that assumes that because the year of {@code date1} is greater than the year of {@code date2}\n * then {@code date1} is after {@code date2} is invalid. This is invalid for all calendar systems\n * when referring to the year-of-era, and especially untrue of the Japanese calendar system\n * where the year-of-era restarts with the reign of every new Emperor.\n * \n * Code that treats month-of-year one and day-of-month one as the start of the year is invalid.\n * Not all calendar systems start the year when the month value is one.\n * \n * In general, manipulating a date, and even querying a date, is wide open to bugs when the\n * calendar system is unknown at development time. This is why it is essential that code using\n * this interface is subjected to additional code reviews. It is also why an architectural\n * decision to avoid this interface type is usually the correct one.\n *\n * \n * This approach treats the problem of globalized calendar systems as a localization issue\n * and confines it to the UI layer. This approach is in keeping with other localization\n * issues in the java platform.\n * \n * As discussed above, performing calculations on a date where the rules of the calendar system\n * are pluggable requires skill and is not recommended.\n * Fortunately, the need to perform calculations on a date in an arbitrary calendar system\n * is extremely rare. For example, it is highly unlikely that the business rules of a library\n * book rental scheme will allow rentals to be for one month, where meaning of the month\n * is dependent on the user's preferred calendar system.\n * \n * A key use case for calculations on a date in an arbitrary calendar system is producing\n * a month-by-month calendar for display and user interaction. Again, this is a UI issue,\n * and use of this interface solely within a few methods of the UI layer may be justified.\n * \n * In any other part of the system, where a date must be manipulated in a calendar system\n * other than ISO, the use case will generally specify the calendar system to use.\n * For example, an application may need to calculate the next Islamic or Hebrew holiday\n * which may require manipulating the date.\n * This kind of use case can be handled as follows:\n * \n * Developers writing low-level frameworks or libraries should also avoid this interface.\n * Instead, one of the two general purpose access interfaces should be used.\n * Use {@link TemporalAccessor} if read-only access is required, or use {@link Temporal}\n * if read-write access is required.\n *\n * \n * Additional calendar systems may be added to the system.\n * See {@link Chronology} for more details.\n * \n * In JDK 8, this is an interface with default methods.\n * Since there are no default methods in JDK 7, an abstract class is used.\n */\nexport class ChronoLocalDate extends Temporal {\n\n isSupported(fieldOrUnit) {\n if (fieldOrUnit instanceof ChronoField) {\n return fieldOrUnit.isDateBased();\n } else if (fieldOrUnit instanceof ChronoUnit) {\n return fieldOrUnit.isDateBased();\n }\n return fieldOrUnit != null && fieldOrUnit.isSupportedBy(this);\n }\n\n query(query) {\n if (query === TemporalQueries.chronology()) {\n return this.chronology();\n } else if (query === TemporalQueries.precision()) {\n return ChronoUnit.DAYS;\n } else if (query === TemporalQueries.localDate()) {\n return LocalDate.ofEpochDay(this.toEpochDay());\n } else if (query === TemporalQueries.localTime() || query === TemporalQueries.zone() ||\n query === TemporalQueries.zoneId() || query === TemporalQueries.offset()) {\n return null;\n }\n return super.query(query);\n }\n\n adjustInto(temporal) {\n return temporal.with(ChronoField.EPOCH_DAY, this.toEpochDay());\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/chrono/ChronoLocalDate.js\n **/","/**\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport {assert, requireNonNull} from '../assert';\n\nimport {DateTimeParseException, NullPointerException} from '../errors';\n\nimport {Period} from '../Period';\n\nimport {ParsePosition} from './ParsePosition';\nimport {DateTimeBuilder} from './DateTimeBuilder';\nimport {DateTimeParseContext} from './DateTimeParseContext';\nimport {DateTimePrintContext} from './DateTimePrintContext';\nimport {DateTimeFormatterBuilder} from './DateTimeFormatterBuilder';\nimport {SignStyle} from './SignStyle';\nimport {StringBuilder} from './StringBuilder';\nimport {ResolverStyle} from './ResolverStyle';\n\nimport {IsoChronology} from '../chrono/IsoChronology';\nimport {ChronoField} from '../temporal/ChronoField';\nimport {createTemporalQuery} from '../temporal/TemporalQuery';\n\n/**\n *\n * \n * This returns a singleton {@linkplain TemporalQuery query} that provides\n * access to additional information from the parse. The query always returns\n * a non-null period, with a zero period returned instead of null.\n * \n * There are two situations where this query may return a non-zero period.\n * \n * In both cases, if a complete {@code ChronoLocalDateTime} or {@code Instant}\n * is parsed, then the excess days are added to the date part.\n * As a result, this query will return a zero period.\n * \n * The {@code SMART} behaviour handles the common \"end of day\" 24:00 value.\n * Processing in {@code LENIENT} mode also produces the same result:\n * \n * This returns a singleton {@linkplain TemporalQuery query} that provides\n * access to additional information from the parse. The query always returns\n * a non-null boolean, true if parsing saw a leap-second, false if not.\n * \n * Instant parsing handles the special \"leap second\" time of '23:59:60'.\n * Leap seconds occur at '23:59:60' in the UTC time-zone, but at other\n * local times in different time-zones. To avoid this potential ambiguity,\n * the handling of leap-seconds is limited to\n * {@link DateTimeFormatterBuilder#appendInstant()}, as that method\n * always parses the instant with the UTC zone offset.\n * \n * If the time '23:59:60' is received, then a simple conversion is applied,\n * replacing the second-of-minute of 60 with 59. This query can be used\n * on the parse result to determine if the leap-second adjustment was made.\n * The query will return one second of excess if it did adjust to remove\n * the leap-second, and zero if not. Note that applying a leap-second\n * smoothing mechanism, such as UTC-SLS, is the responsibility of the\n * application, as follows:\n * \n * This formats the date-time to a String using the rules of the formatter.\n *\n * @param {TemporalAccessor} temporal the temporal object to print, not null\n * @return {String} the printed string, not null\n * @throws DateTimeException if an error occurs during formatting\n */\n format(temporal) {\n var buf = new StringBuilder(32);\n this._formatTo(temporal, buf);\n return buf.toString();\n }\n\n //-----------------------------------------------------------------------\n /**\n * Formats a date-time object to an {@code Appendable} using this formatter.\n * \n * This formats the date-time to the specified destination.\n * {@link Appendable} is a general purpose interface that is implemented by all\n * key character output classes including {@code StringBuffer}, {@code StringBuilder},\n * {@code PrintStream} and {@code Writer}.\n * \n * Although {@code Appendable} methods throw an {@code IOException}, this method does not.\n * Instead, any {@code IOException} is wrapped in a runtime exception.\n *\n * @param {TemporalAccessor} temporal - the temporal object to print, not null\n * @param {StringBuilder} appendable - the appendable to print to, not null\n * @throws DateTimeException if an error occurs during formatting\n */\n _formatTo(temporal, appendable) {\n requireNonNull(temporal, 'temporal');\n requireNonNull(appendable, 'appendable');\n var context = new DateTimePrintContext(temporal, this);\n this._printerParser.print(context, appendable);\n }\n\n /**\n * function overloading for {@link DateTimeFormatter.parse}\n *\n * if called with one arg {@link DateTimeFormatter.parse1} is called\n * otherwise {@link DateTimeFormatter.parse2}\n *\n * @param {string} text\n * @param {TemporalQuery} type\n * @return {TemporalAccessor}\n */\n parse(text, type){\n if(arguments.length === 1){\n return this.parse1(text);\n } else {\n return this.parse2(text, type);\n }\n }\n\n /**\n * Fully parses the text producing a temporal object.\n * \n * This parses the entire text producing a temporal object.\n * It is typically more useful to use {@link #parse(CharSequence, TemporalQuery)}.\n * The result of this method is {@code TemporalAccessor} which has been resolved,\n * applying basic validation checks to help ensure a valid date-time.\n * \n * If the parse completes without reading the entire length of the text,\n * or a problem occurs during parsing or merging, then an exception is thrown.\n *\n * @param {String} text the text to parse, not null\n * @return {TemporalAccessor} the parsed temporal object, not null\n * @throws DateTimeParseException if unable to parse the requested result\n */\n parse1(text) {\n requireNonNull(text, 'text');\n try {\n return this._parseToBuilder(text, null).resolve(this._resolverStyle, this._resolverFields);\n } catch (ex) {\n if(ex instanceof DateTimeParseException){\n throw ex;\n } else {\n throw this._createError(text, ex);\n }\n }\n }\n\n /**\n * Fully parses the text producing a temporal object.\n *\n * This parses the entire text producing a temporal object.\n * It is typically more useful to use {@link #parse(CharSequence, TemporalQuery)}.\n * The result of this method is {@code TemporalAccessor} which has been resolved,\n * applying basic validation checks to help ensure a valid date-time.\n *\n * If the parse completes without reading the entire length of the text,\n * or a problem occurs during parsing or merging, then an exception is thrown.\n *\n * @param text the text to parse, not null\n * @param type the type to extract, not null\n * @return the parsed temporal object, not null\n * @throws DateTimeParseException if unable to parse the requested result\n */\n parse2(text, type) {\n requireNonNull(text, 'text');\n requireNonNull(type, 'type');\n try {\n var builder = this._parseToBuilder(text, null).resolve(this._resolverStyle, this._resolverFields);\n return builder.build(type);\n } catch (ex) {\n if(ex instanceof DateTimeParseException){\n throw ex;\n } else {\n throw this._createError(text, ex);\n }\n }\n }\n\n _createError(text, ex) {\n var abbr = '';\n if (text.length > 64) {\n abbr = text.subString(0, 64) + '...';\n } else {\n abbr = text;\n }\n return new DateTimeParseException('Text \\'' + abbr + '\\' could not be parsed: ' + ex.message, text, 0, ex);\n }\n\n\n /**\n * Parses the text to a builder.\n * \n * This parses to a {@code DateTimeBuilder} ensuring that the text is fully parsed.\n * This method throws {@link DateTimeParseException} if unable to parse, or\n * some other {@code DateTimeException} if another date/time problem occurs.\n *\n * @param text the text to parse, not null\n * @param position the position to parse from, updated with length parsed\n * and the index of any error, null if parsing whole string\n * @return the engine representing the result of the parse, not null\n * @throws DateTimeParseException if the parse fails\n */\n _parseToBuilder(text, position) {\n var pos = (position != null ? position : new ParsePosition(0));\n var result = this._parseUnresolved0(text, pos);\n if (result == null || pos.getErrorIndex() >= 0 || (position == null && pos.getIndex() < text.length)) {\n var abbr = '';\n if (text.length > 64) {\n abbr = text.substr(0, 64).toString() + '...';\n } else {\n abbr = text;\n }\n if (pos.getErrorIndex() >= 0) {\n throw new DateTimeParseException('Text \\'' + abbr + '\\' could not be parsed at index ' +\n pos.getErrorIndex(), text, pos.getErrorIndex());\n } else {\n throw new DateTimeParseException('Text \\'' + abbr + '\\' could not be parsed, unparsed text found at index ' +\n pos.getIndex(), text, pos.getIndex());\n }\n }\n return result.toBuilder();\n }\n\n /**\n * Parses the text using this formatter, without resolving the result, intended\n * for advanced use cases.\n * \n * Parsing is implemented as a two-phase operation.\n * First, the text is parsed using the layout defined by the formatter, producing\n * a {@code Map} of field to value, a {@code ZoneId} and a {@code Chronology}.\n * Second, the parsed data is resolved, by validating, combining and\n * simplifying the various fields into more useful ones.\n * This method performs the parsing stage but not the resolving stage.\n * \n * The result of this method is {@code TemporalAccessor} which represents the\n * data as seen in the input. Values are not validated, thus parsing a date string\n * of '2012-00-65' would result in a temporal with three fields - year of '2012',\n * month of '0' and day-of-month of '65'.\n * \n * The text will be parsed from the specified start {@code ParsePosition}.\n * The entire length of the text does not have to be parsed, the {@code ParsePosition}\n * will be updated with the index at the end of parsing.\n * \n * Errors are returned using the error index field of the {@code ParsePosition}\n * instead of {@code DateTimeParseException}.\n * The returned error index will be set to an index indicative of the error.\n * Callers must check for errors before using the context.\n * \n * If the formatter parses the same field more than once with different values,\n * the result will be an error.\n * \n * This method is intended for advanced use cases that need access to the\n * internal state during parsing. Typical application code should use\n * {@link #parse(CharSequence, TemporalQuery)} or the parse method on the target type.\n *\n * @param text the text to parse, not null\n * @param position the position to parse from, updated with length parsed\n * and the index of any error, not null\n * @return the parsed text, null if the parse results in an error\n * @throws DateTimeException if some problem occurs during parsing\n * @throws IndexOutOfBoundsException if the position is invalid\n */\n parseUnresolved(text, position) {\n return this._parseUnresolved0(text, position);\n }\n\n _parseUnresolved0(text, position) {\n assert(text != null, 'text', NullPointerException);\n assert(position != null, 'position', NullPointerException);\n var context = new DateTimeParseContext(this);\n var pos = position.getIndex();\n pos = this._printerParser.parse(context, text, pos);\n if (pos < 0) {\n position.setErrorIndex(~pos); // index not updated from input\n return null;\n }\n position.setIndex(pos); // errorIndex not updated from input\n return context.toParsed();\n }\n\n /**\n * Returns the formatter as a composite printer parser.\n *\n * @param {boolean} optional whether the printer/parser should be optional\n * @return {CompositePrinterParser} the printer/parser, not null\n */\n toPrinterParser(optional) {\n return this._printerParser.withOptional(optional);\n }\n\n toString() {\n var pattern = this._printerParser.toString();\n return pattern.indexOf('[') === 0 ? pattern : pattern.substring(1, pattern.length - 1);\n }\n\n}\n\nexport function _init() {\n\n DateTimeFormatter.ISO_LOCAL_DATE = new DateTimeFormatterBuilder()\n .appendValue(ChronoField.YEAR, 4, 10, SignStyle.EXCEEDS_PAD)\n .appendLiteral('-')\n .appendValue(ChronoField.MONTH_OF_YEAR, 2)\n .appendLiteral('-')\n .appendValue(ChronoField.DAY_OF_MONTH, 2)\n .toFormatter(ResolverStyle.STRICT).withChronology(IsoChronology.INSTANCE);\n\n DateTimeFormatter.ISO_LOCAL_TIME = new DateTimeFormatterBuilder()\n .appendValue(ChronoField.HOUR_OF_DAY, 2)\n .appendLiteral(':')\n .appendValue(ChronoField.MINUTE_OF_HOUR, 2)\n .optionalStart()\n .appendLiteral(':')\n .appendValue(ChronoField.SECOND_OF_MINUTE, 2)\n .optionalStart()\n .appendFraction(ChronoField.NANO_OF_SECOND, 0, 9, true)\n .toFormatter(ResolverStyle.STRICT);\n\n DateTimeFormatter.ISO_LOCAL_DATE_TIME = new DateTimeFormatterBuilder()\n .parseCaseInsensitive()\n .append(DateTimeFormatter.ISO_LOCAL_DATE)\n .appendLiteral('T')\n .append(DateTimeFormatter.ISO_LOCAL_TIME)\n .toFormatter(ResolverStyle.STRICT).withChronology(IsoChronology.INSTANCE);\n\n DateTimeFormatter.ISO_INSTANT = new DateTimeFormatterBuilder()\n .parseCaseInsensitive()\n .appendInstant()\n .toFormatter(ResolverStyle.STRICT);\n\n DateTimeFormatter.PARSED_EXCESS_DAYS = createTemporalQuery('PARSED_EXCESS_DAYS', (temporal) => {\n if (temporal instanceof DateTimeBuilder) {\n return temporal.excessDays;\n } else {\n return Period.ZERO;\n }\n });\n\n DateTimeFormatter.PARSED_LEAP_SECOND = createTemporalQuery('PARSED_LEAP_SECOND', (temporal) => {\n if (temporal instanceof DateTimeBuilder) {\n return temporal.leapSecond;\n } else {\n return false;\n }\n });\n\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/format/DateTimeFormatter.js\n **/","/*\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos \n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport {MathUtil} from './MathUtil';\nimport {requireNonNull, requireInstance} from './assert';\nimport {DateTimeException, UnsupportedTemporalTypeException, ArithmeticException, DateTimeParseException} from './errors';\n\nimport {IsoChronology} from './chrono/IsoChronology';\n\nimport {ChronoUnit} from './temporal/ChronoUnit';\nimport {TemporalAmount} from './temporal/TemporalAmount';\n\nimport {LocalDate} from './LocalDate';\n\n/**\n * The pattern for parsing.\n */\nconst PATTERN = /([-+]?)P(?:([-+]?[0-9]+)Y)?(?:([-+]?[0-9]+)M)?(?:([-+]?[0-9]+)W)?(?:([-+]?[0-9]+)D)?/;\n\n/**\n * A date-based amount of time, such as '2 years, 3 months and 4 days'.\n * \n * This class models a quantity or amount of time in terms of years, months and days.\n * See {@link Duration} for the time-based equivalent to this class.\n * \n * Durations and period differ in their treatment of daylight savings time\n * when added to {@link ZonedDateTime}. A {@code Duration} will add an exact\n * number of seconds, thus a duration of one day is always exactly 24 hours.\n * By contrast, a {@link Period} will add a conceptual day, trying to maintain\n * the local time.\n * \n * For example, consider adding a period of one day and a duration of one day to\n * 18:00 on the evening before a daylight savings gap. The {@link Period} will add\n * the conceptual day and result in a {@code ZonedDateTime} at 18:00 the following day.\n * By contrast, the {@code Duration} will add exactly 24 hours, resulting in a\n * {@code ZonedDateTime} at 19:00 the following day (assuming a one hour DST gap).\n * \n * The supported units of a period are {@link ChronoUnit#YEARS YEARS},\n * {@link ChronoUnit#MONTHS MONTHS} and {@link ChronoUnit#DAYS DAYS}.\n * All three fields are always present, but may be set to zero.\n * \n * The period may be used with any calendar system.\n * The meaning of a 'year' or 'month' is only applied when the object is added to a date.\n * \n * The period is modeled as a directed amount of time, meaning that individual parts of the\n * period may be negative.\n * \n * The months and years fields may be {@linkplain #normalized() normalized}.\n * The normalization assumes a 12 month year, so is not appropriate for all calendar systems.\n *\n * \n * The resulting period will have the specified years.\n * The months and days units will be zero.\n *\n * @param {number} years - the number of years, positive or negative\n * @return {Period} the period of years, not null\n */\n static ofYears(years) {\n return Period.create(years, 0, 0);\n }\n\n /**\n * Obtains a {@link Period} representing a number of months.\n * \n * The resulting period will have the specified months.\n * The years and days units will be zero.\n *\n * @param {number} months - the number of months, positive or negative\n * @return {Period} the period of months, not null\n */\n static ofMonths(months) {\n return Period.create(0, months, 0);\n }\n\n /**\n * Obtains a {@link Period} representing a number of weeks.\n * \n * The resulting period will have days equal to the weeks multiplied by seven.\n * The years and months units will be zero.\n *\n * @param {number} weeks - the number of weeks, positive or negative\n * @return {Period} the period of days, not null\n */\n static ofWeeks(weeks) {\n return Period.create(0, 0, MathUtil.safeMultiply(weeks, 7));\n }\n\n /**\n * Obtains a {@link Period} representing a number of days.\n * \n * The resulting period will have the specified days.\n * The years and months units will be zero.\n *\n * @param {number} days - the number of days, positive or negative\n * @return {Period} the period of days, not null\n */\n static ofDays(days) {\n return Period.create(0, 0, days);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Obtains a {@link Period} representing a number of years, months and days.\n * \n * This creates an instance based on years, months and days.\n *\n * @param {!number} years - the amount of years, may be negative\n * @param {!number} months - the amount of months, may be negative\n * @param {!number} days - the amount of days, may be negative\n * @return {Period} the period of years, months and days, not null\n */\n static of(years, months, days) {\n return Period.create(years, months, days);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Obtains an instance of {@link Period} from a temporal amount.\n * \n * This obtains a period based on the specified amount.\n * A {@code TemporalAmount} represents an - amount of time, which may be\n * date-based or time-based, which this factory extracts to a {@link Period}.\n * \n * The conversion loops around the set of units from the amount and uses\n * the {@link ChronoUnit#YEARS YEARS}, {@link ChronoUnit#MONTHS MONTHS}\n * and {@link ChronoUnit#DAYS DAYS} units to create a period.\n * If any other units are found then an exception is thrown.\n * \n * If the amount is a {@code ChronoPeriod} then it must use the ISO chronology.\n *\n * @param {TemporalAmount} amount - the temporal amount to convert, not null\n * @return {Period} the equivalent period, not null\n * @throws DateTimeException if unable to convert to a {@link Period}\n * @throws ArithmeticException if the amount of years, months or days exceeds an int\n */\n static from(amount) {\n if (amount instanceof Period) {\n return amount;\n }\n/*\n if (amount instanceof ChronoPeriod) {\n if (IsoChronology.INSTANCE !== amount.chronology()) {\n throw new DateTimeException('Period requires ISO chronology: ' + amount);\n }\n }\n*/\n requireNonNull(amount, 'amount');\n var years = 0;\n var months = 0;\n var days = 0;\n var units = amount.units();\n for (let i=0; i \n * The result of this method can be a negative period if the end is before the start.\n * The negative sign will be the same in each of year, month and day.\n\n * see {@link ChronoLocalDate.until}\n *\n * @param {LocalDate} startDate - the start date, inclusive, not null\n * @param {LocalDate} endDate - the end date, exclusive, not null\n * @return {Period} the period between this date and the end date, not null\n */\n static between(startDate, endDate) {\n requireNonNull(startDate, 'startDate');\n requireNonNull(endDate, 'endDate');\n requireInstance(startDate, LocalDate, 'startDate');\n requireInstance(endDate, LocalDate, 'endDate');\n return startDate.until(endDate);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Obtains a {@link Period} from a text string such as {@code PnYnMnD}.\n * \n * This will parse the string produced by {@code toString()} which is\n * based on the ISO-8601 period formats {@code PnYnMnD} and {@code PnW}.\n * \n * The string starts with an optional sign, denoted by the ASCII negative\n * or positive symbol. If negative, the whole period is negated.\n * The ASCII letter 'P' is next in upper or lower case.\n * There are then four sections, each consisting of a number and a suffix.\n * At least one of the four sections must be present.\n * The sections have suffixes in ASCII of 'Y', 'M', 'W' and 'D' for\n * years, months, weeks and days, accepted in upper or lower case.\n * The suffixes must occur in order.\n * The number part of each section must consist of ASCII digits.\n * The number may be prefixed by the ASCII negative or positive symbol.\n * The number must parse to an {@code int}.\n * \n * The leading plus/minus sign, and negative values for other units are\n * not part of the ISO-8601 standard. In addition, ISO-8601 does not\n * permit mixing between the {@code PnYnMnD} and {@code PnW} formats.\n * Any week-based input is multiplied by 7 and treated as a number of days.\n * \n * For example, the following are valid inputs:\n * \n * The period is defined by the chronology.\n * It controls the supported units and restricts addition/subtraction\n * to {@code ChronoLocalDate} instances of the same chronology.\n *\n * @return {IsoChronology} the chronology defining the period, not null\n */\n chronology() {\n return IsoChronology.INSTANCE;\n }\n\n /**\n * Gets the value of the requested unit.\n * \n * The supported units are chronology specific.\n * They will typically be {@link ChronoUnit#YEARS YEARS},\n * {@link ChronoUnit#MONTHS MONTHS} and {@link ChronoUnit#DAYS DAYS}.\n * Requesting an unsupported unit will throw an exception.\n *\n * @param {TemporalUnit} unit the {@code TemporalUnit} for which to return the value\n * @return {number} the long value of the unit\n * @throws DateTimeException if the unit is not supported\n * @throws UnsupportedTemporalTypeException if the unit is not supported\n */\n get(unit) {\n if (unit === ChronoUnit.YEARS) {\n return this._years;\n }\n if (unit === ChronoUnit.MONTHS) {\n return this._months;\n }\n if (unit === ChronoUnit.DAYS) {\n return this._days;\n }\n throw new UnsupportedTemporalTypeException('Unsupported unit: ' + unit);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Checks if all three units of this period are zero.\n * \n * A zero period has the value zero for the years, months and days units.\n *\n * @return {boolean} true if this period is zero-length\n */\n isZero() {\n return (this === Period.ZERO);\n }\n\n /**\n * Checks if any of the three units of this period are negative.\n * \n * This checks whether the years, months or days units are less than zero.\n *\n * @return {boolean} true if any unit of this period is negative\n */\n isNegative() {\n return this._years < 0 || this._months < 0 || this._days < 0;\n }\n\n //-----------------------------------------------------------------------\n /**\n * Gets the amount of years of this period.\n * \n * This returns the years unit.\n * \n * The months unit is not normalized with the years unit.\n * This means that a period of '15 months' is different to a period\n * of '1 year and 3 months'.\n *\n * @return {number} the amount of years of this period, may be negative\n */\n years() {\n return this._years;\n }\n\n /**\n * Gets the amount of months of this period.\n * \n * This returns the months unit.\n * \n * The months unit is not normalized with the years unit.\n * This means that a period of '15 months' is different to a period\n * of '1 year and 3 months'.\n *\n * @return {number} the amount of months of this period, may be negative\n */\n months() {\n return this._months;\n }\n\n /**\n * Gets the amount of days of this period.\n * \n * This returns the days unit.\n *\n * @return {number} the amount of days of this period, may be negative\n */\n days() {\n return this._days;\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this period with the specified amount of years.\n * \n * This sets the amount of the years unit in a copy of this period.\n * The months and days units are unaffected.\n * \n * The months unit is not normalized with the years unit.\n * This means that a period of '15 months' is different to a period\n * of '1 year and 3 months'.\n * \n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} years - the years to represent, may be negative\n * @return {Period} a {@link Period} based on this period with the requested years, not null\n */\n withYears(years) {\n if (years === this._years) {\n return this;\n }\n return Period.create(years, this._months, this._days);\n }\n\n /**\n * Returns a copy of this period with the specified amount of months.\n * \n * This sets the amount of the months unit in a copy of this period.\n * The years and days units are unaffected.\n * \n * The months unit is not normalized with the years unit.\n * This means that a period of '15 months' is different to a period\n * of '1 year and 3 months'.\n * \n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} months - the months to represent, may be negative\n * @return {Period} a {@link Period} based on this period with the requested months, not null\n */\n withMonths(months) {\n if (months === this._months) {\n return this;\n }\n return Period.create(this._years, months, this._days);\n }\n\n /**\n * Returns a copy of this period with the specified amount of days.\n * \n * This sets the amount of the days unit in a copy of this period.\n * The years and months units are unaffected.\n * \n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} days - the days to represent, may be negative\n * @return {Period} a {@link Period} based on this period with the requested days, not null\n */\n withDays(days) {\n if (days === this._days) {\n return this;\n }\n return Period.create(this._years, this._months, days);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this period with the specified amount added.\n * \n * This input amount is converted to a {@link Period} using {@code from(TemporalAmount)}.\n * This operates separately on the years, months and days.\n * \n * For example, '1 year, 6 months and 3 days' plus '2 years, 2 months and 2 days'\n * returns '3 years, 8 months and 5 days'.\n * \n * This instance is immutable and unaffected by this method call.\n *\n * @param {TemporalAmount} amountToAdd - the period to add, not null\n * @return {Period} a {@link Period} based on this period with the requested period added, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n plus(amountToAdd) {\n var amount = Period.from(amountToAdd);\n return Period.create(\n MathUtil.safeAdd(this._years, amount._years),\n MathUtil.safeAdd(this._months, amount._months),\n MathUtil.safeAdd(this._days, amount._days));\n }\n\n /**\n * Returns a copy of this period with the specified years added.\n * \n * This adds the amount to the years unit in a copy of this period.\n * The months and days units are unaffected.\n * For example, '1 year, 6 months and 3 days' plus 2 years returns '3 years, 6 months and 3 days'.\n * \n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} yearsToAdd - the years to add, positive or negative\n * @return {Period} a {@link Period} based on this period with the specified years added, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n plusYears(yearsToAdd) {\n if (yearsToAdd === 0) {\n return this;\n }\n return Period.create(MathUtil.safeToInt(MathUtil.safeAdd(this._years, yearsToAdd)), this._months, this._days);\n }\n\n /**\n * Returns a copy of this period with the specified months added.\n * \n * This adds the amount to the months unit in a copy of this period.\n * The years and days units are unaffected.\n * For example, '1 year, 6 months and 3 days' plus 2 months returns '1 year, 8 months and 3 days'.\n * \n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} monthsToAdd - the months to add, positive or negative\n * @return {Period} a {@link Period} based on this period with the specified months added, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n plusMonths(monthsToAdd) {\n if (monthsToAdd === 0) {\n return this;\n }\n return Period.create(this._years, MathUtil.safeToInt(MathUtil.safeAdd(this._months, monthsToAdd)), this._days);\n }\n\n /**\n * Returns a copy of this period with the specified days added.\n * \n * This adds the amount to the days unit in a copy of this period.\n * The years and months units are unaffected.\n * For example, '1 year, 6 months and 3 days' plus 2 days returns '1 year, 6 months and 5 days'.\n * \n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} daysToAdd - the days to add, positive or negative\n * @return {Period} a {@link Period} based on this period with the specified days added, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n plusDays(daysToAdd) {\n if (daysToAdd === 0) {\n return this;\n }\n return Period.create(this._years, this._months, MathUtil.safeToInt(MathUtil.safeAdd(this._days, daysToAdd)));\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this period with the specified amount subtracted.\n * \n * This input amount is converted to a {@link Period} using {@code from(TemporalAmount)}.\n * This operates separately on the years, months and days.\n * \n * For example, '1 year, 6 months and 3 days' minus '2 years, 2 months and 2 days'\n * returns '-1 years, 4 months and 1 day'.\n * \n * This instance is immutable and unaffected by this method call.\n *\n * @param {TemporalAmount} amountToSubtract - the period to subtract, not null\n * @return {Period} a {@link Period} based on this period with the requested period subtracted, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n minus(amountToSubtract) {\n var amount = Period.from(amountToSubtract);\n return Period.create(\n MathUtil.safeSubtract(this._years, amount._years),\n MathUtil.safeSubtract(this._months, amount._months),\n MathUtil.safeSubtract(this._days, amount._days));\n }\n\n /**\n * Returns a copy of this period with the specified years subtracted.\n * \n * This subtracts the amount from the years unit in a copy of this period.\n * The months and days units are unaffected.\n * For example, '1 year, 6 months and 3 days' minus 2 years returns '-1 years, 6 months and 3 days'.\n * \n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} yearsToSubtract - the years to subtract, positive or negative\n * @return {Period} a {@link Period} based on this period with the specified years subtracted, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n minusYears(yearsToSubtract) {\n return this.plusYears(-1 * yearsToSubtract);\n }\n\n /**\n * Returns a copy of this period with the specified months subtracted.\n * \n * This subtracts the amount from the months unit in a copy of this period.\n * The years and days units are unaffected.\n * For example, '1 year, 6 months and 3 days' minus 2 months returns '1 year, 4 months and 3 days'.\n * \n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} monthsToSubtract - the years to subtract, positive or negative\n * @return {Period} a {@link Period} based on this period with the specified months subtracted, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n minusMonths(monthsToSubtract) {\n return this.plusMonths(-1 * monthsToSubtract);\n }\n\n /**\n * Returns a copy of this period with the specified days subtracted.\n * \n * This subtracts the amount from the days unit in a copy of this period.\n * The years and months units are unaffected.\n * For example, '1 year, 6 months and 3 days' minus 2 days returns '1 year, 6 months and 1 day'.\n * \n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} daysToSubtract - the months to subtract, positive or negative\n * @return {Period} a {@link Period} based on this period with the specified days subtracted, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n minusDays(daysToSubtract) {\n return this.plusDays(-1 * daysToSubtract);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a new instance with each element in this period multiplied\n * by the specified scalar.\n * \n * This simply multiplies each field, years, months, days and normalized time,\n * by the scalar. No normalization is performed.\n *\n * @param {number} scalar - the scalar to multiply by, not null\n * @return {Period} a {@link Period} based on this period with the amounts multiplied by the scalar, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n multipliedBy(scalar) {\n if (this === Period.ZERO || scalar === 1) {\n return this;\n }\n return Period.create(\n MathUtil.safeMultiply(this._years, scalar),\n MathUtil.safeMultiply(this._months, scalar),\n MathUtil.safeMultiply(this._days, scalar));\n }\n\n /**\n * Returns a new instance with each amount in this period negated.\n *\n * @return {Period} a {@link Period} based on this period with the amounts negated, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n negated() {\n return this.multipliedBy(-1);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns a copy of this period with the years and months normalized\n * using a 12 month year.\n * \n * This normalizes the years and months units, leaving the days unit unchanged.\n * The months unit is adjusted to have an absolute value less than 11,\n * with the years unit being adjusted to compensate. For example, a period of\n * '1 Year and 15 months' will be normalized to '2 years and 3 months'.\n * \n * The sign of the years and months units will be the same after normalization.\n * For example, a period of '1 year and -25 months' will be normalized to\n * '-1 year and -1 month'.\n * \n * This normalization uses a 12 month year which is not valid for all calendar systems.\n * \n * This instance is immutable and unaffected by this method call.\n *\n * @return {Period} a {@link Period} based on this period with excess months normalized to years, not null\n * @throws ArithmeticException if numeric overflow occurs\n */\n normalized() {\n var totalMonths = this.toTotalMonths();\n var splitYears = MathUtil.intDiv(totalMonths, 12);\n var splitMonths = MathUtil.intMod(totalMonths, 12); // no overflow\n if (splitYears === this._years && splitMonths === this._months) {\n return this;\n }\n return Period.create(MathUtil.safeToInt(splitYears), splitMonths, this._days);\n }\n\n /**\n * Gets the total number of months in this period using a 12 month year.\n * \n * This returns the total number of months in the period by multiplying the\n * number of years by 12 and adding the number of months.\n * \n * This uses a 12 month year which is not valid for all calendar systems.\n * \n * This instance is immutable and unaffected by this method call.\n *\n * @return {number} the total number of months in the period, may be negative\n */\n toTotalMonths() {\n return this._years * 12 + this._months; // no overflow\n }\n\n //-------------------------------------------------------------------------\n /**\n * Adds this period to the specified temporal object.\n * \n * This returns a temporal object of the same observable type as the input\n * with this period added.\n * \n * In most cases, it is clearer to reverse the calling pattern by using\n * {@link Temporal#plus(TemporalAmount)}.\n * \n * The calculation will add the years, then months, then days.\n * Only non-zero amounts will be added.\n * If the date-time has a calendar system with a fixed number of months in a\n * year, then the years and months will be combined before being added.\n * \n * This instance is immutable and unaffected by this method call.\n *\n * @param {Temporal} temporal - the temporal object to adjust, not null\n * @return {Temporal} an object of the same type with the adjustment made, not null\n * @throws DateTimeException if unable to add\n * @throws ArithmeticException if numeric overflow occurs\n */\n addTo(temporal) {\n requireNonNull(temporal, 'temporal');\n if (this._years !== 0) {\n if (this._months !== 0) {\n temporal = temporal.plus(this.toTotalMonths(), ChronoUnit.MONTHS);\n } else {\n temporal = temporal.plus(this._years, ChronoUnit.YEARS);\n }\n } else if (this._months !== 0) {\n temporal = temporal.plus(this._months, ChronoUnit.MONTHS);\n }\n if (this._days !== 0) {\n temporal = temporal.plus(this._days, ChronoUnit.DAYS);\n }\n return temporal;\n }\n\n /**\n * Subtracts this period from the specified temporal object.\n * \n * This returns a temporal object of the same observable type as the input\n * with this period subtracted.\n * \n * In most cases, it is clearer to reverse the calling pattern by using\n * {@link Temporal#minus(TemporalAmount)}.\n * \n * The calculation operates as follows.\n * First, the chronology of the temporal is checked to ensure it is ISO chronology or null.\n * Second, if the months are zero, the years are added if non-zero, otherwise\n * the combination of years and months is added if non-zero.\n * Finally, any days are added.\n * \n * The calculation will subtract the years, then months, then days.\n * Only non-zero amounts will be subtracted.\n * If the date-time has a calendar system with a fixed number of months in a\n * year, then the years and months will be combined before being subtracted.\n * \n * This instance is immutable and unaffected by this method call.\n *\n * @param {Temporal} temporal - the temporal object to adjust, not null\n * @return {Temporal} an object of the same type with the adjustment made, not null\n * @throws DateTimeException if unable to subtract\n * @throws ArithmeticException if numeric overflow occurs\n */\n subtractFrom(temporal) {\n requireNonNull(temporal, 'temporal');\n if (this._years !== 0) {\n if (this._months !== 0) {\n temporal = temporal.minus(this.toTotalMonths(), ChronoUnit.MONTHS);\n } else {\n temporal = temporal.minus(this._years, ChronoUnit.YEARS);\n }\n } else if (this._months !== 0) {\n temporal = temporal.minus(this._months, ChronoUnit.MONTHS);\n }\n if (this._days !== 0) {\n temporal = temporal.minus(this._days, ChronoUnit.DAYS);\n }\n return temporal;\n }\n\n //-----------------------------------------------------------------------\n /**\n * Checks if this period is equal to another period.\n * \n * The comparison is based on the amounts held in the period.\n * To be equal, the years, months and days units must be individually equal.\n * Note that this means that a period of '15 Months' is not equal to a period\n * of '1 Year and 3 Months'.\n *\n * @param {*} obj - the object to check, null returns false\n * @return {boolean} true if this is equal to the other period\n */\n equals(obj) {\n if (this === obj) {\n return true;\n }\n if (obj instanceof Period) {\n var other = obj;\n return this._years === other._years &&\n this._months === other._months &&\n this._days === other._days;\n }\n return false;\n }\n\n /**\n * A hash code for this period.\n *\n * @return {number} a suitable hash code\n */\n hashCode() {\n return this._years + (this._months << 8) + (this._days << 16);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Outputs this period as a {@code String}, such as {@code P6Y3M1D}.\n * \n * The output will be in the ISO-8601 period format.\n * A zero period will be represented as zero days, 'P0D'.\n *\n * @return {string} a string representation of this period, not null\n */\n toString() {\n if (this === Period.ZERO) {\n return 'P0D';\n } else {\n var buf = 'P';\n if (this._years !== 0) {\n buf += '' + this._years + 'Y';\n }\n if (this._months !== 0) {\n buf += '' + this._months + 'M';\n }\n if (this._days !== 0) {\n buf += '' + this._days + 'D';\n }\n return buf;\n }\n }\n}\n\nexport function _init() {\n /**\n * A constant for a period of zero.\n */\n Period.ZERO = makeZeroPeriod();\n\n function makeZeroPeriod() {\n var zero = Object.create(Period.prototype);\n TemporalAmount.call(zero);\n zero._years = 0;\n zero._months = 0;\n zero._days = 0;\n return zero;\n }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/Period.js\n **/","/*\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\nexport class ParsePosition {\n constructor(index) {\n this._index = index;\n this._errorIndex = -1;\n }\n\n getIndex(){\n return this._index;\n }\n\n setIndex(index){\n this._index = index;\n }\n\n getErrorIndex(){\n return this._errorIndex;\n }\n\n setErrorIndex(errorIndex){\n this._errorIndex = errorIndex;\n }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/format/ParsePosition.js\n **/","/*\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport {requireNonNull} from '../assert';\nimport {DateTimeException} from '../errors';\nimport {MathUtil} from '../MathUtil';\n\nimport {EnumMap} from './EnumMap';\nimport {ResolverStyle} from './ResolverStyle';\n\nimport {IsoChronology} from '../chrono/IsoChronology';\nimport {ChronoLocalDate} from '../chrono/ChronoLocalDate';\nimport {ChronoField} from '../temporal/ChronoField';\nimport {Temporal} from '../temporal/Temporal';\nimport {TemporalQueries} from '../temporal/TemporalQueries';\n\nimport {LocalTime} from '../LocalTime';\nimport {LocalDate} from '../LocalDate';\nimport {Period} from '../Period';\n\n//import {ZoneOffset} from '../ZoneOffset';\n\n/**\n * Builder that can holds date and time fields and related date and time objects.\n * \n * The builder is used to hold onto different elements of date and time.\n * It is designed as two separate maps:\n * \n *\n */\nexport class DateTimeBuilder extends Temporal {\n\n constructor(){\n super();\n\n /**\n * The map of other fields.\n */\n this.fieldValues = new EnumMap();\n /**\n * The chronology.\n */\n this.chrono = null;\n /**\n * The zone.\n */\n this.zone = null;\n /**\n * The date.\n */\n this.date = null;\n /**\n * The time.\n */\n this.time = null;\n /**\n * The leap second flag.\n */\n this.leapSecond = false;\n /**\n * The excess days.\n */\n this.excessDays = null;\n }\n\n /**\n * \n * @param {TemporalField} field\n * @return {Number} field value\n */\n getFieldValue0(field) {\n return this.fieldValues.get(field);\n }\n\n /**\n * Adds a field-value pair to the builder.\n * \n * This adds a field to the builder.\n * If the field is not already present, then the field-value pair is added to the map.\n * If the field is already present and it has the same value as that specified, no action occurs.\n * If the field is already present and it has a different value to that specified, then\n * an exception is thrown.\n *\n * @param {TemporalField} field - the field to add, not null\n * @param {Number} value - the value to add, not null\n * @return {DateTimeBuilder}, this for method chaining\n * @throws DateTimeException if the field is already present with a different value\n */\n _addFieldValue(field, value) {\n requireNonNull(field, 'field');\n var old = this.getFieldValue0(field); // check first for better error message\n if (old != null && old.longValue() !== value) {\n throw new DateTimeException('Conflict found: ' + field + ' ' + old + ' differs from ' + field + ' ' + value + ': ' + this);\n }\n return this._putFieldValue0(field, value);\n }\n\n /**\n * @param {TemporalField} field\n * @param {Number} value\n * @return {DateTimeBuilder}, this for method chaining\n */\n _putFieldValue0(field, value) {\n this.fieldValues.put(field, value);\n return this;\n }\n\n /**\n * Resolves the builder, evaluating the date and time.\n * \n * This examines the contents of the builder and resolves it to produce the best\n * available date and time, throwing an exception if a problem occurs.\n * Calling this method changes the state of the builder.\n *\n * @param {ResolverStyle} resolverStyle - how to resolve\n * @param {Set \n * The fractional value of the field will be output including the\n * preceding decimal point. The preceding value is not output.\n * For example, the second-of-minute value of 15 would be output as {@code .25}.\n * \n * The width of the printed fraction can be controlled. Setting the\n * minimum width to zero will cause no output to be generated.\n * The printed fraction will have the minimum width necessary between\n * the minimum and maximum widths - trailing zeroes are omitted.\n * No rounding occurs due to the maximum width - digits are simply dropped.\n * \n * When parsing in strict mode, the number of parsed digits must be between\n * the minimum and maximum width. When parsing in lenient mode, the minimum\n * width is considered to be zero and the maximum is nine.\n * \n * If the value cannot be obtained then an exception will be thrown.\n * If the value is negative an exception will be thrown.\n * If the field does not have a fixed set of valid values then an\n * exception will be thrown.\n * If the field value in the date-time to be printed is invalid it\n * cannot be printed and an exception will be thrown.\n *\n * @param {TemporalField} field the field to append, not null\n * @param {Number} minWidth the minimum width of the field excluding the decimal point, from 0 to 9\n * @param {Number} maxWidth the maximum width of the field excluding the decimal point, from 1 to 9\n * @param {boolean} decimalPoint whether to output the localized decimal point symbol\n * @return {DateTimeFormatterBuilder} this, for chaining, not null\n * @throws IllegalArgumentException if the field has a variable set of valid values or\n * either width is invalid\n */\n appendFraction(field, minWidth, maxWidth, decimalPoint) {\n this._appendInternal(new FractionPrinterParser(field, minWidth, maxWidth, decimalPoint));\n return this;\n }\n\n /**\n * Appends an instant using ISO-8601 to the formatter with control over\n * the number of fractional digits.\n * \n * Instants have a fixed output format, although this method provides some\n * control over the fractional digits. They are converted to a date-time\n * with a zone-offset of UTC and printed using the standard ISO-8601 format.\n * The localized decimal style is not used.\n * \n * The {@code this.fractionalDigits} parameter allows the output of the fractional\n * second to be controlled. Specifying zero will cause no fractional digits\n * to be output. From 1 to 9 will output an increasing number of digits, using\n * zero right-padding if necessary. The special value -1 is used to output as\n * many digits as necessary to avoid any trailing zeroes.\n * \n * When parsing in strict mode, the number of parsed digits must match the\n * fractional digits. When parsing in lenient mode, any number of fractional\n * digits from zero to nine are accepted.\n * \n * The instant is obtained using {@link ChronoField#INSTANT_SECONDS INSTANT_SECONDS}\n * and optionally (@code NANO_OF_SECOND). The value of {@code INSTANT_SECONDS}\n * may be outside the maximum range of {@code LocalDateTime}.\n * \n * The {@linkplain ResolverStyle resolver style} has no effect on instant parsing.\n * The end-of-day time of '24:00' is handled as midnight at the start of the following day.\n * The leap-second time of '23:59:59' is handled to some degree, see\n * {@link DateTimeFormatter#parsedLeapSecond()} for full details.\n * \n * An alternative to this method is to format/parse the instant as a single\n * epoch-seconds value. That is achieved using {@code appendValue(INSTANT_SECONDS)}.\n *\n * @param {number} [fractionalDigits=-2] - the number of fractional second digits to format with,\n * from 0 to 9, or -1 to use as many digits as necessary\n * @return {DateTimeFormatterBuilder} this, for chaining, not null\n */\n appendInstant(fractionalDigits=-2) {\n if (fractionalDigits < -2 || fractionalDigits > 9) {\n throw new IllegalArgumentException('Invalid fractional digits: ' + fractionalDigits);\n }\n this._appendInternal(new InstantPrinterParser(fractionalDigits));\n return this;\n }\n\n\n //-----------------------------------------------------------------------\n /**\n * Mark the start of an optional section.\n * \n * The output of printing can include optional sections, which may be nested.\n * An optional section is started by calling this method and ended by calling\n * {@link #optionalEnd()} or by ending the build process.\n * \n * All elements in the optional section are treated as optional.\n * During printing, the section is only output if data is available in the\n * {@code TemporalAccessor} for all the elements in the section.\n * During parsing, the whole section may be missing from the parsed string.\n * \n * For example, consider a builder setup as\n * {@code builder.appendValue(HOUR_OF_DAY,2).optionalStart().appendValue(MINUTE_OF_HOUR,2)}.\n * The optional section ends automatically at the end of the builder.\n * During printing, the minute will only be output if its value can be obtained from the date-time.\n * During parsing, the input will be successfully parsed whether the minute is present or not.\n *\n * @return {DateTimeFormatterBuilder} this, for chaining, not null\n */\n optionalStart() {\n this._active.valueParserIndex = -1;\n this._active = new DateTimeFormatterBuilder(this._active, true);\n return this;\n }\n\n /**\n * Ends an optional section.\n * \n * The output of printing can include optional sections, which may be nested.\n * An optional section is started by calling {@link #optionalStart()} and ended\n * using this method (or at the end of the builder).\n * \n * Calling this method without having previously called {@code optionalStart}\n * will throw an exception.\n * Calling this method immediately after calling {@code optionalStart} has no effect\n * on the formatter other than ending the (empty) optional section.\n * \n * All elements in the optional section are treated as optional.\n * During printing, the section is only output if data is available in the\n * {@code TemporalAccessor} for all the elements in the section.\n * During parsing, the whole section may be missing from the parsed string.\n * \n * For example, consider a builder setup as\n * {@code builder.appendValue(HOUR_OF_DAY,2).optionalStart().appendValue(MINUTE_OF_HOUR,2).optionalEnd()}.\n * During printing, the minute will only be output if its value can be obtained from the date-time.\n * During parsing, the input will be successfully parsed whether the minute is present or not.\n *\n * @return {DateTimeFormatterBuilder} this, for chaining, not null\n * @throws IllegalStateException if there was no previous call to {@code optionalStart}\n */\n optionalEnd() {\n if (this._active._parent == null) {\n throw new IllegalStateException('Cannot call optionalEnd() as there was no previous call to optionalStart()');\n }\n if (this._active._printerParsers.length > 0) {\n var cpp = new CompositePrinterParser(this._active._printerParsers, this._active._optional);\n this._active = this._active._parent;\n this._appendInternal(cpp);\n } else {\n this._active = this._active._parent;\n }\n return this;\n }\n\n /**\n * Appends a printer and/or parser to the internal list handling padding.\n *\n * @param pp the printer-parser to add, not null\n * @return the index into the active parsers list\n */\n _appendInternal(pp) {\n assert(pp != null);\n if (this._active._padNextWidth > 0) {\n if (pp != null) {\n pp = new PadPrinterParserDecorator(pp, this._active._padNextWidth, this._active._padNextChar);\n }\n this._active._padNextWidth = 0;\n this._active._padNextChar = 0;\n }\n this._active._printerParsers.push(pp);\n this._active._valueParserIndex = -1;\n return this._active._printerParsers.length - 1;\n }\n\n /**\n * Appends a string literal to the formatter.\n * \n * This string will be output during a print.\n * \n * If the literal is empty, nothing is added to the formatter.\n *\n * @param literal the literal to append, not null\n * @return {DateTimeFormatterBuilder} this, for chaining, not null\n */\n appendLiteral(literal) {\n assert(literal != null);\n this._appendInternalPrinterParser(new StringLiteralPrinterParser(literal));\n return this;\n }\n \n /**\n * Appends a printer and/or parser to the internal list handling padding.\n *\n * @param pp the printer-parser to add, not null\n * @return the index into the active parsers list\n */\n _appendInternalPrinterParser(pp) {\n assert(pp != null);\n if (this._active._padNextWidth > 0) {\n if (pp != null) {\n pp = new PadPrinterParserDecorator(pp, this._active._padNextWidth, this._active._padNextChar);\n }\n this._active._padNextWidth = 0;\n this._active._padNextChar = 0;\n }\n this._active._printerParsers.push(pp);\n this._active._valueParserIndex = -1;\n return this._active._printerParsers.length - 1;\n }\n \n //-----------------------------------------------------------------------\n /**\n * Appends all the elements of a formatter to the builder.\n * \n * This method has the same effect as appending each of the constituent\n * parts of the formatter directly to this builder.\n *\n * @param {DateTimeFormatter} formatter the formatter to add, not null\n * @return {DateTimeFormatterBuilder} this, for chaining, not null\n */\n append(formatter) {\n requireNonNull(formatter, 'formatter');\n this._appendInternal(formatter.toPrinterParser(false));\n return this;\n }\n\n /**\n * Completes this builder by creating the DateTimeFormatter.\n * \n * This will create a formatter with the specified locale.\n * Numbers will be printed and parsed using the standard non-localized set of symbols.\n * \n * Calling this method will end any open optional sections by repeatedly\n * calling {@link #optionalEnd()} before creating the formatter.\n * \n * This builder can still be used after creating the formatter if desired,\n * although the state may have been changed by calls to {@code optionalEnd}.\n *\n * @param resolverStyle the new resolver style\n * @return the created formatter, not null\n */\n toFormatter(resolverStyle=ResolverStyle.SMART) {\n while (this._active._parent != null) {\n this.optionalEnd();\n }\n var pp = new CompositePrinterParser(this._printerParsers, false);\n return new DateTimeFormatter(pp, null, DecimalStyle.STANDARD, resolverStyle, null, null, null);\n }\n\n}\n\nconst EXCEED_POINTS = [\n 0,\n 10,\n 100,\n 1000,\n 10000,\n 100000,\n 1000000,\n 10000000,\n 100000000,\n 1000000000\n];\n\nclass CompositePrinterParser {\n\n constructor(printerParsers, optional) {\n this._printerParsers = printerParsers;\n this._optional = optional;\n }\n\n /**\n * Returns a copy of this printer-parser with the optional flag changed.\n *\n * @param {boolean} optional the optional flag to set in the copy\n * @return {CompositePrinterParser} the new printer-parser, not null\n */\n withOptional(optional) {\n if (optional === this._optional) {\n return this;\n }\n return new CompositePrinterParser(this._printerParsers, optional);\n }\n\n print(context, buf) {\n var length = buf.length();\n if (this._optional) {\n context.startOptional();\n }\n try {\n for (let i=0; i \n * {@code DayOfWeek} is an enum representing the 7 days of the week.\n * This factory allows the enum to be obtained from the {@code int} value.\n * The {@code int} value follows the ISO-8601 standard, from 1 (Monday) to 7 (Sunday).\n *\n * @param {!number} dayOfWeek the day-of-week to represent, from 1 (Monday) to 7 (Sunday)\n * @return {DayOfWeek} the day-of-week singleton, not null\n * @throws DateTimeException if the day-of-week is invalid\n */\n static of(dayOfWeek) {\n if (dayOfWeek < 1 || dayOfWeek > 7) {\n throw new DateTimeException('Invalid value for DayOfWeek: ' + dayOfWeek);\n }\n return ENUMS[dayOfWeek - 1];\n }\n \n /**\n * Obtains an instance of {@code DayOfWeek} from a temporal object.\n * \n * A {@code TemporalAccessor} represents some form of date and time information.\n * This factory converts the arbitrary temporal object to an instance of {@code DayOfWeek}.\n * \n * The conversion extracts the {@link ChronoField#DAY_OF_WEEK DAY_OF_WEEK} field.\n * \n * This method matches the signature of the functional interface {@link TemporalQuery}\n * allowing it to be used as a query via method reference, {@code DayOfWeek::from}.\n *\n * @param {TemporalAccessor} temporal - the temporal object to convert, not null\n * @return {DayOfWeek} the day-of-week, not null\n * @throws DateTimeException if unable to convert to a {@code DayOfWeek}\n */\n static from(temporal) {\n assert(temporal != null, 'temporal', NullPointerException);\n if (temporal instanceof DayOfWeek) {\n return temporal;\n }\n try {\n return DayOfWeek.of(temporal.get(ChronoField.DAY_OF_WEEK));\n } catch (ex) {\n if(ex instanceof DateTimeException) {\n throw new DateTimeException('Unable to obtain DayOfWeek from TemporalAccessor: ' +\n temporal + ', type ' + temporal.name(), ex);\n } else {\n throw ex;\n }\n }\n }\n\n /**\n * Gets the day-of-week {@code int} value.\n * \n * The values are numbered following the ISO-8601 standard, from 1 (Monday) to 7 (Sunday).\n * See {@link WeekFields#dayOfWeek} for localized week-numbering.\n *\n * @return {number} the day-of-week, from 1 (Monday) to 7 (Sunday)\n */\n value() {\n return this._ordinal + 1;\n }\n\n /**\n * Gets the textual representation, such as 'Mon' or 'Friday'.\n * \n * This returns the textual name used to identify the day-of-week.\n * The parameters control the length of the returned text and the locale.\n * \n * If no textual mapping is found then the {@link #getValue() numeric value} is returned.\n *\n * @param {TextStyle} style - the length of the text required, not null\n * @param {Locale} locale - the locale to use, not null\n * @return {string} the text value of the day-of-week, not null\n */\n getDisplayName(style, locale) {\n return new DateTimeFormatterBuilder().appendText(ChronoField.DAY_OF_WEEK, style).toFormatter(locale).format(this);\n }\n\n /**\n * Checks if the specified field is supported.\n * \n * This checks if this day-of-week can be queried for the specified field.\n * If false, then calling the {@link #range(TemporalField) range} and\n * {@link #get(TemporalField) get} methods will throw an exception.\n * \n * If the field is {@link ChronoField#DAY_OF_WEEK DAY_OF_WEEK} then\n * this method returns true.\n * All other {@code ChronoField} instances will return false.\n * \n * If the field is not a {@code ChronoField}, then the result of this method\n * is obtained by invoking {@code TemporalField.isSupportedBy(TemporalAccessor)}\n * passing {@code this} as the argument.\n * Whether the field is supported is determined by the field.\n *\n * @param {TemporalField} field - the field to check, null returns false\n * @return {boolean} true if the field is supported on this day-of-week, false if not\n */\n isSupported(field) {\n if (field instanceof ChronoField) {\n return field === ChronoField.DAY_OF_WEEK;\n }\n return field != null && field.isSupportedBy(this);\n }\n\n /**\n * Gets the range of valid values for the specified field.\n * \n * The range object expresses the minimum and maximum valid values for a field.\n * This day-of-week is used to enhance the accuracy of the returned range.\n * If it is not possible to return the range, because the field is not supported\n * or for some other reason, an exception is thrown.\n * \n * If the field is {@link ChronoField#DAY_OF_WEEK DAY_OF_WEEK} then the\n * range of the day-of-week, from 1 to 7, will be returned.\n * All other {@code ChronoField} instances will throw a {@code DateTimeException}.\n * \n * If the field is not a {@code ChronoField}, then the result of this method\n * is obtained by invoking {@code TemporalField.rangeRefinedBy(TemporalAccessor)}\n * passing {@code this} as the argument.\n * Whether the range can be obtained is determined by the field.\n *\n * @param {TemporalField} field - the field to query the range for, not null\n * @return {ValueRange} the range of valid values for the field, not null\n * @throws DateTimeException if the range for the field cannot be obtained\n */\n range(field) {\n if (field === ChronoField.DAY_OF_WEEK) {\n return field.range();\n } else if (field instanceof ChronoField) {\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n return field.rangeRefinedBy(this);\n }\n\n /**\n * Gets the value of the specified field from this day-of-week as an {@code int}.\n * \n * This queries this day-of-week for the value for the specified field.\n * The returned value will always be within the valid range of values for the field.\n * If it is not possible to return the value, because the field is not supported\n * or for some other reason, an exception is thrown.\n * \n * If the field is {@link ChronoField#DAY_OF_WEEK DAY_OF_WEEK} then the\n * value of the day-of-week, from 1 to 7, will be returned.\n * All other {@code ChronoField} instances will throw a {@code DateTimeException}.\n * \n * If the field is not a {@code ChronoField}, then the result of this method\n * is obtained by invoking {@code TemporalField.getFrom(TemporalAccessor)}\n * passing {@code this} as the argument. Whether the value can be obtained,\n * and what the value represents, is determined by the field.\n *\n * @param {TemporalField} field - the field to get, not null\n * @return {number} the value for the field, within the valid range of values\n * @throws DateTimeException if a value for the field cannot be obtained\n * @throws DateTimeException if the range of valid values for the field exceeds an {@code int}\n * @throws DateTimeException if the value is outside the range of valid values for the field\n * @throws ArithmeticException if numeric overflow occurs\n */\n get(field) {\n if (field === ChronoField.DAY_OF_WEEK) {\n return this.value();\n }\n return this.range(field).checkValidIntValue(this.getLong(field), field);\n }\n\n /**\n * Gets the value of the specified field from this day-of-week as a {@code long}.\n * \n * This queries this day-of-week for the value for the specified field.\n * If it is not possible to return the value, because the field is not supported\n * or for some other reason, an exception is thrown.\n * \n * If the field is {@link ChronoField#DAY_OF_WEEK DAY_OF_WEEK} then the\n * value of the day-of-week, from 1 to 7, will be returned.\n * All other {@code ChronoField} instances will throw a {@code DateTimeException}.\n * \n * If the field is not a {@code ChronoField}, then the result of this method\n * is obtained by invoking {@code TemporalField.getFrom(TemporalAccessor)}\n * passing {@code this} as the argument. Whether the value can be obtained,\n * and what the value represents, is determined by the field.\n *\n * @param {TemporalField} field - the field to get, not null\n * @return {number} the value for the field\n * @throws DateTimeException if a value for the field cannot be obtained\n * @throws ArithmeticException if numeric overflow occurs\n */\n getLong(field) {\n if (field === ChronoField.DAY_OF_WEEK) {\n return this.value();\n } else if (field instanceof ChronoField) {\n throw new UnsupportedTemporalTypeException('Unsupported field: ' + field);\n }\n return field.getFrom(this);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns the day-of-week that is the specified number of days after this one.\n * \n * The calculation rolls around the end of the week from Sunday to Monday.\n * The specified period may be negative.\n * \n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} days - the days to add, positive or negative\n * @return {DayOfWeek} the resulting day-of-week, not null\n */\n plus(days) {\n var amount = MathUtil.floorMod(days, 7);\n return ENUMS[MathUtil.floorMod(this._ordinal + (amount + 7), 7)];\n }\n\n /**\n * Returns the day-of-week that is the specified number of days before this one.\n * \n * The calculation rolls around the start of the year from Monday to Sunday.\n * The specified period may be negative.\n * \n * This instance is immutable and unaffected by this method call.\n *\n * @param {number} days - the days to subtract, positive or negative\n * @return {DayOfWeek} the resulting day-of-week, not null\n */\n minus(days) {\n return this.plus(-1 * MathUtil.floorMod(days, 7));\n }\n\n //-----------------------------------------------------------------------\n /**\n * Queries this day-of-week using the specified query.\n * \n * This queries this day-of-week using the specified query strategy object.\n * The {@code TemporalQuery} object defines the logic to be used to\n * obtain the result. Read the documentation of the query to understand\n * what the result of this method will be.\n * \n * The result of this method is obtained by invoking the\n * {@link TemporalQuery#queryFrom(TemporalAccessor)} method on the\n * specified query passing {@code this} as the argument.\n *\n * @param {TemporalQuery} query the query to invoke, not null\n * @return {*} the query result, null may be returned (defined by the query)\n * @throws DateTimeException if unable to query (defined by the query)\n * @throws ArithmeticException if numeric overflow occurs (defined by the query)\n */\n query(query) {\n if (query === TemporalQueries.precision()) {\n return ChronoUnit.DAYS;\n } else if (query === TemporalQueries.localDate() || query === TemporalQueries.localTime() || query === TemporalQueries.chronology() ||\n query === TemporalQueries.zone() || query === TemporalQueries.zoneId() || query === TemporalQueries.offset()) {\n return null;\n }\n assert(query != null, 'query', NullPointerException);\n return query.queryFrom(this);\n }\n\n /**\n * Adjusts the specified temporal object to have this day-of-week.\n * \n * This returns a temporal object of the same observable type as the input\n * with the day-of-week changed to be the same as this.\n * \n * The adjustment is equivalent to using {@link Temporal#with(TemporalField, long)}\n * passing {@link ChronoField#DAY_OF_WEEK} as the field.\n * Note that this adjusts forwards or backwards within a Monday to Sunday week.\n * See {@link WeekFields#dayOfWeek} for localized week start days.\n * See {@link TemporalAdjusters} for other adjusters\n * with more control, such as {@code next(MONDAY)}.\n * \n * In most cases, it is clearer to reverse the calling pattern by using\n * {@link Temporal#with(TemporalAdjuster)}:\n * \n * For example, given a date that is a Wednesday, the following are output:\n * \n * This instance is immutable and unaffected by this method call.\n *\n * @param {TemporalAdjusters} temporal the target object to be adjusted, not null\n * @return {Temporal} the adjusted object, not null\n * @throws DateTimeException if unable to make the adjustment\n * @throws ArithmeticException if numeric overflow occurs\n */\n adjustInto(temporal) {\n return temporal.with(ChronoField.DAY_OF_WEEK, this.value());\n }\n\n /**\n *\n * @returns {boolean}\n */\n equals(other){\n return this === other;\n }\n\n /**\n *\n * @returns {string}\n */\n toString(){\n return this._name;\n }\n}\n\nvar ENUMS;\n\nexport function _init() {\n DayOfWeek.MONDAY = new DayOfWeek(0, 'MONDAY');\n DayOfWeek.TUESDAY = new DayOfWeek(1, 'TUESDAY');\n DayOfWeek.WEDNESDAY = new DayOfWeek(2, 'WEDNESDAY');\n DayOfWeek.THURSDAY = new DayOfWeek(3, 'THURSDAY');\n DayOfWeek.FRIDAY = new DayOfWeek(4, 'FRIDAY');\n DayOfWeek.SATURDAY = new DayOfWeek(5, 'SATURDAY');\n DayOfWeek.SUNDAY = new DayOfWeek(6, 'SUNDAY');\n\n DayOfWeek.FROM = createTemporalQuery('DayOfWeek.FROM', (temporal) => {\n return DayOfWeek.from(temporal);\n });\n\n ENUMS = [\n DayOfWeek.MONDAY,\n DayOfWeek.TUESDAY,\n DayOfWeek.WEDNESDAY,\n DayOfWeek.THURSDAY,\n DayOfWeek.FRIDAY,\n DayOfWeek.SATURDAY,\n DayOfWeek.SUNDAY\n ];\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/DayOfWeek.js\n **/","/*\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport {requireNonNull} from '../assert';\nimport {MathUtil} from '../MathUtil';\n\nimport {LocalDate} from '../LocalDate';\nimport {Instant} from '../Instant';\nimport {ChronoUnit} from '../temporal/ChronoUnit';\nimport {ChronoField} from '../temporal/ChronoField';\nimport {Temporal} from '../temporal/Temporal';\nimport {TemporalQueries} from '../temporal/TemporalQueries';\n\n/**\n * A date-time without a time-zone in an arbitrary chronology, intended\n * for advanced globalization use cases.\n * \n * Most applications should declare method signatures, fields and variables\n * as {@link LocalDateTime}, not this interface.\n * \n * A {@code ChronoLocalDateTime} is the abstract representation of a local date-time\n * where the {@code Chronology chronology}, or calendar system, is pluggable.\n * The date-time is defined in terms of fields expressed by {@link TemporalField},\n * where most common implementations are defined in {@link ChronoField}.\n * The chronology defines how the calendar system operates and the meaning of\n * the standard fields.\n *\n * \n * Ensure that the discussion in {@code ChronoLocalDate} has been read and understood\n * before using this interface.\n *\n * \n * In JDK 8, this is an interface with default methods.\n * Since there are no default methods in JDK 7, an abstract class is used.\n *\n * @param \n * The {@code Chronology} represents the calendar system in use.\n * The era and other fields in {@link ChronoField} are defined by the chronology.\n *\n * @return the chronology, not null\n */\n chronology() {\n return this.toLocalDate().chronology();\n }\n\n /**\n *\n * @param {TemporalQuery} query\n * @returns {*}\n */\n query(query) {\n if (query === TemporalQueries.chronology()) {\n return this.chronology();\n } else if (query === TemporalQueries.precision()) {\n return ChronoUnit.NANOS;\n } else if (query === TemporalQueries.localDate()) {\n return LocalDate.ofEpochDay(this.toLocalDate().toEpochDay());\n } else if (query === TemporalQueries.localTime()) {\n return this.toLocalTime();\n } else if (query === TemporalQueries.zone() || query === TemporalQueries.zoneId() || query === TemporalQueries.offset()) {\n return null;\n }\n return super.query(query);\n }\n\n adjustInto(temporal) {\n return temporal\n .with(ChronoField.EPOCH_DAY, this.toLocalDate().toEpochDay())\n .with(ChronoField.NANO_OF_DAY, this.toLocalTime().toNanoOfDay());\n }\n\n //-----------------------------------------------------------------------\n /**\n * Converts this date-time to an {@code Instant}.\n * \n * This combines this local date-time and the specified offset to form\n * an {@code Instant}.\n *\n * @param {ZoneOffset} offset the offset to use for the conversion, not null\n * @return {Instant} an {@code Instant} representing the same instant, not null\n */\n toInstant( offset) {\n return Instant.ofEpochSecond(this.toEpochSecond(offset), this.toLocalTime().nano());\n }\n\n /**\n * Converts this date-time to the number of seconds from the epoch\n * of 1970-01-01T00:00:00Z.\n * \n * This combines this local date-time and the specified offset to calculate the\n * epoch-second value, which is the number of elapsed seconds from 1970-01-01T00:00:00Z.\n * Instants on the time-line after the epoch are positive, earlier are negative.\n *\n * @param {ZoneOffset} offset the offset to use for the conversion, not null\n * @return the number of seconds from the epoch of 1970-01-01T00:00:00Z\n */\n toEpochSecond(offset) {\n requireNonNull(offset, 'offset');\n var epochDay = this.toLocalDate().toEpochDay();\n var secs = epochDay * 86400 + this.toLocalTime().toSecondOfDay();\n secs -= offset.totalSeconds();\n return MathUtil.safeToInt(secs);\n }\n\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/chrono/ChronoLocalDateTime.js\n **/","/*\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport {requireNonNull} from '../assert';\nimport {IllegalStateException} from '../errors';\n\nimport {TemporalAdjuster} from './TemporalAdjuster';\nimport {ChronoField} from '../temporal/ChronoField';\nimport {ChronoUnit} from '../temporal/ChronoUnit';\nimport {MathUtil} from '../MathUtil';\n\n/**\n * Common implementations of {@code TemporalAdjuster}.\n * \n * This class provides common implementations of {@link TemporalAdjuster}.\n * They are especially useful to document the intent of business logic and\n * often link well to requirements.\n * For example, these two pieces of code do the same thing, but the second\n * one is clearer (assuming that there is a static import of this class):\n * \n * The JDK 8 ofDateAdjuster(UnaryOperator) method is not backported.\n */\nexport class TemporalAdjusters {\n\n //-----------------------------------------------------------------------\n /**\n * Returns the 'first day of month' adjuster, which returns a new date set to\n * the first day of the current month.\n * \n * The ISO calendar system behaves as follows: \n * The behavior is suitable for use with most calendar systems.\n * It is equivalent to:\n * \n * The ISO calendar system behaves as follows: \n * The behavior is suitable for use with most calendar systems.\n * It is equivalent to:\n * \n * The ISO calendar system behaves as follows: \n * The behavior is suitable for use with most calendar systems.\n * It is equivalent to:\n * \n * The ISO calendar system behaves as follows: \n * The behavior is suitable for use with most calendar systems.\n * It is equivalent to:\n * \n * The ISO calendar system behaves as follows: \n * The behavior is suitable for use with most calendar systems.\n * It is equivalent to:\n * \n * The ISO calendar system behaves as follows: \n * The behavior is suitable for use with most calendar systems.\n * It is equivalent to:\n * \n * The ISO calendar system behaves as follows: \n * The behavior is suitable for use with most calendar systems.\n * It uses the {@code DAY_OF_WEEK} and {@code DAY_OF_MONTH} fields\n * and the {@code DAYS} unit, and assumes a seven day week.\n *\n * @param {DayOfWeek} dayOfWeek the day-of-week, not null\n * @return {TemporalAdjuster} the first in month adjuster, not null\n */\n static firstInMonth(dayOfWeek) {\n requireNonNull(dayOfWeek, 'dayOfWeek');\n return new DayOfWeekInMonth(1, dayOfWeek);\n }\n\n /**\n * Returns the last in month adjuster, which returns a new date\n * in the same month with the last matching day-of-week.\n * This is used for expressions like 'last Tuesday in March'.\n * \n * The ISO calendar system behaves as follows: \n * The behavior is suitable for use with most calendar systems.\n * It uses the {@code DAY_OF_WEEK} and {@code DAY_OF_MONTH} fields\n * and the {@code DAYS} unit, and assumes a seven day week.\n *\n * @param {DayOfWeek} dayOfWeek the day-of-week, not null\n * @return {TemporalAdjuster} the first in month adjuster, not null\n */\n static lastInMonth(dayOfWeek) {\n requireNonNull(dayOfWeek, 'dayOfWeek');\n return new DayOfWeekInMonth(-1, dayOfWeek);\n }\n\n /**\n * Returns the day-of-week in month adjuster, which returns a new date\n * in the same month with the ordinal day-of-week.\n * This is used for expressions like the 'second Tuesday in March'.\n * \n * The ISO calendar system behaves as follows: \n * For a positive or zero ordinal, the algorithm is equivalent to finding the first\n * day-of-week that matches within the month and then adding a number of weeks to it.\n * For a negative ordinal, the algorithm is equivalent to finding the last\n * day-of-week that matches within the month and then subtracting a number of weeks to it.\n * The ordinal number of weeks is not validated and is interpreted leniently\n * according to this algorithm. This definition means that an ordinal of zero finds\n * the last matching day-of-week in the previous month.\n * \n * The behavior is suitable for use with most calendar systems.\n * It uses the {@code DAY_OF_WEEK} and {@code DAY_OF_MONTH} fields\n * and the {@code DAYS} unit, and assumes a seven day week.\n *\n * @param {Number} ordinal the week within the month, unbounded but typically from -5 to 5\n * @param {DayOfWeek} dayOfWeek the day-of-week, not null\n * @return {TemporalAdjuster} the day-of-week in month adjuster, not null\n */\n static dayOfWeekInMonth(ordinal, dayOfWeek) {\n requireNonNull(dayOfWeek, 'dayOfWeek');\n return new DayOfWeekInMonth(ordinal, dayOfWeek);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns the next day-of-week adjuster, which adjusts the date to the\n * first occurrence of the specified day-of-week after the date being adjusted.\n * \n * The ISO calendar system behaves as follows: \n * The behavior is suitable for use with most calendar systems.\n * It uses the {@code DAY_OF_WEEK} field and the {@code DAYS} unit,\n * and assumes a seven day week.\n *\n * @param {DayOfWeek} dayOfWeek the day-of-week to move the date to, not null\n * @return {TemporalAdjuster} the next day-of-week adjuster, not null\n */\n static next(dayOfWeek) {\n return new RelativeDayOfWeek(2, dayOfWeek);\n }\n\n /**\n * Returns the next-or-same day-of-week adjuster, which adjusts the date to the\n * first occurrence of the specified day-of-week after the date being adjusted\n * unless it is already on that day in which case the same object is returned.\n * \n * The ISO calendar system behaves as follows: \n * The behavior is suitable for use with most calendar systems.\n * It uses the {@code DAY_OF_WEEK} field and the {@code DAYS} unit,\n * and assumes a seven day week.\n *\n * @param {DayOfWeek} dayOfWeek the day-of-week to check for or move the date to, not null\n * @return {TemporalAdjuster} the next-or-same day-of-week adjuster, not null\n */\n static nextOrSame(dayOfWeek) {\n return new RelativeDayOfWeek(0, dayOfWeek);\n }\n\n /**\n * Returns the previous day-of-week adjuster, which adjusts the date to the\n * first occurrence of the specified day-of-week before the date being adjusted.\n * \n * The ISO calendar system behaves as follows: \n * The behavior is suitable for use with most calendar systems.\n * It uses the {@code DAY_OF_WEEK} field and the {@code DAYS} unit,\n * and assumes a seven day week.\n *\n * @param {DayOfWeek} dayOfWeek the day-of-week to move the date to, not null\n * @return {TemporalAdjuster} the previous day-of-week adjuster, not null\n */\n static previous(dayOfWeek) {\n return new RelativeDayOfWeek(3, dayOfWeek);\n }\n\n /**\n * Returns the previous-or-same day-of-week adjuster, which adjusts the date to the\n * first occurrence of the specified day-of-week before the date being adjusted\n * unless it is already on that day in which case the same object is returned.\n * \n * The ISO calendar system behaves as follows: \n * The behavior is suitable for use with most calendar systems.\n * It uses the {@code DAY_OF_WEEK} field and the {@code DAYS} unit,\n * and assumes a seven day week.\n *\n * @param {DayOfWeek} dayOfWeek the day-of-week to check for or move the date to, not null\n * @return {TemporalAdjuster} the previous-or-same day-of-week adjuster, not null\n */\n static previousOrSame(dayOfWeek) {\n return new RelativeDayOfWeek(1, dayOfWeek);\n }\n\n}\n\n//-----------------------------------------------------------------------\n/**\n * Enum implementing the adjusters.\n */\nclass Impl extends TemporalAdjuster {\n\n constructor(ordinal) {\n super();\n this._ordinal = ordinal;\n }\n\n adjustInto(temporal) {\n switch (this._ordinal) {\n case 0: return temporal.with(ChronoField.DAY_OF_MONTH, 1);\n case 1: return temporal.with(ChronoField.DAY_OF_MONTH, temporal.range(ChronoField.DAY_OF_MONTH).maximum());\n case 2: return temporal.with(ChronoField.DAY_OF_MONTH, 1).plus(1, ChronoUnit.MONTHS);\n case 3: return temporal.with(ChronoField.DAY_OF_YEAR, 1);\n case 4: return temporal.with(ChronoField.DAY_OF_YEAR, temporal.range(ChronoField.DAY_OF_YEAR).maximum());\n case 5: return temporal.with(ChronoField.DAY_OF_YEAR, 1).plus(1, ChronoUnit.YEARS);\n }\n throw new IllegalStateException('Unreachable');\n }\n\n}\n\n/** First day of month adjuster. */\nImpl.FIRST_DAY_OF_MONTH = new Impl(0);\n/** Last day of month adjuster. */\nImpl.LAST_DAY_OF_MONTH = new Impl(1);\n/** First day of next month adjuster. */\nImpl.FIRST_DAY_OF_NEXT_MONTH = new Impl(2);\n/** First day of year adjuster. */\nImpl.FIRST_DAY_OF_YEAR = new Impl(3);\n/** Last day of year adjuster. */\nImpl.LAST_DAY_OF_YEAR = new Impl(4);\n/** First day of next month adjuster. */\nImpl.FIRST_DAY_OF_NEXT_YEAR = new Impl(5);\n\n\n/**\n * Class implementing day-of-week in month adjuster.\n */\nclass DayOfWeekInMonth extends TemporalAdjuster {\n\n constructor(ordinal, dow) {\n super();\n this._ordinal = ordinal;\n this._dowValue = dow.value();\n }\n \n adjustInto(temporal) {\n if (this._ordinal >= 0) {\n let temp = temporal.with(ChronoField.DAY_OF_MONTH, 1);\n let curDow = temp.get(ChronoField.DAY_OF_WEEK);\n let dowDiff = MathUtil.intMod((this._dowValue - curDow + 7), 7);\n dowDiff += (this._ordinal - 1) * 7; // safe from overflow\n return temp.plus(dowDiff, ChronoUnit.DAYS);\n } else {\n let temp = temporal.with(ChronoField.DAY_OF_MONTH, temporal.range(ChronoField.DAY_OF_MONTH).maximum());\n let curDow = temp.get(ChronoField.DAY_OF_WEEK);\n let daysDiff = this._dowValue - curDow;\n daysDiff = (daysDiff === 0 ? 0 : (daysDiff > 0 ? daysDiff - 7 : daysDiff));\n daysDiff -= (-this._ordinal - 1) * 7; // safe from overflow\n return temp.plus(daysDiff, ChronoUnit.DAYS);\n }\n }\n}\n\n/**\n * Implementation of next, previous or current day-of-week.\n */\nclass RelativeDayOfWeek extends TemporalAdjuster {\n\n constructor(relative, dayOfWeek) {\n super();\n requireNonNull(dayOfWeek, 'dayOfWeek');\n /** Whether the current date is a valid answer. */\n this._relative = relative;\n /** The day-of-week value, from 1 to 7. */\n this._dowValue = dayOfWeek.value();\n }\n\n adjustInto(temporal) {\n var calDow = temporal.get(ChronoField.DAY_OF_WEEK);\n if (this._relative < 2 && calDow === this._dowValue) {\n return temporal;\n }\n if ((this._relative & 1) === 0) {\n let daysDiff = calDow - this._dowValue;\n return temporal.plus(daysDiff >= 0 ? 7 - daysDiff : -daysDiff, ChronoUnit.DAYS);\n } else {\n let daysDiff = this._dowValue - calDow;\n return temporal.minus(daysDiff >= 0 ? 7 - daysDiff : -daysDiff, ChronoUnit.DAYS);\n }\n }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/temporal/TemporalAdjusters.js\n **/","/*\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos \n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport {abstractMethodFail} from '../assert';\n\n/**\n * Strategy for adjusting a temporal object.\n * \n * Adjusters are a key tool for modifying temporal objects.\n * They exist to externalize the process of adjustment, permitting different\n * approaches, as per the strategy design pattern.\n * Examples might be an adjuster that sets the date avoiding weekends, or one that\n * sets the date to the last day of the month.\n * \n * There are two equivalent ways of using a {@code TemporalAdjuster}.\n * The first is to invoke the method on this interface directly.\n * The second is to use {@link Temporal#with(TemporalAdjuster)}:\n * \n * See {@link TemporalAdjusters} for a standard set of adjusters, including finding the\n * last day of the month.\n * Adjusters may also be defined by applications.\n *\n * \n * This adjusts the specified temporal object using the logic\n * encapsulated in the implementing class.\n * Examples might be an adjuster that sets the date avoiding weekends, or one that\n * sets the date to the last day of the month.\n * \n * There are two equivalent ways of using this method.\n * The first is to invoke this method directly.\n * The second is to use {@link Temporal#with(TemporalAdjuster)}:\n * \n * The input object must not be altered.\n * Instead, an adjusted copy of the original must be returned.\n * This provides equivalent, safe behavior for immutable and mutable temporal objects.\n * \n * The input temporal object may be in a calendar system other than ISO.\n * Implementations may choose to document compatibility with other calendar systems,\n * or reject non-ISO temporal objects by {@link TemporalQueries#chronology() querying the chronology}.\n * \n * This method may be called from multiple threads in parallel.\n * It must be thread-safe when invoked.\n *\n * @param {Temporal} temporal the temporal object to adjust, not null\n * @return {Temporal} an object of the same observable type with the adjustment made, not null\n * @throws DateTimeException if unable to make the adjustment\n * @throws ArithmeticException if numeric overflow occurs\n *\n * @abstract\n */\n adjustInto(temporal){\n abstractMethodFail('adjustInto');\n }\n\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/temporal/TemporalAdjuster.js\n **/","/*\n * @copyright (c) 2016, Philipp Thuerwaechter & Pattrick Hueper\n * @license BSD-3-Clause (see LICENSE in the root directory of this source tree)\n */\n\nimport {_init as DayOfWeekInit} from './DayOfWeek';\nimport {_init as DurationInit} from './Duration';\nimport {_init as InstantInit} from './Instant';\nimport {_init as LocalDateInit} from './LocalDate';\nimport {_init as LocalTimeInit} from './LocalTime';\nimport {_init as LocalDateTimeInit} from './LocalDateTime';\nimport {_init as MonthInit} from './Month';\nimport {_init as PeriodInit} from './Period';\nimport {_init as YearInit} from './Year';\nimport {_init as ZoneOffsetInit} from './ZoneOffset';\nimport {_init as IsoChronologyInit} from './chrono/IsoChronology';\nimport {_init as DateTimeFormatterInit} from './format/DateTimeFormatter';\nimport {_init as ChronoFieldInit} from './temporal/ChronoField';\nimport {_init as ChronoUnitInit} from './temporal/ChronoUnit';\nimport {_init as TemporalQueriesInit} from './temporal/TemporalQueries';\n\nvar isInit = false;\n\nfunction init() {\n\n if (isInit) {\n return;\n }\n\n isInit = true;\n\n YearInit();\n DurationInit();\n LocalTimeInit();\n ChronoUnitInit();\n ChronoFieldInit();\n TemporalQueriesInit();\n DayOfWeekInit();\n InstantInit();\n LocalDateInit();\n LocalDateTimeInit();\n MonthInit();\n PeriodInit();\n ZoneOffsetInit();\n IsoChronologyInit();\n DateTimeFormatterInit();\n}\n\ninit();\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/_init.js\n **/"],"sourceRoot":""}Architectural issues to consider
\n * These are some of the points that must be considered before using this interface\n * throughout an application.\n * False assumptions causing bugs in multi-calendar system code
\n * As indicated above, there are many issues to consider when try to use and manipulate a\n * date in an arbitrary calendar system. These are some of the key issues.\n * Using LocalDate instead
\n * The primary alternative to using this interface throughout your application is as follows.\n * \n *
\n *
Specification for implementors
\n * This interface must be implemented with care to ensure other classes operate correctly.\n * All implementations that can be instantiated must be final, immutable and thread-safe.\n * Subclasses should be Serializable wherever possible.\n * Static properties of Class {@link DateTimeFormatter}
\n *\n * DateTimeFormatter.ISO_LOCAL_DATE\n *\n * DateTimeFormatter.ISO_LOCAL_TIME\n *\n * DateTimeFormatter.ISO_LOCAL_DATE_TIME\n *\n */\nexport class DateTimeFormatter {\n\n //-----------------------------------------------------------------------\n /**\n * A query that provides access to the excess days that were parsed.\n * \n *
\n * \n * Text to parse Parsed object Excess days\n * \"2012-12-03T00:00\" LocalDateTime.of(2012, 12, 3, 0, 0) ZERO\n * \"2012-12-03T24:00\" LocalDateTime.of(2012, 12, 4, 0, 0) ZERO\n * \"00:00\" LocalTime.of(0, 0) ZERO\n * \"24:00\" LocalTime.of(0, 0) Period.ofDays(1)\n *
\n * The query can be used as follows:\n * \n * TemporalAccessor parsed = formatter.parse(str);\n * LocalTime time = parsed.query(LocalTime.FROM);\n * Period extraDays = parsed.query(DateTimeFormatter.parsedExcessDays());\n *
\n * @return {TemporalQuery} a query that provides access to the excess days that were parsed\n */\n static parsedExcessDays() {\n return DateTimeFormatter.PARSED_EXCESS_DAYS;\n }\n\n /**\n * A query that provides access to whether a leap-second was parsed.\n * \n * TemporalAccessor parsed = formatter.parse(str);\n * Instant instant = parsed.query(Instant::from);\n * if (parsed.query(DateTimeFormatter.parsedLeapSecond())) {\n * // validate leap-second is correct and apply correct smoothing\n * }\n *
\n * @return a query that provides access to whether a leap-second was parsed\n */\n static parsedLeapSecond() {\n return DateTimeFormatter.PARSED_LEAP_SECOND;\n }\n\n //-----------------------------------------------------------------------\n /**\n * Constructor.\n *\n * @param printerParser the printer/parser to use, not null\n * @param locale the locale to use, not null\n * @param decimalStyle the decimal style to use, not null\n * @param resolverStyle the resolver style to use, not null\n * @param resolverFields the fields to use during resolving, null for all fields\n * @param chrono the chronology to use, null for no override\n * @param zone the zone to use, null for no override\n */\n constructor(printerParser, locale, decimalStyle, resolverStyle, resolverFields, chrono=IsoChronology.INSTANCE, zone) {\n assert(printerParser != null);\n assert(decimalStyle != null);\n assert(resolverStyle != null);\n /**\n * The printer and/or parser to use, not null.\n */\n this._printerParser = printerParser;\n /**\n * The locale to use for formatting. // nyi\n */\n this._locale = locale;\n /**\n * The symbols to use for formatting, not null.\n */\n this._decimalStyle = decimalStyle;\n /**\n * The resolver style to use, not null.\n */\n this._resolverStyle = resolverStyle;\n /**\n * The fields to use in resolving, null for all fields.\n */\n this._resolverFields = resolverFields;\n /**\n * The chronology to use for formatting, null for no override.\n */\n this._chrono = chrono;\n /**\n * The zone to use for formatting, null for no override. // nyi\n */\n this._zone = zone;\n }\n\n locale() {\n return this._locale;\n }\n\n decimalStyle() {\n return this._decimalStyle;\n }\n\n chronology() {\n return this._chrono;\n }\n\n /**\n * Returns a copy of this formatter with a new override chronology.\n *\n * This returns a formatter with similar state to this formatter but\n * with the override chronology set.\n * By default, a formatter has no override chronology, returning null.\n *\n * If an override is added, then any date that is printed or parsed will be affected.\n *\n * When printing, if the {@code Temporal} object contains a date then it will\n * be converted to a date in the override chronology.\n * Any time or zone will be retained unless overridden.\n * The converted result will behave in a manner equivalent to an implementation\n * of {@code ChronoLocalDate},{@code ChronoLocalDateTime} or {@code ChronoZonedDateTime}.\n *\n * When parsing, the override chronology will be used to interpret the\n * {@linkplain ChronoField fields} into a date unless the\n * formatter directly parses a valid chronology.\n *\n * This instance is immutable and unaffected by this method call.\n *\n * @param chrono the new chronology, not null\n * @return a formatter based on this formatter with the requested override chronology, not null\n */\n withChronology(chrono) {\n if (this._chrono != null && this._chrono.equals(chrono)) {\n return this;\n }\n return new DateTimeFormatter(this._printerParser, this._locale, this._decimalStyle,\n this._resolverStyle, this._resolverFields, chrono, this._zone);\n }\n\n /**\n * not yet supported\n * @returns {DateTimeFormatter}\n */\n withLocal(){\n return this;\n }\n\n //-----------------------------------------------------------------------\n /**\n * Formats a date-time object using this formatter.\n * Static properties of Class {@link Period}
\n *\n * Period.ZERO\n *\n * A constant for a period of zero.\n *\n */\nexport class Period extends TemporalAmount /* extends ChronoPeriod */ {\n\n /**\n * do not call the constructor directly\n * use a factory method instead\n *\n * @param {number} years\n * @param {number} months\n * @param {number} days\n * @private\n */\n constructor(years, months, days){\n super();\n if((years | months | days) === 0){\n return Period.ZERO;\n }\n Period._validate(years, months, days);\n /**\n * The number of years.\n */\n this._years = years;\n /**\n * The number of months.\n */\n this._months = months;\n /**\n * The number of days.\n */\n this._days = days;\n }\n\n static _validate(years, month, days){\n requireNonNull(years, 'years');\n requireNonNull(month, 'month');\n requireNonNull(days, 'days');\n MathUtil.safeToInt(years);\n MathUtil.safeToInt(month);\n MathUtil.safeToInt(days);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Obtains a {@link Period} representing a number of years.\n * \n * 'P2Y' -- Period.ofYears(2)\n * 'P3M' -- Period.ofMonths(3)\n * 'P4W' -- Period.ofWeeks(4)\n * 'P5D' -- Period.ofDays(5)\n * 'P1Y2M3D' -- Period.of(1, 2, 3)\n * 'P1Y2M3W4D' -- Period.of(1, 2, 25)\n * 'P-1Y2M' -- Period.of(-1, 2, 0)\n * '-P1Y2M' -- Period.of(-1, -2, 0)\n *
\n *\n * @param {string} text - the text to parse, not null\n * @return {Period} the parsed period, not null\n * @throws DateTimeParseException if the text cannot be parsed to a period\n */\n static parse(text) {\n requireNonNull(text, 'text');\n try {\n return Period._parse(text);\n } catch (ex){\n if(ex instanceof ArithmeticException){\n throw new DateTimeParseException('Text cannot be parsed to a Period', text, 0, ex);\n } else {\n throw ex;\n }\n }\n }\n\n /**\n * because functions that containing a try/ catch block cant be optimized,\n * we put the code in a sub function.\n */\n static _parse(text){\n var matches = PATTERN.exec(text);\n if (matches != null) {\n var negate = '-' === matches[1] ? -1 : 1;\n var yearMatch = matches[2];\n var monthMatch = matches[3];\n var weekMatch = matches[4];\n var dayMatch = matches[5];\n if (yearMatch != null || monthMatch != null || weekMatch != null || dayMatch != null) {\n var years = Period._parseNumber(text, yearMatch, negate);\n var months = Period._parseNumber(text, monthMatch, negate);\n var weeks = Period._parseNumber(text, weekMatch, negate);\n var days = Period._parseNumber(text, dayMatch, negate);\n days = MathUtil.safeAdd(days, MathUtil.safeMultiply(weeks, 7));\n return Period.create(years, months, days);\n }\n }\n throw new DateTimeParseException('Text cannot be parsed to a Period', text, 0);\n }\n\n static _parseNumber(text, str, negate) {\n if (str == null) {\n return 0;\n }\n var val = MathUtil.parseInt(str);\n return MathUtil.safeMultiply(val, negate);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Creates an instance.\n *\n * @param {number} years - the amount\n * @param {number} months - the amount\n * @param {number} days - the amount\n * @return {Duration}\n */\n static create(years, months, days) {\n return new Period(years, months, days);\n }\n\n //-----------------------------------------------------------------------\n /**\n * Gets the list of units, from largest to smallest, that fully define this amount.\n *\n * @returns {ChronoUnit[]} list of units\n */\n units() {\n return [ChronoUnit.YEARS, ChronoUnit.MONTHS, ChronoUnit.DAYS];\n }\n\n /**\n * Gets the chronology that defines the meaning of the supported units.\n * \n * // these two lines are equivalent, but the second approach is recommended\n * dateTime = thisPeriod.addTo(dateTime);\n * dateTime = dateTime.plus(thisPeriod);\n *
\n * \n * // these two lines are equivalent, but the second approach is recommended\n * dateTime = thisPeriod.subtractFrom(dateTime);\n * dateTime = dateTime.minus(thisPeriod);\n *
\n * \n *
Static properties of Class {@link DayOfWeek}
\n *\n * DayOfWeek.MONDAY,\n * DayOfWeek.TUESDAY,\n * DayOfWeek.WEDNESDAY,\n * DayOfWeek.THURSDAY,\n * DayOfWeek.FRIDAY,\n * DayOfWeek.SATURDAY,\n * DayOfWeek.SUNDAY\n *\n */\nexport class DayOfWeek extends Temporal {\n\n /**\n *\n * @param {number} ordinal\n * @param {string} name\n * @private\n */\n constructor(ordinal, name){\n super();\n this._ordinal = ordinal;\n this._name = name;\n }\n\n /**\n *\n * @returns {number}\n */\n ordinal(){\n return this._ordinal;\n }\n\n /**\n *\n * @returns {string}\n */\n name(){\n return this._name;\n }\n\n /**\n *\n * @returns {DayOfWeek[]}\n */\n static values() {\n return ENUMS.slice();\n }\n\n /**\n *\n * @param {string} name\n * @returns {DayOfWeek}\n */\n static valueOf(name) {\n for(var ordinal=0; ordinal < ENUMS.length; ordinal++){\n if(ENUMS[ordinal].name() === name){\n break;\n }\n }\n return DayOfWeek.of(ordinal+1);\n }\n \n /**\n * Obtains an instance of {@code DayOfWeek} from an {@code int} value.\n * \n * // these two lines are equivalent, but the second approach is recommended\n * temporal = thisDayOfWeek.adjustInto(temporal);\n * temporal = temporal.with(thisDayOfWeek);\n *
\n * \n * dateOnWed.with(MONDAY); // two days earlier\n * dateOnWed.with(TUESDAY); // one day earlier\n * dateOnWed.with(WEDNESDAY); // same date\n * dateOnWed.with(THURSDAY); // one day later\n * dateOnWed.with(FRIDAY); // two days later\n * dateOnWed.with(SATURDAY); // three days later\n * dateOnWed.with(SUNDAY); // four days later\n *
\n * When to use this interface
\n * The design of the API encourages the use of {@code LocalDateTime} rather than this\n * interface, even in the case where the application needs to deal with multiple\n * calendar systems. The rationale for this is explored in detail in {@link ChronoLocalDate}.\n * Specification for implementors
\n * This interface must be implemented with care to ensure other classes operate correctly.\n * All implementations that can be instantiated must be final, immutable and thread-safe.\n * Subclasses should be Serializable wherever possible.\n * \n * // direct manipulation\n * date.withDayOfMonth(1).plusMonths(1).minusDays(1);\n * // use of an adjuster from this class\n * date.with(lastDayOfMonth());\n *
\n * There are two equivalent ways of using a {@code TemporalAdjuster}.\n * The first is to invoke the method on the interface directly.\n * The second is to use {@link Temporal#with(TemporalAdjuster)}:\n * \n * // these two lines are equivalent, but the second approach is recommended\n * dateTime = adjuster.adjustInto(dateTime);\n * dateTime = dateTime.with(adjuster);\n *
\n * It is recommended to use the second approach, {@code with(TemporalAdjuster)},\n * as it is a lot clearer to read in code.\n *\n * Specification for implementors
\n * This is a thread-safe utility class.\n * All returned adjusters are immutable and thread-safe.\n *
\n * The input 2011-01-15 will return 2011-01-01.
\n * The input 2011-02-15 will return 2011-02-01.\n * \n * temporal.with(DAY_OF_MONTH, 1);\n *
\n *\n * @return {TemporalAdjuster} the first day-of-month adjuster, not null\n */\n static firstDayOfMonth() {\n return Impl.FIRST_DAY_OF_MONTH;\n }\n\n /**\n * Returns the 'last day of month' adjuster, which returns a new date set to\n * the last day of the current month.\n *
\n * The input 2011-01-15 will return 2011-01-31.
\n * The input 2011-02-15 will return 2011-02-28.
\n * The input 2012-02-15 will return 2012-02-29 (leap year).
\n * The input 2011-04-15 will return 2011-04-30.\n * \n * long lastDay = temporal.range(DAY_OF_MONTH).getMaximum();\n * temporal.with(DAY_OF_MONTH, lastDay);\n *
\n *\n * @return {TemporalAdjuster} the last day-of-month adjuster, not null\n */\n static lastDayOfMonth() {\n return Impl.LAST_DAY_OF_MONTH;\n }\n\n /**\n * Returns the 'first day of next month' adjuster, which returns a new date set to\n * the first day of the next month.\n *
\n * The input 2011-01-15 will return 2011-02-01.
\n * The input 2011-02-15 will return 2011-03-01.\n * \n * temporal.with(DAY_OF_MONTH, 1).plus(1, MONTHS);\n *
\n *\n * @return {TemporalAdjuster} the first day of next month adjuster, not null\n */\n static firstDayOfNextMonth() {\n return Impl.FIRST_DAY_OF_NEXT_MONTH;\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns the 'first day of year' adjuster, which returns a new date set to\n * the first day of the current year.\n *
\n * The input 2011-01-15 will return 2011-01-01.
\n * The input 2011-02-15 will return 2011-01-01.
\n * \n * temporal.with(DAY_OF_YEAR, 1);\n *
\n *\n * @return {TemporalAdjuster} the first day-of-year adjuster, not null\n */\n static firstDayOfYear() {\n return Impl.FIRST_DAY_OF_YEAR;\n }\n\n /**\n * Returns the 'last day of year' adjuster, which returns a new date set to\n * the last day of the current year.\n *
\n * The input 2011-01-15 will return 2011-12-31.
\n * The input 2011-02-15 will return 2011-12-31.
\n * \n * long lastDay = temporal.range(DAY_OF_YEAR).getMaximum();\n * temporal.with(DAY_OF_YEAR, lastDay);\n *
\n *\n * @return {TemporalAdjuster} the last day-of-year adjuster, not null\n */\n static lastDayOfYear() {\n return Impl.LAST_DAY_OF_YEAR;\n }\n\n /**\n * Returns the 'first day of next year' adjuster, which returns a new date set to\n * the first day of the next year.\n *
\n * The input 2011-01-15 will return 2012-01-01.\n * \n * temporal.with(DAY_OF_YEAR, 1).plus(1, YEARS);\n *
\n *\n * @return {TemporalAdjuster} the first day of next month adjuster, not null\n */\n static firstDayOfNextYear() {\n return Impl.FIRST_DAY_OF_NEXT_YEAR;\n }\n\n //-----------------------------------------------------------------------\n /**\n * Returns the first in month adjuster, which returns a new date\n * in the same month with the first matching day-of-week.\n * This is used for expressions like 'first Tuesday in March'.\n *
\n * The input 2011-12-15 for (MONDAY) will return 2011-12-05.
\n * The input 2011-12-15 for (FRIDAY) will return 2011-12-02.
\n *
\n * The input 2011-12-15 for (MONDAY) will return 2011-12-26.
\n * The input 2011-12-15 for (FRIDAY) will return 2011-12-30.
\n *
\n * The input 2011-12-15 for (1,TUESDAY) will return 2011-12-06.
\n * The input 2011-12-15 for (2,TUESDAY) will return 2011-12-13.
\n * The input 2011-12-15 for (3,TUESDAY) will return 2011-12-20.
\n * The input 2011-12-15 for (4,TUESDAY) will return 2011-12-27.
\n * The input 2011-12-15 for (5,TUESDAY) will return 2012-01-03.
\n * The input 2011-12-15 for (-1,TUESDAY) will return 2011-12-27 (last in month).
\n * The input 2011-12-15 for (-4,TUESDAY) will return 2011-12-06 (3 weeks before last in month).
\n * The input 2011-12-15 for (-5,TUESDAY) will return 2011-11-29 (4 weeks before last in month).
\n * The input 2011-12-15 for (0,TUESDAY) will return 2011-11-29 (last in previous month).
\n *
\n * The input 2011-01-15 (a Saturday) for parameter (MONDAY) will return 2011-01-17 (two days later).
\n * The input 2011-01-15 (a Saturday) for parameter (WEDNESDAY) will return 2011-01-19 (four days later).
\n * The input 2011-01-15 (a Saturday) for parameter (SATURDAY) will return 2011-01-22 (seven days later).\n *
\n * The input 2011-01-15 (a Saturday) for parameter (MONDAY) will return 2011-01-17 (two days later).
\n * The input 2011-01-15 (a Saturday) for parameter (WEDNESDAY) will return 2011-01-19 (four days later).
\n * The input 2011-01-15 (a Saturday) for parameter (SATURDAY) will return 2011-01-15 (same as input).\n *
\n * The input 2011-01-15 (a Saturday) for parameter (MONDAY) will return 2011-01-10 (five days earlier).
\n * The input 2011-01-15 (a Saturday) for parameter (WEDNESDAY) will return 2011-01-12 (three days earlier).
\n * The input 2011-01-15 (a Saturday) for parameter (SATURDAY) will return 2011-01-08 (seven days earlier).\n *
\n * The input 2011-01-15 (a Saturday) for parameter (MONDAY) will return 2011-01-10 (five days earlier).
\n * The input 2011-01-15 (a Saturday) for parameter (WEDNESDAY) will return 2011-01-12 (three days earlier).
\n * The input 2011-01-15 (a Saturday) for parameter (SATURDAY) will return 2011-01-15 (same as input).\n * \n * // these two lines are equivalent, but the second approach is recommended\n * temporal = thisAdjuster.adjustInto(temporal);\n * temporal = temporal.with(thisAdjuster);\n *
\n * It is recommended to use the second approach, {@code with(TemporalAdjuster)},\n * as it is a lot clearer to read in code.\n * Specification for implementors
\n * This interface places no restrictions on the mutability of implementations,\n * however immutability is strongly recommended.\n *\n * @interface\n */\nexport class TemporalAdjuster {\n\n /**\n * Adjusts the specified temporal object.\n * \n * // these two lines are equivalent, but the second approach is recommended\n * temporal = thisAdjuster.adjustInto(temporal);\n * temporal = temporal.with(thisAdjuster);\n *
\n * It is recommended to use the second approach, {@code with(TemporalAdjuster)},\n * as it is a lot clearer to read in code.\n *\n * Specification for implementors
\n * The implementation must take the input object and adjust it.\n * The implementation defines the logic of the adjustment and is responsible for\n * documenting that logic. It may use any method on {@code Temporal} to\n * query the temporal object and perform the adjustment.\n * The returned object must have the same observable type as the input object\n *