From 9754701aaace1165e6bd27e7f1791bfc92c4edc7 Mon Sep 17 00:00:00 2001 From: JackDandy Date: Tue, 22 Sep 2020 12:36:30 +0100 Subject: [PATCH] =?UTF-8?q?Update=20Js2Py=200.70=20(f297498)=20=E2=86=92?= =?UTF-8?q?=200.70=20(92250a4).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 1 + lib/js2py/constructors/jsdate.py | 168 +++++++++++++++++++++++++++-- lib/js2py/internals/constructors/jsdate.py | 168 +++++++++++++++++++++++++++-- 3 files changed, 321 insertions(+), 16 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index ca99532..dd92a53 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,7 @@ ### 0.23.0 (2019-xx-xx xx:xx:xx UTC) * Update attr 20.1.0.dev0 (4bd6827) to 20.2.0 (4f74fba) +* Update Js2Py 0.70 (f297498) to 0.70 (92250a4) * Update profilehooks module 1.11.2 (d72cc2b) to 1.12.0 (3ee1f60) diff --git a/lib/js2py/constructors/jsdate.py b/lib/js2py/constructors/jsdate.py index 98de643..5aed830 100644 --- a/lib/js2py/constructors/jsdate.py +++ b/lib/js2py/constructors/jsdate.py @@ -32,8 +32,7 @@ def UTC(year, month, date, hours, minutes, seconds, ms): # todo complete this mili = args[6].to_number() if l > 6 else Js(0) if not y.is_nan() and 0 <= y.value <= 99: y = y + Js(1900) - t = TimeClip(MakeDate(MakeDay(y, m, dt), MakeTime(h, mi, sec, mili))) - return PyJsDate(t, prototype=DatePrototype) + return TimeClip(MakeDate(MakeDay(y, m, dt), MakeTime(h, mi, sec, mili))) @Js @@ -76,11 +75,12 @@ class PyJsDate(PyJs): # todo fix this problematic datetime part def to_local_dt(self): - return datetime.datetime.utcfromtimestamp( - UTCToLocal(self.value) // 1000) + return datetime.datetime(1970, 1, 1) + datetime.timedelta( + seconds=UTCToLocal(self.value) // 1000) def to_utc_dt(self): - return datetime.datetime.utcfromtimestamp(self.value // 1000) + return datetime.datetime(1970, 1, 1) + datetime.timedelta( + seconds=self.value // 1000) def local_strftime(self, pattern): if self.value is NaN: @@ -332,7 +332,7 @@ class DateProto: check_date(this) t = UTCToLocal(this.value) tim = MakeTime( - HourFromTime(t), MinFromTime(t), SecFromTime(t), ms.to_int()) + Js(HourFromTime(t)), Js(MinFromTime(t)), Js(SecFromTime(t)), ms) u = TimeClip(LocalToUTC(MakeDate(Day(t), tim))) this.value = u return u @@ -341,12 +341,164 @@ class DateProto: check_date(this) t = this.value tim = MakeTime( - HourFromTime(t), MinFromTime(t), SecFromTime(t), ms.to_int()) + Js(HourFromTime(t)), Js(MinFromTime(t)), Js(SecFromTime(t)), ms) u = TimeClip(MakeDate(Day(t), tim)) this.value = u return u - # todo Complete all setters! + def setSeconds(sec, ms=None): + check_date(this) + t = UTCToLocal(this.value) + s = sec.to_number() + if not ms is None: milli = Js(msFromTime(t)) + else: milli = ms.to_number() + date = MakeDate( + Day(t), MakeTime(Js(HourFromTime(t)), Js(MinFromTime(t)), s, milli)) + u = TimeClip(LocalToUTC(date)) + this.value = u + return u + + def setUTCSeconds(sec, ms=None): + check_date(this) + t = this.value + s = sec.to_number() + if not ms is None: milli = Js(msFromTime(t)) + else: milli = ms.to_number() + date = MakeDate( + Day(t), MakeTime(Js(HourFromTime(t)), Js(MinFromTime(t)), s, milli)) + v = TimeClip(date) + this.value = v + return v + + def setMinutes(min, sec=None, ms=None): + check_date(this) + t = UTCToLocal(this.value) + m = min.to_number() + if not sec is None: s = Js(SecFromTime(t)) + else: s = sec.to_number() + if not ms is None: milli = Js(msFromTime(t)) + else: milli = ms.to_number() + date = MakeDate(Day(t), MakeTime(Js(HourFromTime(t)), m, s, milli)) + u = TimeClip(LocalToUTC(date)) + this.value = u + return u + + def setUTCMinutes(min, sec=None, ms=None): + check_date(this) + t = this.value + m = min.to_number() + if not sec is None: s = Js(SecFromTime(t)) + else: s = sec.to_number() + if not ms is None: milli = Js(msFromTime(t)) + else: milli = ms.to_number() + date = MakeDate(Day(t), MakeTime(Js(HourFromTime(t)), m, s, milli)) + v = TimeClip(date) + this.value = v + return v + + def setHours(hour, min=None, sec=None, ms=None): + check_date(this) + t = UTCToLocal(this.value) + h = hour.to_number() + if not min is None: m = Js(MinFromTime(t)) + else: m = min.to_number() + if not sec is None: s = Js(SecFromTime(t)) + else: s = sec.to_number() + if not ms is None: milli = Js(msFromTime(t)) + else: milli = ms.to_number() + date = MakeDate(Day(t), MakeTime(h, m, s, milli)) + u = TimeClip(LocalToUTC(date)) + this.value = u + return u + + def setUTCHours(hour, min=None, sec=None, ms=None): + check_date(this) + t = this.value + h = hour.to_number() + if not min is None: m = Js(MinFromTime(t)) + else: m = min.to_number() + if not sec is None: s = Js(SecFromTime(t)) + else: s = sec.to_number() + if not ms is None: milli = Js(msFromTime(t)) + else: milli = ms.to_number() + date = MakeDate(Day(t), MakeTime(h, m, s, milli)) + v = TimeClip(date) + this.value = v + return v + + def setDate(date): + check_date(this) + t = UTCToLocal(this.value) + dt = date.to_number() + newDate = MakeDate( + MakeDay(Js(YearFromTime(t)), Js(MonthFromTime(t)), dt), TimeWithinDay(t)) + u = TimeClip(LocalToUTC(newDate)) + this.value = u + return u + + def setUTCDate(date): + check_date(this) + t = this.value + dt = date.to_number() + newDate = MakeDate( + MakeDay(Js(YearFromTime(t)), Js(MonthFromTime(t)), dt), TimeWithinDay(t)) + v = TimeClip(newDate) + this.value = v + return v + + def setMonth(month, date=None): + check_date(this) + t = UTCToLocal(this.value) + m = month.to_number() + if not date is None: dt = Js(DateFromTime(t)) + else: dt = date.to_number() + newDate = MakeDate( + MakeDay(Js(YearFromTime(t)), m, dt), TimeWithinDay(t)) + u = TimeClip(LocalToUTC(newDate)) + this.value = u + return u + + def setUTCMonth(month, date=None): + check_date(this) + t = this.value + m = month.to_number() + if not date is None: dt = Js(DateFromTime(t)) + else: dt = date.to_number() + newDate = MakeDate( + MakeDay(Js(YearFromTime(t)), m, dt), TimeWithinDay(t)) + v = TimeClip(newDate) + this.value = v + return v + + def setFullYear(year, month=None, date=None): + check_date(this) + if not this.value is NaN: t = UTCToLocal(this.value) + else: t = 0 + y = year.to_number() + if not month is None: m = Js(MonthFromTime(t)) + else: m = month.to_number() + if not date is None: dt = Js(DateFromTime(t)) + else: dt = date.to_number() + newDate = MakeDate( + MakeDay(y, m, dt), TimeWithinDay(t)) + u = TimeClip(LocalToUTC(newDate)) + this.value = u + return u + + def setUTCFullYear(year, month=None, date=None): + check_date(this) + if not this.value is NaN: t = UTCToLocal(this.value) + else: t = 0 + y = year.to_number() + if not month is None: m = Js(MonthFromTime(t)) + else: m = month.to_number() + if not date is None: dt = Js(DateFromTime(t)) + else: dt = date.to_number() + newDate = MakeDate( + MakeDay(y, m, dt), TimeWithinDay(t)) + v = TimeClip(newDate) + this.value = v + return v def toUTCString(): check_date(this) diff --git a/lib/js2py/internals/constructors/jsdate.py b/lib/js2py/internals/constructors/jsdate.py index 98de643..5aed830 100644 --- a/lib/js2py/internals/constructors/jsdate.py +++ b/lib/js2py/internals/constructors/jsdate.py @@ -32,8 +32,7 @@ def UTC(year, month, date, hours, minutes, seconds, ms): # todo complete this mili = args[6].to_number() if l > 6 else Js(0) if not y.is_nan() and 0 <= y.value <= 99: y = y + Js(1900) - t = TimeClip(MakeDate(MakeDay(y, m, dt), MakeTime(h, mi, sec, mili))) - return PyJsDate(t, prototype=DatePrototype) + return TimeClip(MakeDate(MakeDay(y, m, dt), MakeTime(h, mi, sec, mili))) @Js @@ -76,11 +75,12 @@ class PyJsDate(PyJs): # todo fix this problematic datetime part def to_local_dt(self): - return datetime.datetime.utcfromtimestamp( - UTCToLocal(self.value) // 1000) + return datetime.datetime(1970, 1, 1) + datetime.timedelta( + seconds=UTCToLocal(self.value) // 1000) def to_utc_dt(self): - return datetime.datetime.utcfromtimestamp(self.value // 1000) + return datetime.datetime(1970, 1, 1) + datetime.timedelta( + seconds=self.value // 1000) def local_strftime(self, pattern): if self.value is NaN: @@ -332,7 +332,7 @@ class DateProto: check_date(this) t = UTCToLocal(this.value) tim = MakeTime( - HourFromTime(t), MinFromTime(t), SecFromTime(t), ms.to_int()) + Js(HourFromTime(t)), Js(MinFromTime(t)), Js(SecFromTime(t)), ms) u = TimeClip(LocalToUTC(MakeDate(Day(t), tim))) this.value = u return u @@ -341,12 +341,164 @@ class DateProto: check_date(this) t = this.value tim = MakeTime( - HourFromTime(t), MinFromTime(t), SecFromTime(t), ms.to_int()) + Js(HourFromTime(t)), Js(MinFromTime(t)), Js(SecFromTime(t)), ms) u = TimeClip(MakeDate(Day(t), tim)) this.value = u return u - # todo Complete all setters! + def setSeconds(sec, ms=None): + check_date(this) + t = UTCToLocal(this.value) + s = sec.to_number() + if not ms is None: milli = Js(msFromTime(t)) + else: milli = ms.to_number() + date = MakeDate( + Day(t), MakeTime(Js(HourFromTime(t)), Js(MinFromTime(t)), s, milli)) + u = TimeClip(LocalToUTC(date)) + this.value = u + return u + + def setUTCSeconds(sec, ms=None): + check_date(this) + t = this.value + s = sec.to_number() + if not ms is None: milli = Js(msFromTime(t)) + else: milli = ms.to_number() + date = MakeDate( + Day(t), MakeTime(Js(HourFromTime(t)), Js(MinFromTime(t)), s, milli)) + v = TimeClip(date) + this.value = v + return v + + def setMinutes(min, sec=None, ms=None): + check_date(this) + t = UTCToLocal(this.value) + m = min.to_number() + if not sec is None: s = Js(SecFromTime(t)) + else: s = sec.to_number() + if not ms is None: milli = Js(msFromTime(t)) + else: milli = ms.to_number() + date = MakeDate(Day(t), MakeTime(Js(HourFromTime(t)), m, s, milli)) + u = TimeClip(LocalToUTC(date)) + this.value = u + return u + + def setUTCMinutes(min, sec=None, ms=None): + check_date(this) + t = this.value + m = min.to_number() + if not sec is None: s = Js(SecFromTime(t)) + else: s = sec.to_number() + if not ms is None: milli = Js(msFromTime(t)) + else: milli = ms.to_number() + date = MakeDate(Day(t), MakeTime(Js(HourFromTime(t)), m, s, milli)) + v = TimeClip(date) + this.value = v + return v + + def setHours(hour, min=None, sec=None, ms=None): + check_date(this) + t = UTCToLocal(this.value) + h = hour.to_number() + if not min is None: m = Js(MinFromTime(t)) + else: m = min.to_number() + if not sec is None: s = Js(SecFromTime(t)) + else: s = sec.to_number() + if not ms is None: milli = Js(msFromTime(t)) + else: milli = ms.to_number() + date = MakeDate(Day(t), MakeTime(h, m, s, milli)) + u = TimeClip(LocalToUTC(date)) + this.value = u + return u + + def setUTCHours(hour, min=None, sec=None, ms=None): + check_date(this) + t = this.value + h = hour.to_number() + if not min is None: m = Js(MinFromTime(t)) + else: m = min.to_number() + if not sec is None: s = Js(SecFromTime(t)) + else: s = sec.to_number() + if not ms is None: milli = Js(msFromTime(t)) + else: milli = ms.to_number() + date = MakeDate(Day(t), MakeTime(h, m, s, milli)) + v = TimeClip(date) + this.value = v + return v + + def setDate(date): + check_date(this) + t = UTCToLocal(this.value) + dt = date.to_number() + newDate = MakeDate( + MakeDay(Js(YearFromTime(t)), Js(MonthFromTime(t)), dt), TimeWithinDay(t)) + u = TimeClip(LocalToUTC(newDate)) + this.value = u + return u + + def setUTCDate(date): + check_date(this) + t = this.value + dt = date.to_number() + newDate = MakeDate( + MakeDay(Js(YearFromTime(t)), Js(MonthFromTime(t)), dt), TimeWithinDay(t)) + v = TimeClip(newDate) + this.value = v + return v + + def setMonth(month, date=None): + check_date(this) + t = UTCToLocal(this.value) + m = month.to_number() + if not date is None: dt = Js(DateFromTime(t)) + else: dt = date.to_number() + newDate = MakeDate( + MakeDay(Js(YearFromTime(t)), m, dt), TimeWithinDay(t)) + u = TimeClip(LocalToUTC(newDate)) + this.value = u + return u + + def setUTCMonth(month, date=None): + check_date(this) + t = this.value + m = month.to_number() + if not date is None: dt = Js(DateFromTime(t)) + else: dt = date.to_number() + newDate = MakeDate( + MakeDay(Js(YearFromTime(t)), m, dt), TimeWithinDay(t)) + v = TimeClip(newDate) + this.value = v + return v + + def setFullYear(year, month=None, date=None): + check_date(this) + if not this.value is NaN: t = UTCToLocal(this.value) + else: t = 0 + y = year.to_number() + if not month is None: m = Js(MonthFromTime(t)) + else: m = month.to_number() + if not date is None: dt = Js(DateFromTime(t)) + else: dt = date.to_number() + newDate = MakeDate( + MakeDay(y, m, dt), TimeWithinDay(t)) + u = TimeClip(LocalToUTC(newDate)) + this.value = u + return u + + def setUTCFullYear(year, month=None, date=None): + check_date(this) + if not this.value is NaN: t = UTCToLocal(this.value) + else: t = 0 + y = year.to_number() + if not month is None: m = Js(MonthFromTime(t)) + else: m = month.to_number() + if not date is None: dt = Js(DateFromTime(t)) + else: dt = date.to_number() + newDate = MakeDate( + MakeDay(y, m, dt), TimeWithinDay(t)) + v = TimeClip(newDate) + this.value = v + return v def toUTCString(): check_date(this)