347
347
function MakeDay(year, month, date) {
348
348
if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) return $NaN;
350
year = TO_INTEGER(year);
351
month = TO_INTEGER(month);
352
date = TO_INTEGER(date);
350
// Convert to integer and map -0 to 0.
351
year = TO_INTEGER_MAP_MINUS_ZERO(year);
352
month = TO_INTEGER_MAP_MINUS_ZERO(month);
353
date = TO_INTEGER_MAP_MINUS_ZERO(date);
354
355
if (year < kMinYear || year > kMaxYear ||
355
356
month < kMinMonth || month > kMaxMonth ||
456
function GetTimeFrom(aDate) {
457
return DATE_VALUE(aDate);
460
function GetMillisecondsFrom(aDate) {
461
var t = DATE_VALUE(aDate);
462
if (NUMBER_IS_NAN(t)) return t;
463
return MS_FROM_TIME(LocalTimeNoCheck(t));
467
function GetUTCMillisecondsFrom(aDate) {
468
var t = DATE_VALUE(aDate);
469
if (NUMBER_IS_NAN(t)) return t;
470
return MS_FROM_TIME(t);
474
function GetSecondsFrom(aDate) {
475
var t = DATE_VALUE(aDate);
476
if (NUMBER_IS_NAN(t)) return t;
477
return SEC_FROM_TIME(LocalTimeNoCheck(t));
481
function GetUTCSecondsFrom(aDate) {
482
var t = DATE_VALUE(aDate);
483
if (NUMBER_IS_NAN(t)) return t;
484
return SEC_FROM_TIME(t);
488
function GetMinutesFrom(aDate) {
489
var t = DATE_VALUE(aDate);
490
if (NUMBER_IS_NAN(t)) return t;
491
return MIN_FROM_TIME(LocalTimeNoCheck(t));
495
function GetUTCMinutesFrom(aDate) {
496
var t = DATE_VALUE(aDate);
497
if (NUMBER_IS_NAN(t)) return t;
498
return MIN_FROM_TIME(t);
502
function GetHoursFrom(aDate) {
503
var t = DATE_VALUE(aDate);
504
if (NUMBER_IS_NAN(t)) return t;
505
return HOUR_FROM_TIME(LocalTimeNoCheck(t));
509
function GetUTCHoursFrom(aDate) {
510
var t = DATE_VALUE(aDate);
511
if (NUMBER_IS_NAN(t)) return t;
512
return HOUR_FROM_TIME(t);
516
function GetFullYearFrom(aDate) {
517
var t = DATE_VALUE(aDate);
518
if (NUMBER_IS_NAN(t)) return t;
519
var cache = Date_cache;
520
if (cache.time === t) return cache.year;
521
return YEAR_FROM_TIME(LocalTimeNoCheck(t));
525
function GetUTCFullYearFrom(aDate) {
526
var t = DATE_VALUE(aDate);
527
if (NUMBER_IS_NAN(t)) return t;
528
return YEAR_FROM_TIME(t);
532
function GetMonthFrom(aDate) {
533
var t = DATE_VALUE(aDate);
534
if (NUMBER_IS_NAN(t)) return t;
535
return MONTH_FROM_TIME(LocalTimeNoCheck(t));
539
function GetUTCMonthFrom(aDate) {
540
var t = DATE_VALUE(aDate);
541
if (NUMBER_IS_NAN(t)) return t;
542
return MONTH_FROM_TIME(t);
546
function GetDateFrom(aDate) {
547
var t = DATE_VALUE(aDate);
548
if (NUMBER_IS_NAN(t)) return t;
549
return DATE_FROM_TIME(LocalTimeNoCheck(t));
553
function GetUTCDateFrom(aDate) {
554
var t = DATE_VALUE(aDate);
555
if (NUMBER_IS_NAN(t)) return t;
556
return DATE_FROM_TIME(t);
560
456
%FunctionSetPrototype($Date, new $Date($NaN));
737
633
// ECMA 262 - 15.9.5.10
738
634
function DateGetFullYear() {
739
return GetFullYearFrom(this)
635
var t = DATE_VALUE(this);
636
if (NUMBER_IS_NAN(t)) return t;
637
var cache = Date_cache;
638
if (cache.time === t) return cache.year;
639
return YEAR_FROM_TIME(LocalTimeNoCheck(t));
743
643
// ECMA 262 - 15.9.5.11
744
644
function DateGetUTCFullYear() {
745
return GetUTCFullYearFrom(this)
645
var t = DATE_VALUE(this);
646
if (NUMBER_IS_NAN(t)) return t;
647
return YEAR_FROM_TIME(t);
749
651
// ECMA 262 - 15.9.5.12
750
652
function DateGetMonth() {
751
return GetMonthFrom(this);
653
var t = DATE_VALUE(this);
654
if (NUMBER_IS_NAN(t)) return t;
655
return MONTH_FROM_TIME(LocalTimeNoCheck(t));
755
659
// ECMA 262 - 15.9.5.13
756
660
function DateGetUTCMonth() {
757
return GetUTCMonthFrom(this);
661
var t = DATE_VALUE(this);
662
if (NUMBER_IS_NAN(t)) return t;
663
return MONTH_FROM_TIME(t);
761
667
// ECMA 262 - 15.9.5.14
762
668
function DateGetDate() {
763
return GetDateFrom(this);
669
var t = DATE_VALUE(this);
670
if (NUMBER_IS_NAN(t)) return t;
671
return DATE_FROM_TIME(LocalTimeNoCheck(t));
767
675
// ECMA 262 - 15.9.5.15
768
676
function DateGetUTCDate() {
769
return GetUTCDateFrom(this);
677
var t = DATE_VALUE(this);
678
return NAN_OR_DATE_FROM_TIME(t);
789
698
// ECMA 262 - 15.9.5.18
790
699
function DateGetHours() {
791
return GetHoursFrom(this);
700
var t = DATE_VALUE(this);
701
if (NUMBER_IS_NAN(t)) return t;
702
return HOUR_FROM_TIME(LocalTimeNoCheck(t));
795
706
// ECMA 262 - 15.9.5.19
796
707
function DateGetUTCHours() {
797
return GetUTCHoursFrom(this);
708
var t = DATE_VALUE(this);
709
if (NUMBER_IS_NAN(t)) return t;
710
return HOUR_FROM_TIME(t);
801
714
// ECMA 262 - 15.9.5.20
802
715
function DateGetMinutes() {
803
return GetMinutesFrom(this);
716
var t = DATE_VALUE(this);
717
if (NUMBER_IS_NAN(t)) return t;
718
return MIN_FROM_TIME(LocalTimeNoCheck(t));
807
722
// ECMA 262 - 15.9.5.21
808
723
function DateGetUTCMinutes() {
809
return GetUTCMinutesFrom(this);
724
var t = DATE_VALUE(this);
725
return NAN_OR_MIN_FROM_TIME(t);
813
729
// ECMA 262 - 15.9.5.22
814
730
function DateGetSeconds() {
815
return GetSecondsFrom(this);
731
var t = DATE_VALUE(this);
732
if (NUMBER_IS_NAN(t)) return t;
733
return SEC_FROM_TIME(LocalTimeNoCheck(t));
819
737
// ECMA 262 - 15.9.5.23
820
738
function DateGetUTCSeconds() {
821
return GetUTCSecondsFrom(this);
739
var t = DATE_VALUE(this);
740
return NAN_OR_SEC_FROM_TIME(t);
825
744
// ECMA 262 - 15.9.5.24
826
745
function DateGetMilliseconds() {
827
return GetMillisecondsFrom(this);
746
var t = DATE_VALUE(this);
747
if (NUMBER_IS_NAN(t)) return t;
748
return MS_FROM_TIME(LocalTimeNoCheck(t));
831
752
// ECMA 262 - 15.9.5.25
832
753
function DateGetUTCMilliseconds() {
833
return GetUTCMillisecondsFrom(this);
754
var t = DATE_VALUE(this);
755
return NAN_OR_MS_FROM_TIME(t);
871
793
function DateSetSeconds(sec, ms) {
872
794
var t = LocalTime(DATE_VALUE(this));
873
795
sec = ToNumber(sec);
874
ms = %_ArgumentsLength() < 2 ? GetMillisecondsFrom(this) : ToNumber(ms);
796
ms = %_ArgumentsLength() < 2 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms);
875
797
var time = MakeTime(HOUR_FROM_TIME(t), MIN_FROM_TIME(t), sec, ms);
876
798
return %_SetValueOf(this, TimeClip(UTC(MakeDate(DAY(t), time))));
881
803
function DateSetUTCSeconds(sec, ms) {
882
804
var t = DATE_VALUE(this);
883
805
sec = ToNumber(sec);
884
ms = %_ArgumentsLength() < 2 ? GetUTCMillisecondsFrom(this) : ToNumber(ms);
806
ms = %_ArgumentsLength() < 2 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms);
885
807
var time = MakeTime(HOUR_FROM_TIME(t), MIN_FROM_TIME(t), sec, ms);
886
808
return %_SetValueOf(this, TimeClip(MakeDate(DAY(t), time)));
892
814
var t = LocalTime(DATE_VALUE(this));
893
815
min = ToNumber(min);
894
816
var argc = %_ArgumentsLength();
895
sec = argc < 2 ? GetSecondsFrom(this) : ToNumber(sec);
896
ms = argc < 3 ? GetMillisecondsFrom(this) : ToNumber(ms);
817
sec = argc < 2 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec);
818
ms = argc < 3 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms);
897
819
var time = MakeTime(HOUR_FROM_TIME(t), min, sec, ms);
898
820
return %_SetValueOf(this, TimeClip(UTC(MakeDate(DAY(t), time))));
904
826
var t = DATE_VALUE(this);
905
827
min = ToNumber(min);
906
828
var argc = %_ArgumentsLength();
907
sec = argc < 2 ? GetUTCSecondsFrom(this) : ToNumber(sec);
908
ms = argc < 3 ? GetUTCMillisecondsFrom(this) : ToNumber(ms);
829
sec = argc < 2 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec);
830
ms = argc < 3 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms);
909
831
var time = MakeTime(HOUR_FROM_TIME(t), min, sec, ms);
910
832
return %_SetValueOf(this, TimeClip(MakeDate(DAY(t), time)));
916
838
var t = LocalTime(DATE_VALUE(this));
917
839
hour = ToNumber(hour);
918
840
var argc = %_ArgumentsLength();
919
min = argc < 2 ? GetMinutesFrom(this) : ToNumber(min);
920
sec = argc < 3 ? GetSecondsFrom(this) : ToNumber(sec);
921
ms = argc < 4 ? GetMillisecondsFrom(this) : ToNumber(ms);
841
min = argc < 2 ? NAN_OR_MIN_FROM_TIME(t) : ToNumber(min);
842
sec = argc < 3 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec);
843
ms = argc < 4 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms);
922
844
var time = MakeTime(hour, min, sec, ms);
923
845
return %_SetValueOf(this, TimeClip(UTC(MakeDate(DAY(t), time))));
929
851
var t = DATE_VALUE(this);
930
852
hour = ToNumber(hour);
931
853
var argc = %_ArgumentsLength();
932
min = argc < 2 ? GetUTCMinutesFrom(this) : ToNumber(min);
933
sec = argc < 3 ? GetUTCSecondsFrom(this) : ToNumber(sec);
934
ms = argc < 4 ? GetUTCMillisecondsFrom(this) : ToNumber(ms);
854
min = argc < 2 ? NAN_OR_MIN_FROM_TIME(t) : ToNumber(min);
855
sec = argc < 3 ? NAN_OR_SEC_FROM_TIME(t) : ToNumber(sec);
856
ms = argc < 4 ? NAN_OR_MS_FROM_TIME(t) : ToNumber(ms);
935
857
var time = MakeTime(hour, min, sec, ms);
936
858
return %_SetValueOf(this, TimeClip(MakeDate(DAY(t), time)));
959
881
function DateSetMonth(month, date) {
960
882
var t = LocalTime(DATE_VALUE(this));
961
883
month = ToNumber(month);
962
date = %_ArgumentsLength() < 2 ? GetDateFrom(this) : ToNumber(date);
884
date = %_ArgumentsLength() < 2 ? NAN_OR_DATE_FROM_TIME(t) : ToNumber(date);
963
885
var day = MakeDay(YEAR_FROM_TIME(t), month, date);
964
886
return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t)))));
969
891
function DateSetUTCMonth(month, date) {
970
892
var t = DATE_VALUE(this);
971
893
month = ToNumber(month);
972
date = %_ArgumentsLength() < 2 ? GetUTCDateFrom(this) : ToNumber(date);
894
date = %_ArgumentsLength() < 2 ? NAN_OR_DATE_FROM_TIME(t) : ToNumber(date);
973
895
var day = MakeDay(YEAR_FROM_TIME(t), month, date);
974
896
return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t))));