????
Current Path : C:/inetpub/vhost/binhdinhinvest.gdtvietnam.com/api/node_modules/@js-joda/core/src/ |
Current File : C:/inetpub/vhost/binhdinhinvest.gdtvietnam.com/api/node_modules/@js-joda/core/src/convert.js |
/* * @copyright (c) 2016, Philipp Thürwächter & Pattrick Hüper * @license BSD-3-Clause (see LICENSE in the root directory of this source tree) */ import { IllegalArgumentException } from './errors'; import { LocalDate } from './LocalDate'; import { LocalDateTime } from './LocalDateTime'; import { ZonedDateTime } from './ZonedDateTime'; import { ZoneId } from './ZoneId'; import { Instant } from './Instant'; class ToNativeJsConverter { /** * @param {!(LocalDate|LocalDateTime|ZonedDateTime|Instant)} temporal - a joda temporal instance * @param {ZoneId} [zone] - the zone of the temporal, * the default value for LocalDate and LocalDateTime is ZoneId.systemDefault(). */ constructor(temporal, zone){ let zonedDateTime; if(temporal instanceof Instant) { this.instant = temporal; return; } else if(temporal instanceof LocalDate) { zone = zone == null ? ZoneId.systemDefault() : zone; zonedDateTime = temporal.atStartOfDay(zone); } else if (temporal instanceof LocalDateTime) { zone = zone == null ? ZoneId.systemDefault() : zone; zonedDateTime = temporal.atZone(zone); } else if (temporal instanceof ZonedDateTime) { if (zone == null) { zonedDateTime = temporal; } else { zonedDateTime = temporal.withZoneSameInstant(zone); } } else { throw new IllegalArgumentException(`unsupported instance for convert operation:${temporal}`); } this.instant = zonedDateTime.toInstant(); } /** * * @returns {Date} */ toDate() { return new Date(this.instant.toEpochMilli()); } /** * * @returns {number} */ toEpochMilli() { return this.instant.toEpochMilli(); } } /** * converts a LocalDate, LocalDateTime or ZonedDateTime to a native Javascript Date. * * In a first step the temporal is converted to an Instant by adding implicit values. * * A LocalDate is implicit set to a LocalDateTime at start of day. * A LocalDateTime is implicit set to a ZonedDateTime with * the passed zone or if null, with the system default time zone. * A ZonedDateTime is converted to an Instant, if a zone is specified the zonedDateTime is adjusted to this * zone, keeping the same Instant. * * In a second step the instant is converted to a native Javascript Date * * default zone for LocalDate and LocalDateTime is ZoneId.systemDefault(). * * @example * convert(localDate).toDate() // returns a javascript Date * convert(localDate).toEpochMilli() // returns the epochMillis * * @param {!(LocalDate|LocalDateTime|ZonedDateTime)} temporal - a joda temporal instance * @param {ZoneId} [zone] - the zone of the temporal * @returns {ToNativeJsConverter} */ export function convert(temporal, zone){ return new ToNativeJsConverter(temporal, zone); }