AI-generated Key Takeaways
-
Filters objects based on whether their timestamp falls within a specified calendar date range (e.g., month, day of year).
-
Allows filtering by various calendar fields like year, month, hour, minute, day of year, day of month, and day of week, with "day_of_year" as the default.
-
Accepts start and end values for the range, with the end defaulting to the start value if not specified.
-
Supports wrapping, meaning if
end
is less thanstart
, it filters for values greater than or equal tostart
OR less than or equal toend
. -
Assumes times are in UTC and weeks begin on Monday.
month
, day_of_year
, day_of_month
, and day_of_week
are 1-based. Times are assumed to be in UTC. Weeks are assumed to begin on Monday as day 1. If end
< start
then this tests for value
>= start
OR value
<= end
, to allow for wrapping.
Usage | Returns |
---|---|
ee.Filter.calendarRange(start, end, field) | Filter |
Argument | Type | Details |
---|---|---|
start | Integer | The start of the desired calendar field, inclusive. |
end | Integer, default: null | The end of the desired calendar field, inclusive. Defaults to the same value as start. |
field | String, default: "day_of_year" | The calendar field to filter over. Options are: `year`, `month`, `hour`, `minute`, `day_of_year`, `day_of_month`, and `day_of_week`. |
Examples
Code Editor (JavaScript)
// A Sentinel-2 surface reflectance image collection intersecting the peak of // Mount Shasta, California, USA. var ic = ee.ImageCollection('COPERNICUS/S2_SR') .filterBounds(ee.Geometry.Point(-122.196, 41.411)); print('Images for a month range (June-August)', ic.filter(ee.Filter.calendarRange(6, 8, 'month'))); print('A start value greater than end value is valid (Dec-Feb)', ic.filter(ee.Filter.calendarRange(12, 2, 'month'))); // This example uses the 'year' field value. Note that ee.Filter.date is the // preferred method when filtering by whole years, as it is much faster. print('Images for a year range (2020-2021)', ic.filter(ee.Filter.calendarRange(2020, 2021, 'year'))); // This example uses the 'day_of_year' field value. Note that // ee.Filter.dayOfYear is the preferred method for filtering by DOY. // The ee.Date.getRelative function is used to identify DOY from an ee.Date // object for a representative year. Be mindful of leap years when filtering // by DOY. var startDoy = ee.Date('2000-06-01').getRelative('day', 'year'); var endDoy = ee.Date('2000-06-15').getRelative('day', 'year'); print('start DOY =', startDoy, 'end DOY =', endDoy, 'Images for a day-of-year range', ic.filter(ee.Filter.calendarRange(startDoy, endDoy, 'day_of_year')));
import ee import geemap.core as geemap
Colab (Python)
# A Sentinel-2 surface reflectance image collection intersecting the peak of # Mount Shasta, California, USA. ic = ee.ImageCollection('COPERNICUS/S2_SR').filterBounds( ee.Geometry.Point(-122.196, 41.411)) print('Images for a month range (June-August):', ic.filter(ee.Filter.calendarRange(6, 8, 'month')).getInfo()) print('A start value greater than end value is valid (Dec-Feb):', ic.filter(ee.Filter.calendarRange(12, 2, 'month')).size().getInfo()) # This example uses the 'year' field value. Note that ee.Filter.date is the # preferred method when filtering by whole years, as it is much faster. print('Images for a year range (2020-2021):', ic.filter(ee.Filter.calendarRange(2020, 2021, 'year')).size().getInfo()) # This example uses the 'day_of_year' field value. Note that # ee.Filter.dayOfYear is the preferred method for filtering by DOY. # The ee.Date.getRelative function is used to identify DOY from an ee.Date # object for a representative year. Be mindful of leap years when filtering # by DOY. start_doy = ee.Date('2000-06-01').getRelative('day', 'year') end_doy = ee.Date('2000-06-15').getRelative('day', 'year') print('start DOY =', start_doy.getInfo(), 'end DOY =', end_doy.getInfo()) print( 'Images for a day-of-year range:', ic.filter(ee.Filter.calendarRange(start_doy, end_doy, 'day_of_year')) .getInfo() )